Report6
[課題]
12/5付試験のQ23〜Q38について考察せよ。
[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
となる。
上に戻る