Java練習問題3参考解答と解析
6766 ワード
1.クイズ関係演算子の演算結果はどのようなデータ型ですか? if文の条件式の値はint型であってもよいですか? while文の条件式の値は何ですか? switch文ではdafaultオプションが必要ですか? while文のループでbreak文を実行する効果は何ですか? はwhile文の代わりにfor文を使うことができますか?
問答問題の解析
1.booleanタイプ(trueまたはfalse)2.いいえ、booleanタイプ3.booleanタイプ4.のみです.必須ではありませんが、コードのロバスト性を向上させるためにdefaultオプション5を追加することをお勧めします.5.while文の実行を終了する6.
拡張forサイクルの紹介
拡張型forループはforeachループとも呼ばれ、最も多くの応用は配列要素をループすることにある.
2.選択問題
1.次のどの記述が正しいですか.A.5.0/2+10の結果double型データB.(int)5.8+1.0の結果int型データC.‘苹’+’果’の結果char型データD.(short)10+’a’の結果short型データ
2.プログラムに表示された【コード】を次のどのコードで置き換えるとコンパイルエラーになりますか?A. m–>0 B. m++>0 c. m=0 D. m>100&&true
Type mismatch: cannot convert from int to boolean
3.「int x=1;」と仮定すると、次のどのコードが「精度を損なう可能性があり、intを見つけるにはcharが必要」というコンパイルエラーを引き起こすのでしょうか.A. short t = 12+’a’; B. char c = ‘a’+1; C. char m = ‘a’+x; D. byte n = ‘a’+1;
選択問題の解析
回答:1.A 2.C 3.C
第1題Bは5.8を整数型に変換した後にまた1つのdouble型1.0を加えたので、結果は依然としてdouble型C文字とintが互いに変換することができ、2つの文字の加算は対応するunicode加算であるが、加算後のunicodeの値はcharの範囲(0-65535)より大きいのでchar文字で受信することはできず、intデータでD charを受信する精度はshortよりも高く、だからshortとcharの結果はcharです
第2題whileループ条件はbooleanタイプであり、Cは付与文であるため、コンパイルエラーが発生します.=付与、==等しいことに注意してください.
3番目の問題の精度が「低い」から「高い」までの順序は、byte->short->char->int->long->float->double Java算術式の値を計算する際に、次の演算精度ルールを使用します.(1)式にdoubleがある場合はdoubleで演算します.(2)式中の最高精度がfloatであればfloatで演算する(3)式中の最高精度がlongであればlongで演算する(4)式中の最高精度がintより低い場合、intで計算するJavaはbyte、short、charの値範囲を超えない算術式の値をbyte、short、charに与えることができる.aのASCIIコード値は97なので、Aオプション97+12がshortに値を与えることができるという問題の鍵はBとCの違いにある.xは1に等しいのではないかと言う人もいるが、「a」+xは「a」+1ではないか.なぜcが間違っているのか.なぜならchar c=’a’+1における’a’は文字型定数であり、1はデジタル定数であるからである.コンパイラがコンパイルされると、自動的にマージされ、タイプ変換は行われません.コンパイルフェーズで完了します.char m=’a’+x中’a’は文字型定数であるが、xは変数であり、コンパイル段階ではマージできず、実行時にのみコンパイルでき、実行時にはxが整数であることが判明し、’a’+xは自動的に整数に変換され、char型に直接付与できない.強い回転が必要です.(char)(‘a’+x)
プログラムの問題を読む
(1)次のプログラムの出力結果は何ですか.
(2)次のプログラムの出力結果は何ですか.
(3)次のプログラムの出力結果は何ですか.
リーダ解析
第1題の答えは:あなた、リンゴ、甘い‘あなた’の文字番号は‘A’より大きいのでif中文を実行して、elseが括弧を大きくしていないことに気づいて、だからz=’甘い’;必ず実行します.
第2題の答えは:Jeepはよくswitchの中の1つのcaseの後ろにbreakが付いていないならば、プログラムはbreakあるいはswichが終わるまでずっと実行します.従って、1回目のループ出力Jとe、2回目の出力e、3回目の出力pと良く、4回目の出力が良い.
第3題の答えは:x=-5,y=-1この問題の重点はwhileの判断条件がy->0で、自減が後なので、まずyの大きさが0より大きいかどうかを判断して、それから自減します.ループが条件を満たしていなくても,判定操作を行えば必ず自滅する.yが6から1に減少してもサイクル条件を満たすと算出できるので、サイクルは6回実行され、xは6回減少し、結果は-5であり、このときyの値は0である.再びサイクル条件を判断し,条件を満たさないことが判明し,サイクルを脱退し,yは自己減少し,−1となった.
問答問題の解析
1.booleanタイプ(trueまたはfalse)2.いいえ、booleanタイプ3.booleanタイプ4.のみです.必須ではありませんが、コードのロバスト性を向上させるためにdefaultオプション5を追加することをお勧めします.5.while文の実行を終了する6.
拡張forサイクルの紹介
拡張型forループはforeachループとも呼ばれ、最も多くの応用は配列要素をループすることにある.
Java
int [] arr = {1,2,3,4,5};
for(int n:arr) // n arr
System.out.println(n);
2.選択問題
1.次のどの記述が正しいですか.A.5.0/2+10の結果double型データB.(int)5.8+1.0の結果int型データC.‘苹’+’果’の結果char型データD.(short)10+’a’の結果short型データ
2.プログラムに表示された【コード】を次のどのコードで置き換えるとコンパイルエラーになりますか?A. m–>0 B. m++>0 c. m=0 D. m>100&&true
Java
public class E {
public static void main(String args[]) {
int m=10,n=0;
while([ ]){
n++;
}
}
}
Type mismatch: cannot convert from int to boolean
3.「int x=1;」と仮定すると、次のどのコードが「精度を損なう可能性があり、intを見つけるにはcharが必要」というコンパイルエラーを引き起こすのでしょうか.A. short t = 12+’a’; B. char c = ‘a’+1; C. char m = ‘a’+x; D. byte n = ‘a’+1;
選択問題の解析
回答:1.A 2.C 3.C
第1題Bは5.8を整数型に変換した後にまた1つのdouble型1.0を加えたので、結果は依然としてdouble型C文字とintが互いに変換することができ、2つの文字の加算は対応するunicode加算であるが、加算後のunicodeの値はcharの範囲(0-65535)より大きいのでchar文字で受信することはできず、intデータでD charを受信する精度はshortよりも高く、だからshortとcharの結果はcharです
第2題whileループ条件はbooleanタイプであり、Cは付与文であるため、コンパイルエラーが発生します.=付与、==等しいことに注意してください.
3番目の問題の精度が「低い」から「高い」までの順序は、byte->short->char->int->long->float->double Java算術式の値を計算する際に、次の演算精度ルールを使用します.(1)式にdoubleがある場合はdoubleで演算します.(2)式中の最高精度がfloatであればfloatで演算する(3)式中の最高精度がlongであればlongで演算する(4)式中の最高精度がintより低い場合、intで計算するJavaはbyte、short、charの値範囲を超えない算術式の値をbyte、short、charに与えることができる.aのASCIIコード値は97なので、Aオプション97+12がshortに値を与えることができるという問題の鍵はBとCの違いにある.xは1に等しいのではないかと言う人もいるが、「a」+xは「a」+1ではないか.なぜcが間違っているのか.なぜならchar c=’a’+1における’a’は文字型定数であり、1はデジタル定数であるからである.コンパイラがコンパイルされると、自動的にマージされ、タイプ変換は行われません.コンパイルフェーズで完了します.char m=’a’+x中’a’は文字型定数であるが、xは変数であり、コンパイル段階ではマージできず、実行時にのみコンパイルでき、実行時にはxが整数であることが判明し、’a’+xは自動的に整数に変換され、char型に直接付与できない.強い回転が必要です.(char)(‘a’+x)
プログラムの問題を読む
(1)次のプログラムの出力結果は何ですか.
Java
public class E {
public static void main(String args[]) {
char x=' ',y='e',z=' ';
if(x>'A'){
y=' ';
z=' ';
}
else
y=' ';
z=' ';
System.out.println(x+","+y+","+z);
}
}
(2)次のプログラムの出力結果は何ですか.
Java
public class E {
public static void main(String args[]) {
char c = '\0';
for (int i = 1; i <= 4; i++) {
switch (i) {
case 1:
c = 'J';
System.out.print(c);
case 2:
c = 'e';
System.out.print(c);
break;
case 3:
c = 'p';
System.out.print(c);
default:
System.out.print(" ");
}
}
}
}
(3)次のプログラムの出力結果は何ですか.
Java
public class E {
public static void main(String args[]) {
int x=1,y=6;
while(y-->0){
x--;
}
System.out.println("x="+x+",y="+y);
}
}
リーダ解析
第1題の答えは:あなた、リンゴ、甘い‘あなた’の文字番号は‘A’より大きいのでif中文を実行して、elseが括弧を大きくしていないことに気づいて、だからz=’甘い’;必ず実行します.
第2題の答えは:Jeepはよくswitchの中の1つのcaseの後ろにbreakが付いていないならば、プログラムはbreakあるいはswichが終わるまでずっと実行します.従って、1回目のループ出力Jとe、2回目の出力e、3回目の出力pと良く、4回目の出力が良い.
第3題の答えは:x=-5,y=-1この問題の重点はwhileの判断条件がy->0で、自減が後なので、まずyの大きさが0より大きいかどうかを判断して、それから自減します.ループが条件を満たしていなくても,判定操作を行えば必ず自滅する.yが6から1に減少してもサイクル条件を満たすと算出できるので、サイクルは6回実行され、xは6回減少し、結果は-5であり、このときyの値は0である.再びサイクル条件を判断し,条件を満たさないことが判明し,サイクルを脱退し,yは自己減少し,−1となった.