View Full Version : [JAVA] Traccia di esecuzione
marcoqwertyuiop
04-06-2015, 15:09
Salve, non riesco a capire questa traccia di esecuzione, cioè esce 7 ma a me viene 6:
// invocando mah(2)
static int mah(int x) {
int i;
int y = 3;
for (i = 0; i<4; i++) {
if (y<5) {
y = y+x;
} else {
y = y-i;
}
}
return y+i;
}
I passaggi che facio sono:
1) x = 2
y = 3
i = 0
y < 5 vero quindi y = 5
2) x = 2
y = 5
i = 1
y < 5 falso quindi y = 4
3) x = 2
y = 4
i = 2
y < 5 vero quindi y = 6
4) x = 2
y = 6
i = 3
y < 5 falso qundi y = 3
risultato y + i = 3 + 3 = 6 ma deve venire 7, cosa sbaglio?
[Kendall]
04-06-2015, 15:43
Salve, non riesco a capire questa traccia di esecuzione, cioè esce 7 ma a me viene 6:
// invocando mah(2)
static int mah(int x) {
int i;
int y = 3;
for (i = 0; i<4; i++) {
if (y<5) {
y = y+x;
} else {
y = y-i;
}
}
return y+i;
}
I passaggi che facio sono:
1) x = 2
y = 3
i = 0
y < 5 vero quindi y = 5
2) x = 2
y = 5
i = 1
y < 5 falso quindi y = 4
3) x = 2
y = 4
i = 2
y < 5 vero quindi y = 6
4) x = 2
y = 6
i = 3
y < 5 falso qundi y = 3
risultato y + i = 3 + 3 = 6 ma deve venire 7, cosa sbaglio?
5) x = 2
y = 3
i = 4
i < 4 == false quindi il corpo non viene più eseguito (ma i è pur sempre == 4!).
risultato y + i = 3 + 4 = 7
marcoqwertyuiop
04-06-2015, 18:10
Ma i non va da 0 a 3? Perchè va fino a 4, il for non indica i<4, quindi a 4 non dovrebbe arrivarci? Ad esempio se era <= 4 fino a dove arrivava i?
[Kendall]
04-06-2015, 19:16
Ma i non va da 0 a 3? Perchè va fino a 4, il for non indica i<4, quindi a 4 non dovrebbe arrivarci? Ad esempio se era <= 4 fino a dove arrivava i?
i < 4 è la condizione che il ciclo for verifica ad ogni iterazione per decidere se eseguire o meno il corpo del ciclo stesso. Quindi finché la condizione è corretta il corpo verrà eseguito.
Il ciclo si interromperà nel momento stesso in cui i viene incrementato a 4 e la condizione non è più vera. Ma in quel momento i sarà pari appunto a 4.
Il classico ciclo for
for (int i = 0; i < length; i++) {
// istruzioni
}
devi pensarlo come un ciclo while così eseguito:
int i = 0;
while(i < length) {
// istruzioni
i++;
}
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.