Salve a tutti, ho un problema con un programma nel quale devo leggere da un file una serie di alberghi caratterizzati da un codice, un nome,un indirizzo, una città, una nazione,un telefono e un fax; e da un altro file una serie di stanze, separate l'una dall'altra dal simbolo "#" e memorizzate in questo modo:
codice albergo
numero stanze tipologia 1
prezzo stanza tipologia 1
TV stanza tipologia 1 (SI/NO)
Condizionatore stanza tipologia 1 (SI/NO)
Frigo Bar stanza tipologia 1 (SI/NO)
Accesso Internet stanza tipologia 1 (SI/NO)
numero stanze tipologia 2
prezzo stanza tipologia 2
TV stanza tipologia 2 (SI/NO)
Condizionatore stanza tipologia 2 (SI/NO)
Frigo Bar stanza tipologia 2 (SI/NO)
Accesso Internet stanza tipologia 2 (SI/NO)

#
Io ho implementato le seguenti classi, ma quando vado a fare il test mi lancia un'eccezione del tipo NoSuchElementException e non capisco come correggere l'errore ringrazio anticipatamente chi mi aiuterà
codice:
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Scanner;

public class Albergo {
    private String codice;
    private String nome;
    private String indirizzo;
    private String citta;
    private String nazione;
    private String telefono;
    private String fax;
    private ArrayList<Stanza> stanze;
    
    public Albergo(String codice, String nome, String indirizzo, String citta, String nazione, String telefono, String fax) {
        this.codice = codice;
        this.nome = nome;
        this.indirizzo = indirizzo;
        this.citta = citta;
        this.nazione = nazione;
        this.telefono = telefono;
        this.fax = fax;
        stanze = new ArrayList<Stanza>();
    }
    
    public String getCodice() {
        return codice;
    }
    public String getNome() {
        return nome;
    }
    public String getIndirizzo() {
        return indirizzo;
    }
    public String getCitta() {
        return citta;
    }
    public String getNazione() {
        return nazione;
    }
    public String getTelefono() {
        return telefono;
    }
    public String getFax() {
        return fax;
    }

    public ArrayList<Stanza> getStanze() {
        return stanze;
    }
    
    public void addStanza(Stanza s){
        stanze.add(s);
    }
    public void print(PrintStream ps){
        ps.println(codice);
        ps.println(nome);
        ps.println(indirizzo);
        ps.println(citta);
        ps.println(nazione);
        ps.println(telefono);
        ps.println(fax);
    }
    
    public static Albergo read(Scanner in){
        if(!in.hasNextLine())
            return null;
        String codice = in.nextLine();
        
        if(!in.hasNextLine())
            return null;
        String nome = in.nextLine();
        
        if(!in.hasNextLine())
            return null;
        String indirizzo = in.nextLine();
        
        if(!in.hasNextLine())
            return null;
        String citta = in.nextLine();
        
        if(!in.hasNextLine())
            return null;
        String nazione = in.nextLine();
        
        if(!in.hasNextLine())
            return null;
        String telefono = in.nextLine();
        
        if(!in.hasNextLine())
            return null;
        String fax = in.nextLine();
        
        return new Albergo(codice,nome,indirizzo,citta,nazione,telefono,fax);
    }
}
codice:
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Scanner;

public class Stanza {
    private String codice;
    private ArrayList<TipoStanza> tipoStanze;
    private Albergo hotel;
    
    public Stanza(String codice, ArrayList<TipoStanza> tipoStanze) {
        tipoStanze = new ArrayList<TipoStanza>(); 
        this.hotel = null;
    }

    public String getCodice() {
        return codice;
    }
    
    public ArrayList<TipoStanza> getTipoStanze() {
        return tipoStanze;
    }

    public Albergo getHotel() {
        return hotel;
    }
    
    public void setHotel(Albergo hotel) {
        this.hotel = hotel;
    }

    public void print(PrintStream ps){
        ps.println(codice);
        for(TipoStanza t: tipoStanze)
            t.print(ps);
    }
    
    public static Stanza read(Scanner in) throws ValueNotValidException{
        if(!in.hasNextLine())
            return null;
        String codice = in.nextLine();
        
        ArrayList<TipoStanza> tipoStanze = new ArrayList<TipoStanza>();
        while(!in.next().equals("#"))
            tipoStanze.add(TipoStanza.read(in));
        
        return new Stanza(codice,tipoStanze);
    }
}
codice:
import java.io.PrintStream;
import java.util.Scanner;

public class TipoStanza {
    private int numStanze;
    private double prezzo;
    private String tv;
    private String condizionatore;
    private String frigo;
    private String internet;
    private Albergo hotel;
    
    public TipoStanza(int numStanze, double prezzo, String tv, 
            String condizionatore, String frigo, String internet) {
        this.numStanze = numStanze;
        this.prezzo = prezzo;
        this.tv = tv;
        this.condizionatore = condizionatore;
        this.frigo = frigo;
        this.internet = internet;
        this.hotel = null;
    }

    public int getNumStanze() {
        return numStanze;
    }

    public double getPrezzo() {
        return prezzo;
    }
    public String getTv() {
        return tv;
    }

    public String getCondizionatore() {
        return condizionatore;
    }

    public String getFrigo() {
        return frigo;
    }

    public String getInternet() {
        return internet;
    }

    public Albergo getHotel() {
        return hotel;
    }

    public void print(PrintStream ps){
        ps.println(numStanze);
        ps.println(prezzo);
        ps.println(tv);
        ps.println(condizionatore);
        ps.println(frigo);
        ps.println(internet);
    }
    
    public static TipoStanza read(Scanner in) throws ValueNotValidException{
        int numStanze;
        if(!in.hasNextLine())
            return null;
        String numero = in.nextLine();
        try{
            numStanze = Integer.parseInt(numero);
            if(numStanze < 0)
                throw new ValueNotValidException("Valore non valido");
            }catch(NumberFormatException e){
                System.err.println("Eccezione catturata nella lettura del prezzo " + numero);
                System.err.println("Verrà assegnato un numero di stanze di default pari a 0");
                numStanze = 0;
                }catch(ValueNotValidException e){
                    System.err.println("Eccezione catturata nella lettura del prezzo " + numero + " " + e.getMessage());
                    System.err.println("Verrà assegnato un numero di stanze di default pari a 0");
                    numStanze = 0;
                    }
        
        double prezzo;
        if(!in.hasNextLine())
            return null;
            
        String prezzo1 = in.nextLine();
        try{
            prezzo = Double.parseDouble(prezzo1);
            if(prezzo < 0)
                throw new ValueNotValidException("Prezzo non valido");
            }catch(NumberFormatException e){
                System.err.println("Eccezione catturata nella lettura del prezzo " + prezzo1);
                System.err.println("Verrà assegnato un prezzo di default pari a 0");
                prezzo = 0;
                }catch(ValueNotValidException e){
                    System.err.println("Eccezione catturata nella lettura del prezzo " + prezzo1 + " " + e.getMessage());
                    System.err.println("Verrà assegnato un prezzo di default pari a 0");
                    prezzo = 0;
                    }
            
        if(!in.hasNextLine())
                return null;
        String tv = in.next();
            
        if(!in.hasNextLine())
            return null;
        String condizionatore = in.next();
            
        if(!in.hasNextLine())
            return null;
        String frigo = in.next();
            
        if(!in.hasNextLine())
            return null;
        String internet = in.next();
            
        return new TipoStanza(numStanze,prezzo,tv,condizionatore,frigo,internet);
    }
}
codice:
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Scanner;

public class ArchivioAlberghi{
    private ArrayList<Stanza> stanze;
    private ArrayList<Albergo> alberghi;

    public ArchivioAlberghi(Scanner sA, Scanner sS)throws ValueNotValidException{
        alberghi = new ArrayList<Albergo>();
        while(sA.hasNextLine())
            alberghi.add(Albergo.read(sA));
        
        stanze = new ArrayList<Stanza>();
        while(sS.hasNextLine())
            stanze.add(Stanza.read(sS));
        
        for(Stanza s: stanze){
            Albergo a = this.searchAlbergoByCode(s.getCodice());
            
            s.setHotel(a);
            a.addStanza(s);
        }
        
    }
    
    private ArchivioAlberghi(ArrayList<Stanza> stanze, ArrayList<Albergo> alberghi){
        this.stanze = stanze;
        this.alberghi = alberghi;
    }
    
    public Albergo searchAlbergoByCode(String code){
        boolean trovato = false;
        int i = 0;
        while(i<alberghi.size() && !trovato){
            if(alberghi.get(i).getCodice().equals(code))
                trovato = true;
            else
                i++;
        }
        if(trovato)
            return alberghi.get(i);
        else
            return null;
    }
...
}