In Java, what will be the output of the following program (note the use of pre-increment and short-circuit AND)? class Test { public static void main(String [] args) { int x = 0; int y = 0; for (int z = 0; z < 5; z++) { if ((++x > 2) && (++y > 2)) { x++; } } System.out.println(x + " " + y); } }

Difficulty: Medium

Correct Answer: 6 3

Explanation:


Introduction / Context:
This Java question checks your understanding of pre-increment (++x) and the short-circuit behavior of the logical AND operator (&&) inside a loop. The trick is tracking when the right-hand side (++y) executes and when it is skipped.



Given Data / Assumptions:

  • x = 0, y = 0 before the loop.
  • Loop runs for z = 0, 1, 2, 3, 4 (total 5 iterations).
  • If condition: (++x > 2) && (++y > 2).
  • Body: if condition true then x++.


Concept / Approach:
For &&, the right side is evaluated only if the left side is true. Therefore ++y happens only on iterations where ++x > 2 is true. Pre-increment changes the variable before comparison.



Step-by-Step Solution:

Iter 1: ++x = 1 → 1 > 2 false → ++y not executed → x = 1, y = 0.Iter 2: ++x = 2 → 2 > 2 false → ++y not executed → x = 2, y = 0.Iter 3: ++x = 3 → 3 > 2 true → ++y = 1 → 1 > 2 false → no x++ → x = 3, y = 1.Iter 4: ++x = 4 → left true → ++y = 2 → 2 > 2 false → x = 4, y = 2.Iter 5: ++x = 5 → left true → ++y = 3 → 3 > 2 true → if body runs → x++ → x = 6, y = 3.


Verification / Alternative check:
Manually simulate or add trace prints inside the loop to confirm increments of x and y match the above sequence.



Why Other Options Are Wrong:
They assume that y increments on every iteration or that the right-hand side runs even when the left side is false, which contradicts short-circuit AND semantics.



Common Pitfalls:
Confusing pre-increment with post-increment and forgetting that with && the second operand does not always execute.



Final Answer:
6 3

More Questions from Operators and Assignments

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion