ProgramingII Report#3 <- TOP -> ProgramingII Report#5
~ 目次 ~
|
public class test { public static void main(String[] args) { Mon23_33 mon = new Mon23_33(); mon.q23(); mon.q24(); mon.q25(); mon.q26(); mon.q27(); mon.q28(); mon.q29(); mon.q30(); mon.q31(); mon.q32(); mon.q33(); } } class Mon23_33 { void q23(){ int x,y; x = 100; x += 1; x--; y = 200 + x; System.out.println("q23\t"+y++); } void q24(){ int a=0,x=0; a=5; a += 3; x = ++a; System.out.println("q24\t"+x); } void q25(){ int a=9,b=3; a /= b; System.out.println("q25\t"+(a %= b)); } void q26(){ int i,j; for(i=0,j=0; i<3; i++) ++j; System.out.println("q26\t"+(i*j)); } void q27(){ int i=2; System.out.print("q27\t"); while(i-- > 0)System.out.print(i); } void q28(){ int num=10000; for(int i = 0; i< 4; i++)num >>=i; System.out.println("\nq28\t"+num); } void q29(){ int num=0; for(int i=1; i<= 10; i++){ if(++num % i==0) num++; } System.out.println("q29\t"+(++num)); } void q30(){ int a=9; if(a++ != 10 | a++ == 10) a++; System.out.println("q30\t"+a); } void q31(){ System.out.print("q31"); for(int i=0; i<5; i ++) System.out.println("\ti == " +i); System.out.println("\tHello"); } void q32(){ int i; for(i=0; i<9; i += 3){} System.out.println("q32\t"+i); } void q33(){ System.out.print("q33"); for(int i = 0; i<8; i++){ System.out.println("\t"+i); i += 3; } } } |
Q23では、xに100を代入した後にxをインクリメントし、次にxをデクリメントする。
その後に、yにx+200を代入している。「100 + 1 - 1 + 200」という計算をしてい
るので、出力は、「300」になる。
Q24では、まず、aに5を代入した後にaを3づつインクリメントする。その後にaを1づ
つインクリメントした値をxに代入する.「5 + 3 + 1」という計算をしているので、
出力は「9」になる。
Q25では、
aをbで割った値をaに代入する。そして、その値をまたbで割るその余りを返す。
「9 / 3 → a , 3 / 3」という計算をしているので、出力では「0」になる。
Q26では、iが3より小さいときjをインクリメントしている。どちらとも1づつなので
iが3になったときif文を抜けるのでjも3である。「(1 + 1 + 1)×(1 + 1 + 1)」を
行っているので出力では「9」になる。
Q27では、最初にiに2を代入し、そしてwhile文でもってiをデクリメントしていき0よ
り大きい値のときwhile文は実行されるので「2 - 1 = 1,1 - 1 = 0」という命令を
実行するので出力は「1と0」である。
Q28ではまず、numに代入されている値10000を4回右にビットシフトしている。(2進数で)
1回目「10011100010000を右に0ビットシフトする=>10011100010000」 2回目「10011100010000を右に1ビットシフトする=> 1001110001000」 3回目「10011100010000を右に2ビットシフトする=> 10011100010」 4回目「10011100010000を右に3ビットシフトする=> 10011100」for文を出たときには「10011100010000 が 10011100 にビットシフトされる」つま
num = 0 for 1: i = 1, num = 1, num = 2 for 2: i = 2, num = 3 for 3: i = 3, num = 4 for 4: i = 4, num = 5 for 5: i = 5, num = 6 for 6: i = 6, num = 7 for 7: i = 7, num = 8 for 8: i = 8, num = 9 for 9: i = 9, num = 10 for 10: i = 10, num = 11 (, i = 11)最後に、println( )メソッドで出力される前に変数numの値はインクリメントされるので、出力される値は「12」になる。
|
public class q34 { public static void main(String args[]){ int i=0; System.out.print("Q34"); for( sayHello(); i<=6 ;i += 3){ sayHello(); } } static void sayHello(){ System.out.println("\tHello"); } } |
この問題ではまず、4行目のfor文内、初期設定の部分でsayHello( )メソッドが呼び出されている。
そして、「i = 0」、「i = 3」、「i = 6」の時にもsayHello( )メソッドが呼び出されるので、合
計4回「Hello」が出力される。
|
public class q35{ public static void main( String args[]){ Player p1 = new Player(); Player p2 = new Player(); p1.id = 10000; p2.id = 20000; p1.num += p1.id; p2.num += p2.id; System.out.println("Q35\t"+Player.num); } } class Player{ int id = 0; static int num = 0; } |
この問題では、Playerクラスで宣言されている変数numは「static」なので、オブジェクトp1、p2で共有されている。
変数numの値は「p1.num += 1000」「p2.num += 2000」の処理で3000まで増加するので、出力される値は「3000」
となる。
|
public class q36 { public static void main(String[] args) { Player p1 = new Player(); Player p2 = new Player(); p1.id = 10000; p2.id = 20000; Player.num += p1.id; Player.num += p2.id; System.out.println("Q36\tp1.num == "+p1.num); System.out.println("\tp2.num == "+p2.num); } } class Player{ int id = 0; static int num = 0; } |
この問題ではクラスPlayerのint numはstatic変数で定義されているのでp1.num p2.num Player.numは共有された状態である。
Player.numに1000足して2000足しているので、「Player.num==3000」である。p1.numもp2.numもPlayer.numと
同じなので出力結果は「p1.num == 3000 p2.num == 3000」
|
public class q37 { public static void main(String[] args) { Card c1 = new Card(); Card c2 = new Card(); Card c3 = c1; c1.deposit = 10000; c2.deposit = 20000; c3.deposit = 30000; int sum = c1.deposit + c2.deposit + c3.deposit; System.out.println("Q37\t"+sum); } } class Card{ int deposit; } |
この問題では、オブジェクトc1とc3は共有されるので、「c1.deposit = c3.deposit = 3000」である。
なので、「sum = 3000 + 2000 + 3000」から、出力される値は「8000」となる。
|
public class q38 { 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); System.out.println("Q38\tc1 = "+c1.deposit); System.out.println("\tc2 = "+c2.deposit); /* A */ } } class Card{int deposit;} class Bank{ public static void useCard(Card c){ c.deposit -= 500; } } |
この問題では、Card c2 = c1であるからc2とc1は同じものと考える。「c1.deposit =1000;」で「c2.deposit」
も1000になる。「c2.deposit =2000;」で「c1.deposit」も2000になる。
Bank.useCard( c1 );
Bank.useCard( c2 );
で二回500引かれるので「c1.deposit,c2.deposit」は1000になる。
よって出力結果は
「c1.deposit==1000 c2.deposit==1000」である。
よって、「c1.deposit == c2.deposit」という関係になる。
q23 300 q24 9 q25 0 q26 9 q27 10 q28 156 q29 12 q30 12 q31 i == 0 i == 1 i == 2 i == 3 i == 4 Hello q32 9 q33 0 4Q34
Q34 Hello Hello Hello HelloQ35
Q35 30000Q36
Q36 p1.num == 30000 p2.num == 30000Q37
Q37 80000Q38
Q38 c1 = 1000 c2 = 1000
課題そっちのけでビリヤードをしていたら、焦っていました。そのことに後悔はしていませんが、とてもきつかったです。 最近寝るのが不規則でとても体がだるく感じます。疲れました。