Ty chyba nie rozróżniasz pre od post-inkrementacji.
++i - operator pre-inkrementacji, zwiększa wartość zmiennej i o jeden, następnie pobiera jej wartość
i++ - operator post-inkrementacji, pobiera wartość zmiennej i, następnie zwiększa jej wartość o jeden
Dlatego w 5 przebiegu pętli (przed instrukcjami if) y=12 ale ponieważ w 1-ym if-ie jest ++y więc wyświetla się 13 (gdyby było y++ pojawiłoby się 12).
W 6 przebiegu pętli (przed instrukcjami if) y=14 (bo 13+1 <- instrukcja y++ pod for-em). W tym przebiegu analogicznie y jest zwiększony operatorem preinkrementacji do 15 i dlatego ta wartość jest wyświetlona a jednocześnie spełniony zostaje 2 warunek (y>14) co powoduje wyświetlenie x=6 i zatrzymanie pętli for instrukcją break.
w załączeniu kod z dodaną instrukcją System.out.println(x + "__x=" + x + "__y=" + y); w 12 linii która wyświetla informacje o każdym przebiegu pętli. To powinno Ci rozjaśnić wszystko. Poprawiłem też nazwę klasy w instrukcji tworzenia obiektu w (Wyniki zamiiast Wynik).
public class Wyniki {
public static void main(String[] args) {
Wyniki w = new Wyniki();//poprawiona nazwa tj. Wyniki zamiast Wynik
w.doDziela();
}
void doDziela() {
int y = 7;
for (int x = 1; x < 8; x++) {
y++;
//dodatkowa linia kodu
System.out.println(x + "__x=" + x + "__y=" + y);
if (x > 4) {
System.out.print(++y + " ");
}
if (y > 14) {
System.out.println(" x = " + x);
break;
}
}
}
}
Radzę przed wklejaniem tu kodu najpierw go sformatować aby był czytelny. W Eclipsie np. można to osiągnąć Ctrl+Shift+F.
Poniżej wynik wyświetlenia zmodyfikowanego kodu. Kolejne liczby n__ oznaczają kolejne przebiegi pętli.
1__x=1__y=8
2__x=2__y=9
3__x=3__y=10
4__x=4__y=11
5__x=5__y=12
13 6__x=6__y=14
15 x = 6