Java short-circuiting, do-while, and side effects: what value of j prints? public class ExamQuestion7 { static int j; static void methodA(int i){ boolean b; do { b = i < 10 | methodB(4); b = i < 10 || methodB(8); } while(!b); } static boolean methodB(int i){ j += i; return true; } public static void main(String[] args){ methodA(0); System.out.println("j = " + j); } }
-
Aj = 0
-
Bj = 4
-
Cj = 8
-
DThe code will run with no output
-
Ej = 12
Answer
Correct Answer: j = 4
Explanation
Introduction / Context:This evaluates your grasp of boolean operators, specifically the difference between non–short-circuit | and short-circuit ||, and how side-effect methods behave inside such expressions. It also touches on do-while loop termination.
Given Data / Assumptions:
i = 0, soi < 10is true.methodB(k)addskto staticjand returns true.- Loop runs while
!bis true.
Concept / Approach:| always evaluates both operands; || skips the right operand if the left is true. Therefore, side effects in the right operand may or may not execute depending on operator choice.
Step-by-Step Solution:First assignment: b = (i < 10) | methodB(4) ⇒ true | methodB(4). Even though left is true, | evaluates right ⇒ j += 4, b becomes true.Second assignment: b = (i < 10) || methodB(8) ⇒ left true, so right not evaluated ⇒ j unchanged at 4, b remains true.Loop condition: !b is false, so the loop runs once.Printed result: j = 4.
Verification / Alternative check:Swap operators to || in both lines and observe that j remains 0; swap to | in both and see j become 12.
Why Other Options Are Wrong:j = 0 ignores the non–short-circuit evaluation; j = 8 assumes the second methodB executes; 12 double-counts; “no output” is false.
Common Pitfalls:Forgetting that | on booleans evaluates both sides; misreading do-while's post-test nature.
Final Answer:j = 4