Report#1

課題とプログラムと考察

  1. 出力するメッセージを変更せよ。

    プログラム
    public class Hello{
    public static void main(String[] argv){
    System.out.println("Currents");
    }
    }

    実行結果
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% javac Hello.java
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% java Hello
    Currents
    [Masatoshi-ONO:~/class/prog2/rep1] j03013%

    System.out.printlnが括弧内の文字を表示するものですので、その中身を変えることでHelloとは違う文字を表示することができました。



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

    プログラム
    public class Genso2{
    public static void main(String[] argv){
    for(int i=0; i<3; i++){
    System.out.println("Orrizonte");
    }
    }
    }

    実行結果
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% javac Genso2.java
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% java Genso2
    Orrizonte
    Orrizonte
    Orrizonte
    [Masatoshi-ONO:~/class/prog2/rep1] j03013%

    これは日本語の解釈が難しくて(というか自分の言語能力が低いんですが)、次のメッセージが表示されると前のメッセージが消えてしまうのか、次のメッセージが表示されるまである程度時間が必要なのか、などと頭をよぎりましたがよく分からないのでfor文をいれて表示するようにしました。

    確かjavaの場合、変数の宣言は中の方で行うと言うことでしたのでintはfor文の中に入れました。ちなみに外の方で宣言した場合も動きました。しかしこの場合は下のようにfor文の前にないと動きませんでした。


    public class Genso2{
    public static void main(String[] argv){
    int i;
    for(i=0; i<3; i++){
    System.out.println("Orrizonte");
    }
    }
    }

    intを{}の外に出して宣言するにはクラスの継承というのをやらなくてはならないそうです。まだ、勉強不足なのでここでは割愛させていただきます。



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

    プログラム
    public class Hello {
    public static void main(String[] argv){
    System.out.println("Hello,\nJava World!");
    }
    }

    実行結果
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% javac Hello.java
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% java Hello
    Hello,
    Java World!
    [Masatoshi-ONO:~/class/prog2/rep1] j03013%

    ただ単にHello,とJava World!の間にC言語のように改行を示す\nを入れただけです。



  4. System.out.println(…)とSystem.out.print(…)の違いについて述べよ。

    下の2つのプログラムと実行結果を御覧下さい。

    class test{
    public static void main(String[] argv){
    System.out.println("Hello, Tokyo");
    System.out.print("Hello, Osaka");
    }
    }

    [Masatoshi-ONO:~/class/prog2/rep1] j03013% javac test.java 
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% java test
    Hello, Tokyo
    Hello, Osaka[Masatoshi-ONO:~/class/prog2/rep1] j03013%

    これは上がprintln、下がprintにした場合です。


    class test{
    public static void main(String[] argv){
    System.out.print("Hello Osaka");
    System.out.println("Hello, Tokyo");
    }
    }

    [Masatoshi-ONO:~/class/prog2/rep1] j03013% javac test.java 
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% java test
    Hello OsakaHello, Tokyo
    [Masatoshi-ONO:~/class/prog2/rep1] j03013%

    これは逆に上がprint、下がprintlnにした場合です。

    見ての通り、printではprintlnの様に最後が改行されません。他の機能はだいたい同じのようです。


  5. 同じメッセージを3回、同一行に出力せよ。

    プログラム
    public class Genso2{
    public static void main(String[] argv){
    for(int i=0; i<3; i++) {
    System.out.print("Orrizonte");
    }
    }
    }

    実行結果
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% javac Genso2.java
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% java Genso2
    OrrizonteOrrizonteOrrizonte[Masatoshi-ONO:~/class/prog2/rep1] j03013%

    上で分かった2つの結果(bとd)を組み合わせてみました。for文で3回表示して、print文で改行しないようにしました。



  6. 次のような菱形模様(「*」を用いる)を出力せよ。
      *
     ***
    *****
     ***
      *
      
    プログラム

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

    実行結果

    [Masatoshi-ONO:~/class/prog2/rep1] j03013% javac hisigata.java
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% java hisigata * *** ***** *** * [Masatoshi-ONO:~/class/prog2/rep1] j03013%

    実行結果が少しずれたりしたので手直しがちょっとありました。これはprintlnとスペースを使って*を所定の位置まで持っていきました。printでもできるんでしょうけど¥nを入れながらの調整は大変そうです。



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

    プログラム
    public class hajirusi{
    public static void main(String[] argv){
    System.out.println(" **");
    System.out.println(" **");
    System.out.println("***********");
    System.out.println(" **");
    System.out.println(" **");
    }
    }


    実行結果
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% javac hajirusi.java
    [Masatoshi-ONO:~/class/prog2/rep1] j03013% java hajirusi ** ** *********** ** ** [Masatoshi-ONO:~/class/prog2/rep1] j03013%

    すみません、自分は美的感覚がないんでこんな代わり映えのしない矢印を作りました。プログラムの書き方はほぼfと同じです。


エラーについて

Java compilerはGNU compilerと違ってコンパイル時に細かいエラーを報告してくれます。

例(ファイル名をHelloとした場合)

プログラム
public class Hello {
  public static boid main(String[] argv){
  System.out.plintln("Hello,Java World!");
  }
}

実行結果
[Masatoshi-ONO:~/class/prog2/rep1] j03013% javac Hello.java
Hello.java:2: シンボルを解決できません。
シンボル: クラス boid 
場所    : Hello の クラス
  public static boid main(String[] argv){
                ^
Hello.java:3: シンボルを解決できません。
シンボル: メソッド plintln (java.lang.String)
場所    : java.io.PrintStream の クラス
  System.out.plintln("Hello,Java World!");
            ^
エラー 2 個
[Masatoshi-ONO:~/class/prog2/rep1] j03013%

上のように間違った所を指摘してくれますが、幾つかの特定なエラーがあると正しく返さない時があります。

例2
プログラム
public class Hallo {
  public static void main(String[] argv){
  System.out,plintln("Hello,Java World!");
  }
}

実行結果
[Masatoshi-ONO:~/class/prog2/rep1] j03013% javac Hello.java
Hello.java:3: 文ではありません。
  System.out,plintln("Hello,Java World!");
        ^
Hello.java:3: ';' がありません。
  System.out,plintln("Hello,Java World!");
            ^
Hello.java:1: クラス Hallo は public であり、ファイル Hallo.java で宣言しなければなりません。
public class Hallo {
       ^
エラー 3 個
[Masatoshi-ONO:~/class/prog2/rep1] j03013%

上のようにprintlnのスペルが間違っていても、前の部分が間違っているとそこでエラーを返し終わってしまいます。エラーの報告には優先順位があるみたいです。


感想

JavaはC言語とところどころ似通ったものがあったのでいきなり頭がパニックになることはありませんでした。htmlの知識が不十分なので見づらいページになってしまいました。すみません。