Ваш цикл будет оптимизирован компилятором следующим образом:
boolean continue = i<j;
while (true && k < 2)
и, наконец,
while (k < 2)
Так что для выхода из него необходимо выполнить цикл два раза
After the first loop: j == 1, k == 1
After the second loop: j == 0, k == 2, exit now
вот почему, наконец, j == 0
Попробуйте поместить условие в while()
:
while (i<j && k < 2)