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'erroreringrazio 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; } ... }

ringrazio anticipatamente chi mi aiuterà
Rispondi quotando