Newsgroup: it.comp.java
Titolo: readLine() : come caspita lo faccio uscire dal ciclo?

import java.io.*;
public class Prova{
  public static void main(String[] args) throws IOException{
    InputStreamReader keyboard = new InputStreamReader(System.in);
    BufferedReader tastiera = new BufferedReader (keyboard);
    File f = new File ("Prova.txt");
    FileOutputStream filetesto = new FileOutputStream (f);
    PrintStream stampa = new PrintStream (filetesto);
    String passa = tastiera.readLine();
    while (passa != null){
     stampa.println(passa);
     passa = tastiera.readLine();
    }
    stampa.close();
    System.exit(0);
  }
}
Come passo null da tastiera?
Non mi esce dal while neanche se gli metto come condizione una stringa ben
precisa : si becca l'invio e continua a prendere righe di battitura e a
metterle sul file prova.txt .
Come cavolo lo blocco?
Ringrazio anticipatamente chiunque mi sia di aiuto.

 Come passo null da tastiera?
Windows: CTRL-Z e invio
UNIXish: CTRL-D (mi raccomando non CTRL-Z)
Amiga (se ci fosse una JVM... sigh): CTRL+"\" (backslash)
--
Retrocensitevi! Su:
http://valis.di.uniba.it/projects/retrocensimento
http://www.retrocensimento.cjb.net

 Come passo null da tastiera?
Prova con : while(!passa.equals("")) oppure while(!passa.equals(null)) ( di 
solito preferisco la prima).
String è un oggetto un po' particolare (spesso lo si confonde con i tipi 
primitivi)e l'operatore == con String non sempre funziona : anzi siccome lo 
accetta più in certe eccezioni che nella normalità te ne sconsiglio l'uso.
-- 
Ciao. Fabrizio.
icq: 241182067

 accetta più in certe eccezioni che nella normalità te ne sconsiglio l'uso.
Mitico,funziona :P
Dannati libri del cavolo!!!!

 Dannati libri del cavolo!!!!
Sono contento che funzioni: cmq ti ho riportato un suggerimento di Horstman 
paro paro , così come ho avuto modo di leggerlo e sperimentarlo (ciao 
italiano); lo dico per difendere i libri di testo , alcuni sono buoni.


 italiano); lo dico per difendere i libri di testo , alcuni sono buoni.
Ehm porc ho l'Horstman pure io,ma il prof ci ha fatto comprare anche i libri
con i suoi lucidi delle lezioni : e' qui che veniva usata quella condizione.
Fesso io che non me ne sono accorto subito.
Allora studio sul libro di Horstman che e' meglio :D

 Allora studio sul libro di Horstman che e' meglio :D
Siamo ot , ma sono proprio curioso: il tuo prof ti ha indicato anche la 
copisteria dove andare a comprare i suoi lucidi.


 copisteria dove andare a comprare i suoi lucidi.
Mica una : ogni libreria vicino la facolta' ha il suo volumetto di lezioni
da comprare a 16 euro :D
P.S.Mo
 devo pure comprare il secondo volumetto -_-'

Ci tengo a precisare pero' che questo e' il primo errore che trovo ed e'
l'ultimo capitolo del libro :)
Quel poco che so sul java lo so grazie a questo libro ^_^

Gabriele wrote:

Non è proprio un'errore gravissimo ( se vedessi mattone che errori che ha ), 
anche perchè l'uso dell'operatore == con String è consentito in alcuni casi 
e lo stesso Horstmann lo usa in alcuni codici di esempio : rimane il fatto 
che le volte che ho cercato di fare andare tali esempi, la jdk 1.4_01 mi 
faceva lo stesso tuo scherzo , per cui ho deciso di usare solo i metodi di 
confronto della classe String, così non passo quartidora coi sudori freddi 
a chiedermi dove cazzo ho sbagliato.
Anzi magari non è neanche un'errore, giro il quesito alla comunità.


"oizirbaF" <fabri.tre...@NOtiscali.it> ha scritto nel messaggio
news:b2qrts$ig6$1...@lacerta.tiscalinet.it...

String è un oggetto quindi passa == null o passa != null non vedo perchè non
dovrebbe funzionare.
Certamente invece non funzionano mai cose del tipo
if(passa == "" )
oppure
if(passa != "fgdg")

 ben precisa :
non starai mica comparando due String  con l'== devi usare .equals o metodi 
simili(naturalmente testando ed escudendo il caso null):
while (passa != null && ! passa.equals("FINE") )
-- 
Simone

 non dovrebbe funzionare.
Confermo di aver scritto di getto una cagata pazzesca , purtroppo solo 
riprovando con più calma ho capito il mio errore e perchè a Gabriele 
funziona così come gliel'ho detta:
molto probabilmente lui , come me, invece di fare CTRL + D da semplicemente 
invio ( una ritorna null mentre l'altro ritorna "").
Quanto a fare .equals(null) .... non c'è scusa che tenga : ritornerò al 
capitolo 5 pag 200 dell'Horstmann , che ho citato ingiustamente.



Peccato non poter cancellare questo post , di cui mi vergognerò in eterno ( 
come pure di tutto il thread ).
La spiegazione è che tu invece di fare CTRL + D (o CTRL + Z  in windows) , 
facessi invio.
Se è così leggiti il post mio di risposta a diabolik: scusa per le stronzate 
che ho scritto.


 while (passa != null && ! passa.equals("FINE") )
In maniera + compatta si puo' scrivere
while (! "FINE".equals(passa) )
- Dario

Ringrazio tutti per le spiegazioni che mi avete dato : come e' evidente
avevo un po' di confuzione.
Ora so sia come passargli il null da tastiera,sia come uscire col semplice
invio.
Grazie mille ancora.