Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [Java] Null

  1. #1

    Null

    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.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    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:
    codice:
    String line = ""; // line NON E' null!!
    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

  3. #3
    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?

  4. #4
    posta tutto il pezzo di codice così capiamo meglio dove sta l'errore.

  5. #5
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    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

  6. #6
    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;
    }
    }
    }

  7. #7
    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."

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    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

  9. #9
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    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

  10. #10
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.