PDA

Visualizza la versione completa : [JAVA] Problema con il controllo di un input


MOBILUK
04-07-2003, 19:05
ho un semplice controllo di input, che dovrebbe reagire in modo diverso a seconda di quello che viene inserito tramite tastiera.



try
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s;
while((s = in.readLine()).length() != 0)
{
if (s == "xxxxxxx")
System.out.println("yyyyyyy");
else if (s == "yyyyyyy")
System.out.println("xxxxxxx");
}
}


catch(IOException ioe)
{
System.out.println("Errore: " +ioe);
}


il programma compila correttamente ma al momento della sua esecuzione, quando digito xxxxxxx non mi compare yyyyyyy ma il programma resta in attesa di un altra stringa (lo stesso accade se digito yyyyyyy) e questo succede finchè non do una riga vuota, e il programma termina automaticamente.
Il codice in questione si trova in un main.


Quale può essere la causa di tale problema?

Zero-2
04-07-2003, 19:19
Perchè per le stringhe non si usa l'== ma l'equals :)
s.equals("xxxxxxxx");
s.equals("yyyyyyyy");

Ciauz

MOBILUK
04-07-2003, 19:35
ok, con il codice modificato con il metodo equals della classe String il meccanismo di reazione al'input funziona correttamente



try
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s;
while((s = in.readLine()).length() != 0)
{
if (s.equals("xxxxxxx"))
System.out.println("yyyyyyy");
else if (s.equals("yyyyyyy"))
System.out.println("xxxxxxx");
}
}


catch(IOException ioe)
{
System.out.println("Errore: " +ioe);
}



mi rimane cmq una domanda: invece di dare una riga vuota per far terminare il ciclo vorrei dare un isrtruzione precisa, ad esempio "Exit", cosa dovrei sostituire al posto del metodo lenght()? Ho provato con equalsIgnoreCase(), ma ovviamente funzione solo con una parola, a me invece serve che funzioni sia con xxxxxxx e sia con yyyyyyy. Come potrei utilizzare queto metodo per le 2 parole xxxxxxx e yyyyyyy?


grazie

kalauras
05-07-2003, 01:35
Credo che ti basti scrivere:


while (s.equals("Exit") != 0) {
...
...
s = in.readLine()
}

:ciauz:

MOBILUK
05-07-2003, 01:45
con il codice da te consigliato mi da errore perchè non accetta l'operatore !=

kalauras
05-07-2003, 03:11
Prova in questo modo:

while ((s.equals("Exit")) != 0) {
...
...
s = in.readLine()
}

ho messo s.equals("Exit") tra parentesi tonde... :gren:

kalauras
05-07-2003, 03:22
Sorry, ma sto facendo confusione con il metodo "compareTo()"...
il codice esatto dovrebbe essere:

while (!s.equals("Exit")) {
...
...
s = in.readLine()
}

Perchè "equals()" ritorna un booleano e non un intero. ;)

MOBILUK
05-07-2003, 05:19
ok, grazie per l'aiuto, ora funziona tutto correttamente. Ho cmq usato equalsIgnoreCase (metodo di String) così non si è costretti a digitare Exit con la E maiuscola.

Zero-2
05-07-2003, 10:17
puoi usare while((s = in.readLine())!=null){.....}

in questo modo ti basta premere CTRL+Z per uscire dalla lettura

Loading