Archer312 (Normal User)
Rookie
Messaggi: 32
Iscritto: 30/06/2012
|
Salve a tutti, studia java e in attesa che mi arrivi il manuale tanto desiderato:
http://www.lafeltrinelli.it/products/9788871924496/Program ...
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
Codice sorgente - presumibilmente Plain Text |
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:
Codice sorgente - presumibilmente Java |
public class Cla { public static void main (String args []) { int a=0; int somma=0; while(a<=100) { somma=somma+a; a=a+1; } } }
|
mentre così il terminale si blocca:
Codice sorgente - presumibilmente Java |
public class Cla { public static void main (String args []) { int a=0; int somma=0; while(a<=100) { somma=somma+a; a=a++; } } }
|
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
Non
a=a++;
ma semplicemente
a++;
Nessun arcano ...
Ultima modifica effettuata da nessuno il 30/06/2012 alle 17:08
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Archer312 (Normal User)
Rookie
Messaggi: 32
Iscritto: 30/06/2012
|
oh, effettivamente così funziona, perdona l'ignoranza, ho iniziato da veramente poco
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
Beh ... non c'è problema ma rivedi l'argomento sul libro ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Qwertj (Dev Team)
Guru
Messaggi: 678
Iscritto: 30/05/2011
|
scusate l'ignoranza, ma nonostante quel codice sia logicamente sbagliato non dovrebbe girare ugualmente (e sortire gli stessi effetti?)
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
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 ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Archer312 (Normal User)
Rookie
Messaggi: 32
Iscritto: 30/06/2012
|
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 il 01/07/2012 alle 0:44 |
|
Premoli (Normal User)
Pro
Messaggi: 108
Iscritto: 25/06/2009
|
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
Codice sorgente - presumibilmente Java |
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
Codice sorgente - presumibilmente Plain Text |
al posto di
Codice sorgente - presumibilmente Plain Text |
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... |
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
Corretto ... scrivere
a=a++;
è come scrivere
a = a;
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|