Another fun Java puzzler that you would think you would never encounter in the wild but I happened to run across something similar a few days ago:
public class Puzzler {
public static void main(String[] args) throws Exception {
PuzzleFuction f = new PuzzleFuction();
for (int i = 0; i < f.invoke(); i++) {
System.out.println(i);
}
}
public static class PuzzleFuction {
private int invocationCount;
public int invoke() {
invocationCount++;
return invocationCount < 2 ? 2 : 5;
}
}
}
What does this print? In other words: does the loop boundary (
f.invoke()) get evaluated again every iteration? Of course it does! :-)
01234