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?