問題
次のコード断片と等しい処理はどれですか。
String[] states = { "CO", "CA", "NY", "DC", "TX" };
for (String state : states) {
System.out.print(state + ":");
}
選択肢
A)
for (int i = 0; i <= states.length; ++i) {
System.out.print(states[i] + ":");
}
B)
for (int i = 0; i <= states.length;) {
System.out.print(states[i] + ":");
}
C)
for (int i = 0; i++ < states.length;) {
System.out.print(states[i] + ":");
}
D)
for (int i = 0; i < states.length; i++) {
System.out.print(states[i] + ":");
}
E)
for (int i = 0; i++ < states.length;) {
System.out.print(states[i] + ":");
}
解答
A)
for (int i = 0; i <= states.length; ++i) {
System.out.print(states[i] + ":");
}
B)
for (int i = 0; i <= states.length;) {
System.out.print(states[i] + ":");
}
C)
for (int i = 0; i++ < states.length;) {
System.out.print(states[i] + ":");
}
D)
for (int i = 0; i < states.length; i++) {
System.out.print(states[i] + ":");
}
E)
for (int i = 0; i++ < states.length;) {
System.out.print(states[i] + ":");
}
解説
次のコード断片と等しい処理を選ぶために、各選択肢を評価していきます。
元のコードは、states
配列の各要素をループで処理し、それぞれを表示しています。
各選択肢の評価
A)
for (int i = 0; i <= states.length; ++i) {
System.out.print(states[i] + ":");
}
- 評価:
i
のインデックスがstates.length
まで到達するため、ArrayIndexOutOfBoundsException
が発生します。不適切。
B)
for (int i = 0; i <= states.length;) {
System.out.print(states[i] + ":");
}
- 評価: インデックスが
states.length
まで進むことがないため、最初のループでArrayIndexOutOfBoundsException
が発生します。不適切。
C)
for (int i = 0; i++ < states.length;) {
System.out.print(states[i] + ":");
}
- 評価:
i++
がループ条件に使用され、最初のループでi
が0
のままstates[0]
を印刷しますが、その後i
が1
になり、次のループではstates[1]
が印刷されます。最後にはi
が5
になり、ArrayIndexOutOfBoundsException
が発生します。不適切。
D)
for (int i = 0; i < states.length; i++) {
System.out.print(states[i] + ":");
}
- 評価: 正しい構文で、配列の全要素を正常に印刷します。適切。
E)
for (int i = 0; i++ < states.length;) {
System.out.print(states[i] + ":");
}
- 評価: ループ条件に
i++
を使用していますが、最初のループでi
が0
のままstates[0]
を印刷し、その後i
が1
になり、正常に動作するかのように見えますが、最後にi
が5
になり、ArrayIndexOutOfBoundsException
が発生します。不適切。
対象資格:Java SE17 認定資格