レポート#3






課題

多くのJava制御文を用いてオリジナルのJavaアプリケーションによる初級問題を作成し、
模範解答例を示せ。


	
ーーー問題ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

次のプログラムを実行した場合、どのような結果がディスプレイに実行されるか?
表示される通りに書け。

[Masaki-HIGA:~/java-rep/rep#3] j03043% cat test.java
class test{
    public static void main (String[] args) {
        System.out.println("[Q1]");
        For();
        System.out.println("\n[Q2]");
        If();
        System.out.println("\n[Q3]");
        Switch();
        System.out.println("\n[Q4]");
        While();
        System.out.println("\n[Q5]");
        Break();
        System.out.println("\n[Q6]");
        Continue();
        System.out.println("\n[Q7]");
        Mondai();
    }


    /*for文*/
    public static void For() {
        for( int i=-2; i<1; i++) {
            System.out.println("i="+i);
        }
    }


    /*if文*/
    public static void If() {
        int a=10, b=5, c=15;

        if(a < b)
            System.out.println("1");

        if(c / b == 2)
            System.out.println("2");
    
        if(c % a == 5)
            System.out.println("3");

        if(a + b > c)
            System.out.println("4");
        else if(a + b < c)
            System.out.println("5");
        else
            System.out.println("6");

        if(c - a < b)
            System.out.println("7");
        else if(c - a > b)
            System.out.println("8");
        else
            System.out.println("9");
    }


    /*switch文*/
    public static void Switch() {
        int i=3;
            switch (i) {
                case 1:
                    System.out.println("a");
                case 2:
                    System.out.println("b");
                case 3:
                    System.out.println("c");
                case 4:
                    System.out.println("d");
                    break;
                default:
                    System.out.println("e");
            }
    }


    /*while文*/
    public static void While() {
        int i=3;
        while (i<3) 
            System.out.println("a");
        do{
            System.out.println("b");
        }
        while (i<3);
    }


    /*break*/
    public static void Break() {
        for (int i=0; i<5; i++) {
            System.out.println("i="+i);
            if (i == 2) break;
        }
    }

    /*continue*/
    public static void Continue() {
        for (int i=0; i<5; i++) {
            System.out.println("i="+i);
            if (i == 2) continue;
            System.out.println("*******");
        }
    }


    public static void Mondai() {
        for (int a=1; a<4; a++) {
            for ( int b=5; b>1; b--) {
                System.out.println("a="+a+ ",b="+b);
                if (a == 2) continue;
                   System.out.println("##########");
                if (b == 3) break;
                   System.out.println("**********");
            }
        }
    }
}




ーーー解答ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

[Masaki-HIGA:~/java-rep/rep#3] j03043% java test
[Q1]
i=-2
i=-1
i=0

[Q2]
3
6
9

[Q3]
c
d

[Q4]
b

[Q5]
i=0
i=1
i=2

[Q6]
i=0
*******
i=1
*******
i=2
i=3
*******
i=4
*******

[Q7]
a=1,b=5
##########
**********
a=1,b=4
##########
**********
a=1,b=3
##########
a=2,b=5
a=2,b=4
a=2,b=3
a=2,b=2
a=3,b=5
##########
**********
a=3,b=4
##########
**********
a=3,b=3
##########


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


考察


for文
 for文の使い方はCのときとなんら変わらないと思います。
 ただ、Javaでは前のレポートにも書きましたがfor()内で変数を宣言できます。
 あと少し特殊な書き方もできます。

ーーープログラムーーーーー
[Masaki-HIGA:~/java-rep/rep#3] j03043% cat sample.java
/*
  for文の特殊な書き方
*/

class sample {
    public static void main(String[] args) {
        for (int i=0; i<5; i++,
                 System.out.println("i="+i));
            }
}

ーーー結果ーーーーーーーー
[Masaki-HIGA:~/java-rep/rep#3] j03043% java sample
i=1
i=2
i=3
i=4
i=5
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 この書き方をすれば文のなかで『,』で区切ることにより、複数の変数宣言や
 複数行のプログラムの実行をすることができます。
 あと気になったのがfor()内での
 i=0; i<5; i++
 という部分がこの特殊な書き方をしなければ実行したとき、i=0からi=4まで
 表示されるはずなのに、この書き方をしたらi=1からi=5まで表示されているところです。



if文
 if文は
                     
    if() {                     
         文                     
     }
	
 といった感じで使うかもしくは
   if() {                     
         文1                   
     } else {                   
         文2                   
     }  
                        
 と使います。もし()の中が真だったら文を実行するといった感じです。
 これはC言語との違いはわかりません。



switch文
 switch文は
      switch(値) {                 
          case 値1:
               文1
               break;
          case 値2:
               文2
               break;

    ・・・

          case 値n:
               文n
               break;
          default:
               デフォルト文
               break;
          }                        

  と使います。switch文は条件によって3つ以上の処理を選ばせたいときに
  使うと便利です。注意するのは、条件にあったcase文が実行された後に
  breakのキーワードがない場合、次のcase文が無条件に実行されてしまうことです。
  今回の課題のテスト問題でもひっかけ(誰に?)としてbreakをひとつしかつけてません。



while文
 while文は
      while(値) {                  
          文
      }

  do~while文は
      do {
          文
      } 
      while (値);
                                   
 と使います。二つの共通点は与えられた条件が真の間は何度も処理を繰り返すこと。
 違いとしてはwhile文は条件によっては一度もwhile文の中の処理が実行されない
 こともあるが、do~while文は必ず一回はdo文の中の処理が実行される。



break、continue、return、throw
 これらはwhile、do、forによる繰り返し処理を何かの条件により中断するキーワードです。
 簡単に説明すると
break ループを終了して、ループ外に抜ける。
continue ループを中断し、次のループを実行する。
return ループのあるメソッドそのものを抜けて、メソッドの呼び出しもとに戻る。
throw 例外を発生させて、例外処理を定義している場所に処理を移す。



 breakは課題のプログラムでもわかるように、i==2となった時点で実行され、
 その結果for文が終了しています。

 continueの場合はi==2となった時に実行され、次に画面に出力されるはずの
 *を出力せず(中断)i==3の時の処理にうつります。



感想・反省
  琉大祭で遊んでしまってこのレポートをやりはじめたのが夜の1時頃、
 でも321に来てみるとなんだかやってるだけでもマシな雰囲気でした。
 目標は朝の8時には家に帰って寝ることだったのに終わるのが8時頃に
 なってしまいました。今回テスト問題を作るのでしたがなんか問題の出し方が
 かなり適当です。大目にみてください。


参考文書
  はじめてのJavaプログラミング

  やさしいJava

  ちょっとトラ本