Ciao a tutti il mio problema è questo:
Allora se scrivo
BufferedReader br;
String line;
line = br.readLine();
while(line!=null) ....e il corpo
del ciclo...
come mai il ciclo non ha mai fine?
quand' è che una String = null?
Grazie mille a tutti.
Ciao a tutti il mio problema è questo:
Allora se scrivo
BufferedReader br;
String line;
line = br.readLine();
while(line!=null) ....e il corpo
del ciclo...
come mai il ciclo non ha mai fine?
quand' è che una String = null?
Grazie mille a tutti.
ehm... line ha valore null quando glielo si assegna oppure quando è stata dichiarata ma non inizializzata... probabilmente non assegni mai a line il valore null dentro al ciclo.
IMPORTANTE:
Ciao.codice:String line = ""; // line NON E' null!!
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Quindi l' istruzione
while( line != null) non ha senso, giusto?
questo segmento è riportato in un main sul libro:
Introduzione alla programmazione con Java(Arnow,Weiss)
ed è in tutti gli esempi del genere.
Come si può spiegare? Sono io a non capire qualcosa che dovrebbe essere molto chiaro?
posta tutto il pezzo di codice così capiamo meglio dove sta l'errore.
Ciao.
Allora se fai una cosa del genere ( esempio puramente inventato ora ):
BufferedReader br;
String line;
line = br.readLine();
while(line!=null){
System.out.println( " Dal buffered ho letto: "+ line );
}
Ovviamente, a meno che la prima stringa del BufferedReader non sia null, il while non avrà mai termine in quanto line sarà un valore diverso da null e che non verrà mai modificato ( ovviamente starà a te istanziare un oggetto di tipo BufferedReader in quanto nel pezzo di codice scritto esso è null e se lo usi -> NullPointerException ); un discorso differente è il seguente:
BufferedReader br;
String line;
while( ( line = br.readLine() )!=null ){
System.out.println( " Dal buffered ho letto: "+ line );
}
In questo caso line viene valorizzato ad un valore, viene eseguito il corpo del while e poi viene letta di nuovo la stringa del bufferedreader; in questo caso il ciclo effettivamente terminerà quando il readLine() del BufferedReader restituirà null.
Spero ti sia d'aiuto, ciao
Se vuoi trovare l'arcobaleno, devi sopportare la pioggia
Allora tutto il codice, trovato sul libro è questo:
import java.io.*;
import java.util.*;
class reverseLines {
public static void main(String[] arg) throws Exception {
BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
Vector v = new Vector();
String s;
s = f.readLine();
while (s != null) {
v.add(s);
s = f.readLine();
}
int k;
k = v.size()-1;
while (k != -1) {
System.out.println(v.elementAt(k));
--k;
}
}
}
L'ultimo codice che hai postato è corretto.
Guarda bene il corpo dell'iterazione.
Ad ogni iterazione:
1) legge la prossima riga del Buffer
2) Assegna alla tua stringa "s" la riga che ha appena letto
3) Inserisce nell'oggetto Vector la stringa
Ogni volta che esegui la chiamata del metodo "readLine()" leggi la riga successiva.
Quando le righe si saranno esaurite, la chiamata del metodo "readLine()" restituirà null.
A quel puno, quando verrà controllata la guardia, uscirai dal "while".
Dai un'occhiata alle API per la classe BufferedReader:
http://java.sun.com/j2se/1.3/docs/ap....html#readLine()
Spero di esserti stato d'aiuto e di non aver detto troppe scempiaggini!
Nicola Baldi <% Naighes %>
Il mio blog!
"Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."
Esattamente: quindi questo programma continuerà a leggere stringhe da tastiera finchè non premi CTRL + C (il carattere di EOF, che su Linux/Unix dovrebbe essere CTRL + D...). A quel punto ti restituisce in output le stringhe invertite.
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Ciao; il problema è che da System.in non riceve null ma ""; infatti se scrivi:
while (s != null && !s.equals("") ) {
v.add(s);
s = f.readLine();
}
Invece che:
while (s != null ) {
v.add(s);
s = f.readLine();
}
Non appena digiterai invio senza scrivere nulla dal promp di dos il while cesserà e, come detto da LeleFT, appariranno a video le stringhe inserite in ordine inverso.
Ciao
Se vuoi trovare l'arcobaleno, devi sopportare la pioggia
Innanzitutto grazie a tutti
comunque mi sembra che Angelo abbia colto in pieno: infatti il ciclo dell' ultimo codice che ho inserito non termina quando non si scrive nulla e si preme invio, perchè a quanto pare non è valutata null una String vuota(""), ma tale codice termina quando si digita Ctrl + C e in nessun altro modo.
Vi ringrazio di nuovo.Ciao.