Visualizzazione dei risultati da 1 a 10 su 26

Discussione: [JAVA] Lettura txt

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Quote Originariamente inviata da andbin Visualizza il messaggio
    O è esplicitato nel file stesso (chiaramente un formato leggermente differente) oppure lo sai tu implicitamente.
    E il tuo è quest'ultimo caso. Sai che la riga è da saltare. Quindi appunto con Scanner hai fatto un nextLine() ignorando la stringa.


    Innanzitutto il problema più evidente è che hasNextLine() ti dice solo se c'è un'altra linea o no. Ma non fa avanzare alcunché, non legge un bel nulla. Quindi nel while devi comunque usare nextLine(). "Finché c'è una riga, leggi la riga".

    Inoltre non capisco perché hai creato un FileReader che non usi.

    E infine il doppio for dentro l'ultimo while è dubbio. Tu stai gestendo una riga per volta ... non ha senso iterare sulle righe della matrice lì dentro.

    Rivedi/rivaluta il tutto.
    Ho già usato questo metodo while(s.hasNextLine) per la lettura di un altro file e funziona...
    Te lo posto

    codice:
    public ElencoRegali readregali() throws FileNotFoundException{        Scanner s = new Scanner(doc);
            ElencoRegali er = new ElencoRegali();
            
            /** Ciclo per la divisione della stringa studente nei campi dell'ArrayList*/
            while (s.hasNextLine()) {
                StringTokenizer st = new StringTokenizer(s.nextLine(), " ");
                
                String tipo = st.nextToken();
                String prezzo = st.nextToken();
                String info = st.nextToken();
                
                Regalo temp = new Regalo (tipo, Float.parseFloat(prezzo), info);
                er.addRegalo(tipo, Float.parseFloat(prezzo), info);
            } 
            s.close();
            return er;
        }
    Per quanto riguarda il doppio for.. Ho bisogno di utilizzare il metodo mat.inserisci che richiede come parametri gli indici e il valore quindi i due indici sono dati dai due for.. no?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    Ho già usato questo metodo while(s.hasNextLine) per la lettura di un altro file e funziona...
    Il punto è che hai fatto

    while (s.hasNextLine()) {

    dove dentro non leggi nulla. Lo ripeto: hasNextLine non fa avanzare un bel nulla. Se al primo test dice true, continuerà all'infinito a dire true e a ciclare. Stop.

    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    Per quanto riguarda il doppio for.. Ho bisogno di utilizzare il metodo mat.inserisci che richiede come parametri gli indici e il valore quindi i due indici sono dati dai due for.. no?
    Sì ma l'indice di riga lo devi far proseguire in avanti man mano che leggi le righe. Non "ciclo su tutte le righe" per ogni riga!
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il punto è che hai fatto

    while (s.hasNextLine()) {

    dove dentro non leggi nulla. Lo ripeto: hasNextLine non fa avanzare un bel nulla. Se al primo test dice true, continuerà all'infinito a dire true e a ciclare. Stop.


    Sì ma l'indice di riga lo devi far proseguire in avanti man mano che leggi le righe. Non "ciclo su tutte le righe" per ogni riga!

    Ho capito quello che vuoi dire.. Io controllo che ci sia ancora una riga while (s.hasNextLine()) {
    poi è l'oggetto StringTokenizer che si occupa di andare avanti con (s.nextLine). Se nell'altro metodo funziona credo sia così xD

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    Ho capito quello che vuoi dire.. Io controllo che ci sia ancora una riga while (s.hasNextLine()) {
    poi è l'oggetto StringTokenizer che si occupa di andare avanti con (s.nextLine). Se nell'altro metodo funziona credo sia così xD

    Quasi... non è lo StringTokenizer è proprio quel "s.nextLine()" (che viene passato al costruttore di StringTokenizer) che fa avanzare la lettura. Potresti anche non avere nessuno StringTokenizer, l'importante è che tu faccia eseguire il s.nextLine().


    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Quasi... non è lo StringTokenizer è proprio quel "s.nextLine()" (che viene passato al costruttore di StringTokenizer) che fa avanzare la lettura. Potresti anche non avere nessuno StringTokenizer, l'importante è che tu faccia eseguire il s.nextLine().


    Ciao.
    bene quindi su questo ci siamo..
    il problema è che da quando nel main ho inserito

    mat = dm.readMatrice();

    il programma non si avvia più.. diciamo che si ferma in run.. mentre se levo quell'istruzione, parte

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    diciamo che si ferma in run..
    Dai lo ripeto ancora una volta:

    codice:
            while (s.hasNextLine()) {
                cont++;
            }
    è un ciclo "infinito" SE c'è almeno 1 riga al primo test.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.