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