Itt miért ennyi az i értéke?
int i = 10;
while (i++ <= 10) {
}
System.out.print(i);
12-őt ír ki.
Azt értem ,hogy az i növelése a while kiértékelése után történik és utána növeli i-t. De akkor miért nem 11-et ír ki?










Az i-nek 10-et adsz. Majd megnézed, hogy kisebb, vagy egyenlő-e 10-zel (egyenlő) és hozzáadsz egyet. i=11 lesz. Mivel a feltétel igaz volt, lefut a cikluson belüli rész (jelenleg semmi), majd vissza az elejére: megvizsgálod, hogy az i kisebb vagy egyenlő-e 10-zel (nem igaz, mert 11), majd utána növeled egyel, azaz i=12.
Azaz egyszer belemegy a ciklusba, mert a vizsgálatkor még igaz a feltétel. Második alkalommal nem megy bele a ciklusba, mert a feltétel már nem igaz, de ettől még hozzáad egyet.





i = 10
i <= 10 igaz
i++
i = 11
i <= 10 hamis
i++
i = 12
Egy említésre méltó dolog még van.
- Ha van egy olyan utasításod, amelyben i++ van, akkor az utasítás lefutása után rögtön növeli az i értékét:
int i = 5;
int j = i++;
Ez azt jelenti, hogy:
int i = 5;
int j = i; //=5
i++;
- Ha van egy olyan utasításod, amelyben ++i van, akkor előbb növeljük az i értékét és utána hajtjuk végre az utasítást az immáron megnövelt értékkel:
int i = 5;
int j = ++i;
Ez azt jelenti, hogy:
int i = 5;
++i;
int j = i; //=6





A gép lelkében ez történik:
int i = 10;
boolean futtathato = i <= 10; //logikai igaz, azaz
i++; //i=11
if (futtathato) {
//ciklusmag
}
boolean futtathato = i <= 10; //logikai hamis (11 nem <= 10)
i++; //i=12
if (futtathato) { //nem teljesül a feltétel
//ciklusmag
}





Nem tudom, mi olyan meglepő ezen...
Egy kifejezés Java-ban lehet:
- literál
- változó
- nevesített konstans
- minden olyan metódus, amelyek visszatérési értékének típusa nem void
- példányosítás a new operátorral
- operátorokkal végzett műveletek (beleértve a ++, --, += és -= operátorokat is)
- tömbök
és még ki tudja, mit hagytam ki.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!