PDA

View Full Version : [JAVA] Come mai mi stampa tre volte il System.out.println("...");?


NICOD.
20-12-2008, 19:07
Premetto che ho cominciato a studiare Java da manuale e comincio a fare qualche programmino stupido per il momento.
Come ambiente utilizzo Windows Xp e come compilatore Java utilizzo Eclipse.
Allora ho creato un semplice programma che vi posto..


class LeggiCar {

/*Il programma esce se viene inserito un '.' e conta anche gli spazi che eventualmente vengono inseriti. ATTENZIONE IL PROGRAMMA LEGGE UN SOLO CARATTERE ALLA VOLTA QUINDI O SPAZIO O '.' O CARATTERE QUALSIASI */
public static void main(String args[])
throws java.io.IOException {

char ch;
int sp = 0;

System.out.println("Inserisci il carattere . per terminare l'esecuzione");
ch = (char) System.in.read();

while (ch != '.'){
System.out.println("Inserisci il carattere . per terminare l'esecuzione");
ch = (char) System.in.read();
if(ch == ' ')
sp++;
}
System.out.println("Il numero di spazi inseriti è " + sp);

}

}

Il problema è che mi stampa System.out.println("Inserisci il carattere . per terminare l'esecuzione"); che è all'interno del while 3 volte esatte.

Come potete vedere dall'immagine

http://img511.imageshack.us/img511/1215/consolerz3.jpg

Ho pensato che siccome Java utilizza un buffer a righe, quando premo invio lo conta come carattere e quindi non mi chiede conferma e stampa ulteriormente il messaggio poichè la variabile ch è diversa da '.'

Non so più a cosa pensare visto che in ambiente MAC la stampa avviene 2 volte e quindi è concepibile per il motivo che ho gia spiegato.

Qualcuno almeno è in grado di fare luce sulla questione?
Grazie ;)

Oceans11
20-12-2008, 20:52
Premetto che ho cominciato a studiare Java da manuale e comincio a fare qualche programmino stupido per il momento.
Come ambiente utilizzo Windows Xp e come compilatore Java utilizzo Eclipse.
Allora ho creato un semplice programma che vi posto..


class LeggiCar {

/*Il programma esce se viene inserito un '.' e conta anche gli spazi che eventualmente vengono inseriti. ATTENZIONE IL PROGRAMMA LEGGE UN SOLO CARATTERE ALLA VOLTA QUINDI O SPAZIO O '.' O CARATTERE QUALSIASI */
public static void main(String args[])
throws java.io.IOException {

char ch;
int sp = 0;

System.out.println("Inserisci il carattere . per terminare l'esecuzione");
ch = (char) System.in.read();

while (ch != '.'){
System.out.println("Inserisci il carattere . per terminare l'esecuzione");
ch = (char) System.in.read();
if(ch == ' ')
sp++;
}
System.out.println("Il numero di spazi inseriti è " + sp);

}

}

Il problema è che mi stampa System.out.println("Inserisci il carattere . per terminare l'esecuzione"); che è all'interno del while 3 volte esatte.

Come potete vedere dall'immagine

http://img511.imageshack.us/img511/1215/consolerz3.jpg

Ho pensato che siccome Java utilizza un buffer a righe, quando premo invio lo conta come carattere e quindi non mi chiede conferma e stampa ulteriormente il messaggio poichè la variabile ch è diversa da '.'

Non so più a cosa pensare visto che in ambiente MAC la stampa avviene 2 volte e quindi è concepibile per il motivo che ho gia spiegato.

Qualcuno almeno è in grado di fare luce sulla questione?
Grazie ;)

Penso che "invio" lo conti come 2 caratteri, e non 1. :)

NICOD.
20-12-2008, 21:27
Non è sicuro quindi..?

franksisca
20-12-2008, 23:36
dovrebbe essere \n

NICOD.
21-12-2008, 11:31
Risolto..
/r/n sono i caratteri in più..
e quindi li conta come altri caratteri

;)
Si può chiudere

malocchio
23-12-2008, 21:57
Non so se si applica alle console, ma

\r\n Windows
\n Linux
\r Mac

NICOD.
26-12-2008, 20:12
Ma c'è un modo per ovviare a questo problema?
Oppure no?

non penso che non ci sia niente di RIPARATORE :cool:

:help:

Don[ITA]
26-12-2008, 20:17
Usa la classe Scanner (http://java.sun.com/javase/6/docs/api/java/util/Scanner.html) :)

Saluti