実行結果
考察
1行目でint型の変数xとyを宣言して、2行目でxに100を代入して、「x += 1」でxの値を101にして、「x--」でxの値を
100にして、「y= 200 + x」でyに200+100を代入してある。3行目で「y++」とあるが、yを先に出力するので、プラス1
は出力されてからされる。逆に「++y」だったら実行結果は301になる。
Q24:次のコードを実行した後の出力値を述べよ
コード
1:
2:
3:
|
int a = 0, x = 0;
a = 5; a += 3; x = ++a;
System.out.println(x);
|
実行結果
考察
1行目でint型の変数aとxを宣言、そして初期化してある。2行目でaに5を代入して、それにさらに3を足して(a=8)、
「x = ++a」でxにa+1した値を代入する。よってx= 8+1=9である。
Q25:次のコードを実行した後の出力値を述べよ
コード
1:
2:
3:
|
int a = 9, b = 3;
a /= b ;
System.out.println(a %= b);
|
実行結果
考察
1行目でint型変数aとbにそれぞれ、9と3を代入した。2行目では、a/bした値をaに代入してある。a/b=9/3=3となる。
3行目の出力ではa%bした値をaに代入する。a%b=3%3=0となる。
Q26:次のコードを実行した後の出力値を述べよ
コード
1:
2:
3:
|
int i, j;
for(i=0,j=0;i < 3;i++) j++;
System.out.println(i * j);
|
実行結果
考察
1行目でint型の変数iとjを宣言して、2行目ではfor文を使っている。最初i=0,j=1となり、次にi=1,j=2となり、次に
i=2,j=3となり、最後にi=3となった時点でfor文をぬけるので、jはプラスされない。よってi*jは3×3である。
Q27:次のコードを実行した後の出力値を述べよ
コード
1:
2:
|
int i = 2;
while(i-- > 0) System.out.print(i);
|
実行結果
考察
1行目でint型の変数iに2を代入してある。2行目でwhile文を使って、i--が0より大きい間だけループしている。
iの値は 2→1→0となり0となった時点でループをぬけるから、10と表示される。ちなみにprintlnではないから、改行され
ない。
Q28:次のコードを実行した後の出力値を述べよ
コード
1:
2:
3:
|
int num = 10000;
for(int i = 0;i < 4;i++) num >>= i;
System.out.println(num);
|
実行結果
考察
1行目でint型の変数numに10000を代入して、2行目でfor文を使って、「num >>= i」をループさせている。>>は右に
ビットシフトさせる記号だからnumに0ビットシフト、1ビットシフト、2ビットシフト、3ビットシフト、4ビットシフトする
ので、最終的に156となる。
Q29:次のコードを実行した後の出力値を述べよ
コード
1:
2:
3:
4:
5:
|
int num = 0;
for(int i = 1;i <= 10;i++){
if(++num % i ==0) num++;
}
System.out.println(++num);
|
実行結果
考察
1行目でint型変数numを初期化して、2〜4行目でfor文とif文を使ってnumに1プラスしたのがiで割り切れたらnumに
さらに1をプラスする。というのを繰り返している。5行目でnumにプラス1したやつを出力してある。
Q30:次のコードを実行した後の出力値を述べよ
コード
1:
2:
3:
|
int a = 9;
if(a++ != 10 | a++ == 10) a++;
System.out.println(a);
|
実行結果
考察
2行目でif文を使って、「a++が10でない」または「a++が10である」の条件を満たしたらa++するようにしてある。
よって12である。
Q31:次のコードを実行した後、"Hello"は何回表示されるか述べよ。
コード
1:
2:
3:
|
for(int i = 0;i < 5;i++)
System.out.println("i =="+i);
System.out.println("Hello");
|
実行結果
1:
2:
3:
4:
5:
6:
|
i ==0
i ==1
i ==2
i ==3
i ==4
Hello
|
考察
1行目〜2行目でiを4まで足して出力して、最後にHelloを出力するだけだから、1回表示される。
Q32:次のコードを実行した後の出力値を述べよ。
コード
1:
2:
3:
|
int i;
for(i = 0;i < 9;i += 3){}
System.out.println(i);
|
実行結果
考察
2行目でfor文を使って、iの値が「0→3→6→9」となり、9となった時点でfor文を抜けるから、答えは9である。
Q33:次のコードを実行した後の出力値を述べよ。
コード
1:
2:
3:
4:
|
for(int i = 0;i < 8;i++){
System.out.println(i);
i += 3;
}
|
実行結果
1行目〜4行目までfor文を使ってiの値を「0(出力)→3→4(出力)→7→8」と変化している。8になった時点でfor文を抜
ける。
Q34:次のコードを実行した後、"Hello"は何回表示されるか述べよ。
コード
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
public static void main(String args[]){
int i = 0;
for(sayHello();i <= 6;i +=3){
sayHello();
}
}
static void sayHello(){
System.out.println("Hello");
}
|
実行結果
1:
2:
3:
4:
|
Hello
Hello
Hello
Hello
|
考察
3行目〜5行目まで、for文を使って、クラスsayHelloをiの数分ループさせて、Helloを出力させている。
iの値は「0→3→6→9」となり9となった時点でループは終わるのでiの値の変化は4回、よって4回表示される。
Q35:次のコードを実行した後の出力値を述べよ。
コード
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
|
class Test{
public static void main(String args[]){
Player p1 = new Player();
Player p2 = new Player();
p1.id = 1000;
p2.id = 2000;
p1.num += p1.id;
p2.num += p2.id;
System.out.println(Player.num);
}
}
class Player{
int id = 0;
static int num = 0;
}
|
実行結果
考察
3行目〜4行目ではnew演算子を使って、クラスPlayerをp1とp2にコンストラクトしている。
7行目〜8行目ではp1.numに10000を代入して、p2.numにp2.idの値を足したやつを代入している。ここで
14行目に注目してもらいたい。staticを使っているから、p1.numもp2.numも所持している値は共有しているので、
numの箱には最初10000が入って、その後20000が足されるから、答えは30000になる。
Q36:次のコードを実行した後の出力値を述べよ。
コード
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
|
class Test{
public static void main(String args[]){
Player p1 = new Player();
Player p2 = new Player();
p1.id = 1000;
p2.id = 2000;
Player.num += p1.id;
Player.num += p2.id;
System.out.println("p1.num =="+p1.num);
System.out.println("p2.num =="+p2.num);
}
}
class Player{
int id = 0;
static int num = 0;
}
|
実行結果
1:
2:
|
p1.num ==3000
p2.num ==3000
|
考察
Q35で説明したことの証明のようなものである。static変数は値を共有している。
Q37:次のコードを実行した後の出力値を述べよ。
コード
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
|
class Test{
public static void main(String args[]){
Card c1 = new Card();
Card c2 = new Card();
Card c3 = new Card();
c1.deposit = 1000;
c2.deposit = 2000;
c3.deposit = 3000;
int sum = c1.deposit + c2.deposit + c3.deposit;
System.out.println(sum);
}
}
class Card{
int deposit;
}
|
実行結果
考察
この問題は実に単純である。13行目〜15行目でのクラスCardをもとに、3行目〜8行目では
c1.deposit,c2.deposit,c3.depositにそれぞれ1000,2000,3000を代入して9行目でその3つを足したものを
int型の変数sumに代入している。よって1000+2000+3000=60000である。
Q38:次のコードを実行したとき、コード中のAの時点においてc1.depositとc2.depositの関係を述べよ。
コード
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
class Test{
public static void main(String args[]){
Card c1 = new Card();
Card c2 = c1;
c1.deposit = 1000;
c2.deposit = 2000;
Bank.useCard(c1);
Bank.useCard(c2);
/*A*/
System.out.println(c1.deposit);
System.out.println(c2.deposit);
}
}
class Card{
int deposit;
}
class Bank{
public static void useCard(Card c) {
c.deposit -= 500;
}
}
|
実行結果
考察
4行目でやっていることはc1とc2がさすものは同一にするということである。5行目で1000をc1.depositに代入しても
6行目でc2.depositに2000を代入しているので上書きしていることになる。7行目では2000がマイナス500されて1500に、
8行目では1500がマイナス500されて1000になっている10行目〜11行目は自分が勝手に出力させました。
感想
今回の課題の対象であるテストでは低得点をとってしまいました。勉強不足でした。このレポートを通してより理解できるよう
になったので、自分のためになったと思います。次からのレポートもがんばっていきたいです。