Report#1


例題Hello.java
public class Hello {
    public static void main(String[] argv){
        System.out.println("Hello, Java World!");
    }
}

例題Hello.javaを以下のように書き換えて、出力せよ。
a. 出力するメッセージを変更せよ。
b. 同じメッセージを3回、別々の行に出力せよ。
c. 「Hello,」と「Java World!」を別々の行に出力せよ。
d. System.out.println(…)とSystem.out.print(…)の違いについて延べよ。
e. 同じメッセージを3回、同一行に出力せよ。
f. 次のような菱形模様(「*」を用いる)を出力せよ。
g. 「*」を用いて、自分の好きな形を出力せよ。
h. 感想・反省、参考文献


a.出力するメッセージを変更せよ。
[1]ソースプログラム
public class report1a {
    public static void main(String[] argv){
        System.out.println("Time is money!");
    }
}
[2]実行結果
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% javac Report1a.java
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% java Report1a
Time is money!
[3]考察
例題のHello.javaのクラス名と"〜"内を変えただけである。
1行目はクラスの宣言をしている。「public性格をもつclassであるreport1aを宣言する」という意味。publicとは修飾子の1つで、他の全てのクラスから参照できるクラスであることを示す。
この場合クラス名をReport1aとしているが、クラスや変数の名前を付けるときは決まりがある。この名前のことを識別子というが、識別子に使用できる一般的な文字は以下の通りである。

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 _(下線) $

これらの文字を組み合わせて使用できる。ただし、数字を先頭にして使うことはできない。また、英字の大文字と小文字は区別されるので、Reportとreportは異なる名前になる。
さらに、Javaには予約語というあらかじめ用意された名前があり(forやintなど)それらを識別子に使うことはできない。部分的に含まれる場合は使用できる。以下は予約語一覧。これらは変数名等に利用できない。
abstract boolean break byte case catch char class const continue default do double else extends final finally flota for goto if implements import instanceof int interface ling native new package private protected public strictfp super switch synchronized this throw throws transient try void volatile while

2行目はmainメソッドを宣言している。メソッドとは関数のこと。「公開型」で 「staticタイプ」で「戻り値がない(void)」mainという名前のメソッドを定義する。String arg[]は、mainメソッドが外部からString型の引数(その名前をargsとする)を受け取れることを示す。Javaアプリケーションの実行は、main()メソッドから開始されるため、Javaアプリケーションプログラムには、main()メソッドを1つ必ず記述しておく必要がある。
3行目は文字列の出力をする。先頭のSystem.outは標準出力を意味する。printlnで「文字列を出力しろ」という意味、("〜")の〜の部分が出力する文字列内容である。System.out.printlnと続けることで、画面への文字列出力機能になる。

b.同じメッセージを3回、別々の行に出力せよ。

[1]ソース

public class report1b{
    public static void main(String[] argv){
        System.out.println("prog2"); 
        System.out.println("prog2"); 
        System.out.println("prog2"); 
    }
} 
[2]実行結果
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% javac Report1b.java
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% java Report1b
prog2
prog2
prog2
[3]考察
改行付きの出力で同じ文字列を3回書いた。改行をつけないと1行にまとまって出てくる。

c.「Hello,」と「Java World!」を別々の行に出力せよ。

[1]ソース
public class report1c{
    public static void main(String[] argv){
        System.out.println("Hello,");
        System.out.println("Java World!");
    }
}
[2]実行結果
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% javac Report1c.java
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% java Report1c
Hello,
Java World!
[3]考察
これもbと同じで改行付きの出力にして2行にしただけ。

d.System.out.println(…)とSystem.out.print(…)の違いについて延べよ。
[1]ソース
public class report1d{
    public static void main(String[] argv){
        System.out.println("Java");
        System.out.print("Java");
        System.out.println("Java");
    }
} 
[2]実行結果
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% javac Report1d.java
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% java Report1d
Java
JavaJava
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002%
[3]考察
はじめの文字列Javaはprintln()なので出力後改行されて次の行に移っている。2番目のJavaは、print()なので、出力した後も改行はせず、3番目のJavaにくっついて出力されている。3番目のJavaは、print()なので出力後改行され、プロンプトはその次の行に出る。

e.同じメッセージを3回、同一行に出力せよ。
[1]ソース
public class report1e{
    public static void main(String[] argv){
        int i = 0;
        do{
            System.out.print("NoteBook,");
            i++;
        }while(i <= 2);
        System.out.print("\n");
    }
} 
[2]実行結果
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% javac Report1e.java
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% java Report1e
NoteBook,NoteBook,NoteBook,
[3]考察
do-while文を使って処理を繰り返している。以下のようにしてdo-while文は使う。

do {
     文
} while (継続条件);

iに0を代入する。そして、"NoteBook,"を改行なしのprint()で出力しそのたびにiに1加算する。継続条件はiが2以下なので、iが0、1、2のとき、計3回"NoteBook,"と出力する。最後に改行して終了する。

f.次のような菱形模様(「*」を用いる)を出力せよ
  *
 ***
*****
 ***
  *
[1]ソースプログラム
public class report1f{
    public static void main(String[] argv){
        System.out.println("  *  ");
        System.out.println(" *** ");
        System.out.println("*****");
        System.out.println(" *** ");
        System.out.println("  *  ");
    }
}
[2]実行結果
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% javac Report1f.java
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% java Report1f
  * 
 *** 
*****
 *** 
  *  
[3]考察
println()で改行つきの出力で" "と"*"を使ってひし形を書いた。

g.「*」を用いて、自分の好きな形を出力せよ。

[1]ソース
public class report1g{
    public static void main(String[] argv){
        System.out.println("         *         ");
        System.out.println("        ***        ");
        System.out.println("      *******      ");
        System.out.println("    ***********    ");
        System.out.println("  ***************  ");
        System.out.println(" ***************** ");
        System.out.println("   **** *** ****   ");
        System.out.println("        ***        ");
        System.out.println("       *****       ");
    }
}
[2]実行結果
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% javac Report1g.java
[Takumi-IKEHARA:〜/prog2/report/report#1] j04002% java Report1g
        * 
       *** 
     ******* 
   *********** 
 *************** 
***************** 
  **** *** **** 
       *** 
      ***** 

[3]考察
トランプのスペードマークをつくりました。よくヒソカのセリフの後についてるやつです。見た目はシンプルでちょっと気に入ってます。木とかキノコみたいになったりして試行錯誤しました。

h.感想・反省、参考文献
●感想・反省
 夏休みに入る前に谷口先生が「勉強しておけよ!」といっていたJavaですが、自分は先輩のをうつして"Hello, Java World!"を出力して満足して終わってしまい、結局はその後このレポートまでJavaには触れませんでした。なのでちょっと手こずりそうで心配でしたが、プログラム自体は簡単でほっとしました。でもHTMLの知識が頭から消えていて、笑えました。C言語以上にJavaをがんばろうと思います。後期もよろしくおねがいします。
●参考文献
 独習Java 第2版      ジョゼフ・オニール 著
                トップスタジオ 訳
                武藤 健志 監修
 新Java言語入門ビギナー編  林 晴比古 著