Oppure

Loading
30/06/12 14:33
Archer312
Salve a tutti, studia java e in attesa che mi arrivi il manuale tanto desiderato:
lafeltrinelli.it/products/9788871924496/Programmazione_Java_Fondamenti/…
sto leggendo un piccolo manuale su dvd comprato a ben 3€.
Così mentre svolgevo un esercizio, ovvero quello di creare un programma che somma tutti i primi 100 numeri, mi sono accorto che per qualche arcano motivo quando imposto il
++
ad una variabile, che dovrebbe significare "aumenta di un valore" il terminale si blocca quando cerca di avviare il programma, (quindi riesco tranquillamente ad interpretarlo in bytecode, dato che giustamente non ci sono errori).
Posto il sorgente, magari voi saprete rispondere al mio arcano "dilemma" :)
Così funziona:
public class Cla
{
	public static void main(String args[])
	{
		int a=0;
		int somma=0;

		while(a<=100)
		{
			somma=somma+a;
			a=a+1;
		}
		System.out.println(somma);
	}
}

mentre così il terminale si blocca:
public class Cla
{
	public static void main(String args[])
	{
		int a=0;
		int somma=0;

		while(a<=100)
		{
			somma=somma+a;
			a=a++;
		}
		System.out.println(somma);
	}
}
aaa
30/06/12 15:06
Non

a=a++;

ma semplicemente

a++;


Nessun arcano ...
Ultima modifica effettuata da 30/06/12 15:08
30/06/12 15:30
Archer312
oh, effettivamente così funziona, perdona l'ignoranza, ho iniziato da veramente poco :(
aaa
30/06/12 15:33
Beh ... non c'è problema ma rivedi l'argomento sul libro ...
30/06/12 16:59
Qwertj
scusate l'ignoranza, ma nonostante quel codice sia logicamente sbagliato non dovrebbe girare ugualmente (e sortire gli stessi effetti?)
aaa
30/06/12 17:18
Sì Qwerty gli effetti dovrebbero essere gli stessi. Probabilmente c'era qualche altro problema prima che ha risolto scrivendo a++;

Altrettanto probabilmente se adesso correggesse con a=a++; funzionerebbe comunque ...
30/06/12 17:58
Archer312
in effetti dovrebbe funzionare ugualmente dato che ho assegnato il valore uguale ad un valore in più (++), sarebbe dovuto per logica funzionare ugualmente, ma invece no, il terminale si blocca.
Mentre con uno++ o con uno=uno+1 va benissimo...
E potete tranquillamente provare voi, tanto il codice l'ho postato...
Ultima modifica effettuata da Archer312 30/06/12 22:44
aaa
01/07/12 10:39
Premoli
Postato originariamente da Archer312:

in effetti dovrebbe funzionare ugualmente dato che ho assegnato il valore uguale ad un valore in più (++), sarebbe dovuto per logica funzionare ugualmente, ma invece no, il terminale si blocca.
Mentre con uno++ o con uno=uno+1 va benissimo...
E potete tranquillamente provare voi, tanto il codice l'ho postato...


invece no!!!

non mi dilungo molto sull'utilità di quell'istruzione...
Tuttavia ciò che accade, in java, quando fai un post incremento si può riassumere in questo modo

int temp = a; 
a = a + 1; 
a = temp;


ovvero viene salvato il valore "originale" di a dopo a viene incrementato e successivamente viene assegnato ad a il valore precedentemente salvato andando di fatto ad annullare l'effetto del post incremento...

se invece di usare il post incremento avessi usato il pre incremento tutto ciò non sarebbe successo... prova infatti a scrivere

a = ++a;


al posto di

a = a++;


tutto quello che ho detto puoi andarlo a verificare andando a disassemblare il codice...

PS: non è che il terminale si blocca, è solo che a per il motivo spiegato prima non viene mai incrementato, prova a mettere un System.out.println(a); all'interno del while e ti accorgerai che a rimane sempre a zero...
aaa