Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Problema blocco del terminale appena digito
Forum - Java - Problema blocco del terminale appena digito "++" al posto di "+1"

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Archer312 (Normal User)
Rookie


Messaggi: 32
Iscritto: 30/06/2012

Segnala al moderatore
Postato alle 16:33
Sabato, 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

  1. ++

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

  1. public class Cla
  2. {
  3.         public static void main(String args[])
  4.         {
  5.                 int a=0;
  6.                 int somma=0;
  7.  
  8.                 while(a<=100)
  9.                 {
  10.                         somma=somma+a;
  11.                         a=a+1;
  12.                 }
  13.                 System.out.println(somma);
  14.         }
  15. }


mentre così il terminale si blocca:
Codice sorgente - presumibilmente Java

  1. public class Cla
  2. {
  3.         public static void main(String args[])
  4.         {
  5.                 int a=0;
  6.                 int somma=0;
  7.  
  8.                 while(a<=100)
  9.                 {
  10.                         somma=somma+a;
  11.                         a=a++;
  12.                 }
  13.                 System.out.println(somma);
  14.         }
  15. }


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6384
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:06
Sabato, 30/06/2012
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à.
PM Quote
Avatar
Archer312 (Normal User)
Rookie


Messaggi: 32
Iscritto: 30/06/2012

Segnala al moderatore
Postato alle 17:30
Sabato, 30/06/2012
oh, effettivamente così funziona, perdona l'ignoranza, ho iniziato da veramente poco :(

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6384
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:33
Sabato, 30/06/2012
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à.
PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 18:59
Sabato, 30/06/2012
scusate l'ignoranza, ma nonostante quel codice sia logicamente sbagliato non dovrebbe girare ugualmente (e sortire gli stessi effetti?)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6384
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:18
Sabato, 30/06/2012
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à.
PM Quote
Avatar
Archer312 (Normal User)
Rookie


Messaggi: 32
Iscritto: 30/06/2012

Segnala al moderatore
Postato alle 19:58
Sabato, 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
PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 12:39
Domenica, 01/07/2012
Testo quotato

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

  1. int temp = a;
  2. a = a + 1;
  3. 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

  1. a = ++a;



al posto di

Codice sorgente - presumibilmente Plain Text

  1. 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...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6384
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:23
Domenica, 01/07/2012
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à.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo