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

2.プログラムと実行結果
[課題a]
/*
   Program     : a.java
   Student_ID  : 045754A
   Author      : Hayato MIYAGI
   Date        : 041028(Tue)
   Comments    : 課題a
*/

public class a {
    public static void main(String[] argv) {
        System.out.println("Koukimo,Yorosiku,Onegai-simasu!");
    }
}
-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/a.java] j04054% java a
Koukimo,Yorosiku,Onegai-simasu!

[課題b]
/*
   Program     : b.java
   Student_ID  : 045754A
   Author      : Hayato MIYAGI
   Date        : 041028(Tue)
   Comments    : 課題b
*/

public class b {
    public static void main(String[] argv){
    System.out.println("Koukimo,Yorosiku,Onegai-simasu!");
    System.out.println("Koukimo,Yorosiku,Onegai-simasu!");
    System.out.println("Koukimo,Yorosiku,Onegai-simasu!");
    }
}

-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/b.java] j04054% java b
Koukimo,Yorosiku,Onegai-simasu!
Koukimo,Yorosiku,Onegai-simasu!
Koukimo,Yorosiku,Onegai-simasu!


[課題c]
/*
   Program     : c.java
   Student_ID  : 045754A
   Author      : Hayato MIYAGI
   Date        : 041028(Tue)
   Comments    : 課題c
*/

public class c{
    public static void main(String[] argv){
    System.out.println("Hello,");
    System.out.println("Java World!");
    }
}
-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/c.java] j04054% java c
Hello,
Java World!

[課題d]
/*
   Program     : d.java
   Student_ID  : 045754A
   Author      : Hayato MIYAGI
   Date        : 041028(Tue)
   Comments    : 課題d
*/

               
[課題e]
/*
   Program     : e.java
   Student_ID  : 045754A
   Author      : Hayato MIYAGI
   Date        : 041028(Tue)
   Comments    : 課題e
*/

public class e {
    public static void main(String[] argv){
    System.out.print("元気!");
    System.out.print("元気!");
    System.out.print("元気!");
    }
}       

-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/e.java] j04054% java e
元気!元気!元気![nw0454:~/prog2/repo1/e.java] j04054%  
       
[課題f]
/*
   Program     : f.java
   Student_ID  : 045754A
   Author      : Hayato MIYAGI
   Date        : 041028(Tue)
   Comments    : 課題f
*/

public class f {
    public static void main(String[] argv){
    System.out.print(" ");
    System.out.print(" ");
    System.out.println("*");
    System.out.print(" ");
    System.out.print("*");
    System.out.print("*");
    System.out.println("*");
    System.out.print("*");
    System.out.print("*");
    System.out.print("*");
    System.out.print("*");
    System.out.println("*");
    System.out.print(" ");
    System.out.print("*");
    System.out.print("*");
    System.out.println("*");
    System.out.print(" ");
    System.out.print(" ");
    System.out.println("*");
    }
}

-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/f.java] j04054% java f
  *
 ***
*****
 ***
  *
[課題g]
/*
   Program     : g.java
   Student_ID  : 045754A
   Author      : Hayato MIYAGI
   Date        : 041028(Tue)
   Comments    : 課題g
*/


public class g {
    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("    **********      *****     *                      *         ");
    System.out.println("    *               *   *     ******             *   *   *     ");
    System.out.println("    **********      *   *     *                *     *     *   ");
    System.out.println("              *     *   *     ******         *       *      *  ");
    System.out.println("               *    *   *     *          *        *  *         ");
    System.out.println("  *  * * *     *    *  **     *          *         * *         ");
    System.out.println(" *   * * *     *   *    *      ***********           *         ");
    System.out.println("          *   *                                                ");
    System.out.println("            *                                                  ");
    }
}

-------------------------------------------------------------Result

[Hayato-MIYAGI:~/prog2/repo1/g.java] j04054% java g
       *              *       *                   *     *      
      *             *****     ****              ***********    
    ********         * *      *                    *   *       
    *      *       *******    *****                  *         
    ********        *****         *                *   *       
    *      *        *   *     *****             *    *    *    
    ********        *****     *              *    *******    * 
    *               *   *     ******                 *         
    **********      *****     *                      *         
    *               *   *     ******             *   *   *     
    **********      *   *     *                *     *     *   
              *     *   *     ******         *       *      *  
               *    *   *     *          *        *  *         
  *  * * *     *    *  **     *          *         * *         
 *   * * *     *   *    *      ***********           *         
          *   *                                                
            *                                                  

3.考察
  課題aについて考察していきたいとおもいます。
課題a
 まず、以下のようなプログラムを作成しました。
/*
   Program     : repo1.java
   Student_ID  : 045754A
   Author      : Hayato MIYAGI
   Date        : 041028(Tue)
   Comments    : 課題aの補足
*/

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

[Hayato-MIYAGI:~/prog2/repo1] j04054% javac repo1.java
repo1.java:1: ?N??X Hello ? public ????A?t?@?C? Hello.java ????
?????????B
public class Hello {
       ^
?G??[ 1 ?

すると、コンパイル時に上のようなエラーが出てしまいました。
ここでソース一番上のpublic class Helloをpublic class repo1と
直して再びコンパイルすると上手くいきました。

[Hayato-MIYAGI:~/prog2/repo1] j04054% java repo1
Hello, Java World!

たぶん、私が思うにファイル名とクラス名が違っていたからだと思い
ました。

以上をふまえて課題aを作成しました。
public class a {
    public static void main(String[] argv) {
        System.out.println("Koukimo,Yorosiku,Onegai-simasu!");
    }
}
-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/a.java] j04054% java a
Koukimo,Yorosiku,Onegai-simasu!

System.out.println("")を用いることで()の中の文字列をディスプ
レイに表示させることも課題aより理解しました。


課題bについて
 文字出力させるSystem.out.println("")を三つ使うことで("")の
中の文字列を別々の行にそれぞれ表示させることができました。

public class b {
    public static void main(String[] argv){
    System.out.println("Koukimo,Yorosiku,Onegai-simasu!");
    System.out.println("Koukimo,Yorosiku,Onegai-simasu!");
    System.out.println("Koukimo,Yorosiku,Onegai-simasu!");
    }
}

-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/b.java] j04054% java b
Koukimo,Yorosiku,Onegai-simasu!
Koukimo,Yorosiku,Onegai-simasu!
Koukimo,Yorosiku,Onegai-simasu!


課題cについて
 課題bと同様に考えました。「Hello,」と「Java World!」を別々の
行に表示させるのだからSystem.out.println("")を二回用いることで上手くいき
ました。
public class c{
    public static void main(String[] argv){
    System.out.println("Hello,");
    System.out.println("Java World!");
    }
}
-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/c.java] j04054% java c
Hello,
Java World!


課題dについて
 System.out.println()とSystem.out.print()の違いを調べるために
以下のようなプログラムを作成しました。

public class d {
    public static void main(String[] argv){
    System.out.println("Hello,Java World!");
    System.out.print("Hello,Java World!"); 
    System.out.print("The World! Stop the Time!");
   }
} 

-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/d.java] j04054% java d
Hello,Java World!
Hello,Java World!The World! Stop the Time![Hayato
MIYAGI:~/prog2/repo1/d.java] j04054% 

 実行結果を見てSystem.out.println()とSystem.out.print()が出力
した結果を比較すると、
System.out.println()によって出力された文字列「Hello~」の次にSystem.out.print()によって出力された文字列「Hello~」は改行さ
れて出力されているが、その次に出力されている文字列「The 
World! Stop the Time!」は後ろにそのまま出力されている。
 よって、System.out.println()によって出力された文字列の後ろは
改行されることがわかる。逆に、System.out.print()によって出力
された文字列の後ろは改行されずに次の文字列が出力されているので
System.out.print()によって出力された文字列の後ろは改行されない
ということがわかる。

つまり、
 
「System.out.println()によって出力された文字列」改行する
「System.out.print()によって出力された文字列」改行しない

という違いがあるとわかります。


課題eについて
 課題dの結果をふまえてSystem.out.print()を三回用いることで
以下のように同じ文字列を同一行に三回表示させることができる。

public class e {
    public static void main(String[] argv){
    System.out.print("元気!");
    System.out.print("元気!");
    System.out.print("元気!");
    }
}       

-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/e.java] j04054% java e
元気!元気!元気![nw0454:~/prog2/repo1/e.java] j04054%  


課題fについて
 *印を用いて菱形を出力させるプログラムを作成すると以下のように
なります。

public class f {
    public static void main(String[] argv){
    System.out.print(" ");
    System.out.print(" ");
    System.out.println("*");
    System.out.print(" ");
    System.out.print("*");
    System.out.print("*");
    System.out.println("*");
    System.out.print("*");
    System.out.print("*");
    System.out.print("*");
    System.out.print("*");
    System.out.println("*");
    System.out.print(" ");
    System.out.print("*");
    System.out.print("*");
    System.out.println("*");
    System.out.print(" ");
    System.out.print(" ");
    System.out.println("*");
    }
}

-------------------------------------------------------------Result
[nw0454:~/prog2/repo1/f.java] j04054% java f
  *
 ***
*****
 ***
  *


以上より、課題fでは一文字ずつ出力させて菱形を出力させました。


課題gについて
 「*」を用いて自分の好きな形を出力してもよいということで私は
「*」を用いて「烏龍茶」という文字を出力してみました。プログラム
と実行結果を以下に示します。
  

public class g {
    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("    **********      *****     *                      *         ");
    System.out.println("    *               *   *     ******             *   *   *     ");
    System.out.println("    **********      *   *     *                *     *     *   ");
    System.out.println("              *     *   *     ******         *       *      *  ");
    System.out.println("               *    *   *     *          *        *  *         ");
    System.out.println("  *  * * *     *    *  **     *          *         * *         ");
    System.out.println(" *   * * *     *   *    *      ***********           *         ");
    System.out.println("          *   *                                                ");
    System.out.println("            *                                                  ");
    }
}

-------------------------------------------------------------Result

[Hayato-MIYAGI:~/prog2/repo1/g.java] j04054% java g
       *              *       *                   *     *      
      *             *****     ****              ***********    
    ********         * *      *                    *   *       
    *      *       *******    *****                  *         
    ********        *****         *                *   *       
    *      *        *   *     *****             *    *    *    
    ********        *****     *              *    *******    * 
    *               *   *     ******                 *         
    **********      *****     *                      *         
    *               *   *     ******             *   *   *     
    **********      *   *     *                *     *     *   
              *     *   *     ******         *       *      *  
               *    *   *     *          *        *  *         
  *  * * *     *    *  **     *          *         * *         
 *   * * *     *   *    *      ***********           *         
          *   *                                                
            *                                                  


 上の実行結果をみてわかるように隙間無くキレイに文字を出力する
ことはできませんでしたが、よーく見ると「烏龍茶」って確認すること
ができると思います。
最初は「烏龍茶」を縦に出力しようとしたのですが出力した時、見る人
が見にくいだろうと考えて横表示するようにしました。
 しかし、横一行に「*」を要所に配置することで漢字三文字を表現する
のは少し時間がかかってしまいました。

4.感想と反省
 今回Javaプログラムを作成するにあたって気づいたことはJavaはクラ
ス名とファイル名が正確に一致していないとコンパイル時にエラーが出
てしまうことがC言語との違いですね。大文字と小文字まで細かく判別
するので時たま大文字と小文字の入力ミスに気が付きにくいです。
 それから一つ気になる事がありました。課題aのところでrepo1.java
のプログラムでクラス名とファイル名が違うとコンパイルできないと
書きましたが、実は以下のようにするとコンパイルが通りました。

public class Hello{
   public static void main(){
         .
         .
         .
   }
}
一番上のpublicという部分を取り除くとコンパイルできました。
クラス名とファイル名が違うのにコンパイルできた理由がよく分かり
ませんでした。2行目のmain()に付属しているpublicというキーワードと何か
関係があるのでしょうか?


5.参考文献
 独習Java第2版               ジョセフ.オニール 著
                       トップスタジオ  訳
                       武藤 健志   監修