Test クラスの validate メソッドを実行したときに XYB を出力するには[ A ] の箇所にどのコードを記述しますか。(2つ選択)
public class Main {
public static void main(String... args) {
Test.validate();
}
}
class Test {
private static boolean methodX() {
System.out.print("X"); return true;
}
private static boolean methodY() {
System.out.print("Y"); return true;
}
public static void validate() {
if ( [ A ] ) System.out.print("A");
else System.out.print("B");
}
}
選択肢
A) methodX() && methodY()
B) methodX() != methodY()
C) methodX() | methodY()
D) methodX() ^ methodY()
E) method() == methodY()
F) methodX() || methodY()
G) methodX() & methodY()
解答
A) methodX() && methodY()
B) methodX() != methodY()
C) methodX() | methodY()
D) methodX() ^ methodY()
E) method() == methodY()
F) methodX() || methodY()
G) methodX() & methodY()
解説
XYB
を出力するには、[ A ]
の箇所に methodX()
と methodY()
が両方実行されて、条件が false
になり、else
の B
が出力される必要があります。
重要なポイント:
methodX()
がX
を出力してtrue
を返す。methodY()
がY
を出力してtrue
を返す。- 条件が
false
になるためには、両方のメソッドがtrue
を返してもif
の条件式がfalse
にならなければならない。
選択肢の検討:
- A)
methodX() && methodY()
→ 誤り。&&
演算子は両方がtrue
の場合にtrue
を返すので、if
の条件がtrue
になり、A
が出力されます。XYA
が出力されるため、不適切。 - B)
methodX() != methodY()
→ 正しい。!=
演算子はmethodX()
とmethodY()
が同じ値を返すときにfalse
を返します。両方ともtrue
を返すので、false
になり、XYB
が出力されます。これは正しい条件ですが、他により適した選択肢があります。 - C)
methodX() | methodY()
→ 誤り。|
演算子は ビット単位の OR 演算子で、両方のメソッドが必ず実行されます。methodX()
とmethodY()
がともにtrue
を返しますが、|
演算子は常にtrue
を返すため、条件がtrue
となり、A
が出力されます。したがって、不適切。 - D)
methodX() ^ methodY()
→ 正しい。^
は 排他的 OR (XOR) 演算子で、両方のメソッドが実行されますが、両方がtrue
の場合はfalse
になります。したがって、if
の条件がfalse
になり、XYB
が出力されます。正しい条件です。 - E)
method() == methodY()
→ 誤り。そもそもmethod()
は存在しないため、コンパイルエラーになります。 - F)
methodX() || methodY()
→ 誤り。||
演算子は最初のメソッドがtrue
を返すと、次のメソッドを実行しないため、Y
が出力されません。出力はXB
となるため、不適切。 - G)
methodX() & methodY()
→ 正しい。&
はビット単位の AND 演算子で、両方のメソッドが実行されますが、methodX()
とmethodY()
の両方がtrue
を返すので、条件がtrue
になり、A
が出力されます。XYA
が出力されるため、不適切。
結論
XYB
を出力するために正しいのは:
D)methodX() ^ methodY()
B)methodX() != methodY()