Report6

[課題]

12/5付試験のQ23〜Q38について考察せよ。
Wiki に戻る




[Q23]
〜ソースプログラム〜
public class q23{
    public static void main(String args[]){
    int x, y;                              //int型で変数x,yを宣言
    x = 10                       //xに100を代入
    x += 1;                      //xにx+1を代入(xに1加える)
    x--;                       //xから1引く
    y = 200 + x;                   //yに200 + xを代入する
    System.out.println(y++);           //yを表示するが、yの後に++があるため表示した後にyを1増やす
    }
}
〜実行結果〜
300



[Q24]
〜ソースプログラム〜
public class q24{
    public static void main(String args[]){            
        int a =0, x=0;                        //int型で変数aとxを宣言し、0で初期化
        a = 5;                    //aに5を代入し
    a +=3;                     //aに3を加える
    x = ++a;                    //xにaに1加えた値を代入
        System.out.println(x);          //xを表示する
    }
}
〜実行結果〜
9



[Q25]
〜ソースプログラム〜
public class q25{
    public static void main(String args[]){     
        int a=9, b=3;                       //int型でaとbを宣言しaは9でbは3で初期化
        a /= b;                  //aにa/bを代入(a/bは3)
        System.out.println(a %= b);         //aにa%bの値を代入し、aの値を表示
    }
}
〜実行結果〜
0



[Q26]
〜ソースプログラム〜
public class q26{
    public static void main(String args[]){     
        int i,j;                   //int型でi、jを宣言
        for(i=0, j=0; i<3; i++) ++j;            //i,jを0で初期化してiが3未満の間iを1増やし
                                 その間jもデクリメントする
                                                    
        System.out.println(i * j);          //iとjをかけたものを表示
    }
}
〜実行結果〜
9



[Q27]
〜ソースプログラム〜
public class q27{
    public static void main(String args[]){     
       int i=2;                               //int型でiを宣言し2で初期化
       while(i-- > 0)                //i>0の間デクリメントされる。
                              iはwhile文の中で比較された後にデクリメントする
   System.out.print(i);            //iを表示
〜実行結果〜
10
while文はまず条件式に当てはまってるか確認してから処理をします。 またwhile文後に{}がない場合、;(セミコロン)までを{}とみなします。


[Q28]
〜ソースプログラム〜
public class q28{
    public static void main(String args[]){     
        int num=10000;                       //int型でnumを宣言し、10000で初期化
        for(int i=0; i < 4; i++) num >>= i;  //int型でiを宣言し0で初期化。i<4の間ループし
                                iはインクリメント、numは左にiビットシフトする
      System.out.println(num);                 //iを表示
〜実行結果〜
156
for文でiは0,1,2,3となりでnumは全部で6ビット左にシフトしている


[Q29]
〜ソースプログラム〜
public class q29{
    public static void main(String args[]){     
       int num = 0;                  //int型でnumを宣言し0で初期化
        for(int i = 1; i<=10; i++){        //int型でiを宣言し1で初期化。
                             i<=の間ループしiをインクリメントする
        if(++num % i == 0) num++;         //numに1加えた値をiで割った余りが0ならばnumに1加える
        }
        System.out.println(++num);               //numに1加えて表示
    }
}
〜実行結果〜
12
if文の条件式はi=1の時のみ真となる (++num)となっているので出力する前にインクリメントする


[Q30]
〜ソースプログラム〜
public class q30{
        public static void main(String args[]){    
            int a = 9;                  //int型aを宣言し9で初期化
            if(a++ != 10 | a++ == 10) a++;     //まずaと10が違う比比較し、次にaに1
                                                加えてaと10が同じか比べる。後に1加え、
                              この2つを比較したものをorでくくったものがtrueなら加える。
            System.out.println(a);
    }
}
〜実行結果〜
12



[Q31]
〜ソースプログラム〜
public class q33{
    public static void main(String args[]){     
        for(int i =0; i < 5; i++)             //int型でiを宣言し0で初期化。
                         iが5未満の間処理が終わった後iをインクリメント
        System.out.println( "i == " + i);     //"i ==" +iを表示 
        System.out.println("Hello");          //Helloを表示
    }
}  
〜実行結果〜
i == 0
i == 1
i == 2
I == 3
i == 4
Hello
( "i == " + i)の+iはインクリメントされたiを大入し表示する。 またfor文のループが実行されるのは{}内または最初のセミコロンまで


[Q32]
〜ソースプログラム〜
public class q32{
    public static void main(String args[]){     
        int i;                //int型iを宣言
        for(i = 0; i < 9;i += 3){}      //iを0で宣言しiが9未満ならば処理した後にiに3加える       System.out.println(i)       //iを表示
    }
}
〜実行結果〜
9
for文でループするのは{}内。{}中には何もないのでただiが3足されていき9に になったときにループから出てくる。


[Q33]
〜ソースプログラム〜
public class q33{
    public static void main(String args[]){     
        for( int i=0; i < 8; i ++){          //int型でiを宣言し0で初期化。
                          iが8未満なら処理を行なった後iをインクリメント
           System.out.println(i);       //iを表示
          i += 3;              //iに3加える
    }
}
〜実行結果〜
0
4
for文中のi ++は処理が終わってから行なう、ここではi += 3がを実行した後


[Q34]
〜ソースプログラム〜
class q34{
    public static void main(String args[]){
        int i = 0;                            //int型iを宣言し0で初期化
        for( sayHello(); i <= 6; i += 3){     //iが6以下ならばループし 処理が終わったら3を足す
             sayHello();            //sayHello()を呼び出す
        }
    }
    static void sayHello(){         //static関数の定義
        System.out.println("Hello");       //"Hello"を表示
    }
}

〜実行結果〜
Hello
Hello
Hello
Hello
まずfor文の条件式の中ににあるsayHello()が呼び出され表示。そしてループに より3回表示で全部で4回表示される。


[Q35]
〜ソースプログラム〜
class q35{
    public static void main(String args[]){     
      Player p1 = new Player ();
      Player p2 = new Player ();
      p1.id = 1000;                        //p1.idに1000を代入
      p2.id = 2000;            //p2.idに2000を代入
      p1.num += p1.id;                     //p1.numにp1.idを代入
      p2.num += p1.id;                     //p2.numにp2.idを代入
      System.out.println(Player.num);   //player.numを表示
    }
}
class Player{
  int id =0;                //int型idを0で初期化
   static int num =0;           //static関数int型numを0で初期化
}
〜実行結果〜
3000



static関数は値を共有しているのでp1,p2に関係なく合計される。 したがって1000+2000=3000となる。


[Q36]
〜ソースプログラム〜
class Test{
   public static void main(String args[]){
     Player p1 =new Player();
     Player p2 =new Player();
     p1.id = 1000;                           //p1.idに1000を代入
     p2.id = 2000;             //p2.isに2000を代入
     Player.num += p1.id;          //Player.numにp1.idの値を加える
     Player.num += p2.id;          //Player.numにp2.idの値を加える 
     System.out.println("p1.num == "+p1.num); //"p1.num == "+p1.numを表示
     System.out.println("p2.num == "+p2.num); //"p2.num == "+p2.numを表示
   }
}
class Player{
  int id = 0;                                 //int型idを定義し0で初期化
  static int num = 0;             //static変数でint型numを定義し0で初期化
}
〜実行結果〜
p1.num == 3000
p2.num == 3000
static関数を使用しているので値が保持される。 したがってQ35と同じような結果になりp1.num == 3000とp2.num == 3000なる。


[Q37]
〜ソースプログラム〜
class Test{
  public static void main(String args[]){
    Card c1 = new Card();         //コンストラクタ(引数無し)を使って初期化
    Card c2 = cew Card();                  //コンストラクタ(引数無し)を使って初期化
    Card c3 = c1;                          //c3にc1を代入
    c1.deposit = 1000;           //c1に1000を代入
    c2.deposit = 2000;           //c2に2000を代入
    c3.deposit = 3000;           //c3に3000を代入
    int sum = c1.deposit + c2.deposit + c3.deposit; // sumにc1,c2,c3を足した値を代入
    System.out.println(sum);                //sum(上で計算した値)を表示
  }
}
class Card{
  int deposit;               //ローカル変数depositの宣言
}
〜実行結果〜
8000
まずc1に1000が代入され、次にc2には2000代入される。次にc3に3000を代入する。 するとCard c3 = c1;となっているのでc1も3000となる。 つまりc1=3000,c2=2000,c3=3000 よりc1+c2+c3=8000となる。


[Q38]
〜ソースプログラム〜
class Test2{
  public static void main(String args[]){
   Card c1 =new Card();          //コンストラクタ(引数無し)を使って初期化
   Card c2 = c1;                           //c2=c1とする
   c1.deposit =1000;           //c1に1000を代入
   c2.deposit =2000;           //c2に2000を代入
   Bank.useCard( c1 );           //Bank.useCard()を呼び出しc1を計算する
   Bank.useCard( c2 );          //Bank.useCard()を呼び出しc2を計算する
   /*c1.depositとc2.depositの関係は?*/        //コメント
   System.out.println("c1.deposit==" +c1.deposit);  //"c1.deposit=="とc1の値を表示
   System.out.println("c2.deposit==" +c2.deposit);    //"c2.deposit=="とc2の値を表示
  }
}
class Card{ int deposit; }
class Bank{
    public static void useCard( Card c){
      c.deposit -= 500;           // c.depositから500引く
    }
}
〜実行結果〜
c1.deposit==1000
c2.deposit==1000
まずCard c2 = c1;よりc1とc2の値が共有し保持される。 c1の1000を代入し次にc2に2000を代入するのでここでc1=c2=2000となる。 Card.depositに2000を入れ500を引いている。つまりc1とc2で2回500を引いてい るのだから合計で1000引いている。よってc1.deposit==1000,c2.deposit==1000 となる。
上に戻る