SE17_A-21

Java

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 になり、elseB が出力される必要があります

重要なポイント:

  • 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()

前の問題へ SE17_A-20

次の問題へ SE17_A-22