Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Problema lettura da scanner

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

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    3
    Salve, NoSuchElementException non riceve gli elementi richiesti, forse qualcosa con buffer apertura e chiusura del file in scrittura o in lettura, quel cancelletto # mi ricorda qualcosa in C ma non so se in Java vale le stesse regole!

  3. #3
    Buongiorno,

    Anch'io ho un problema di lettura da Scanner. Il codice seguente funziona se si trova, con le opportune modifiche, nella classe con il metodo main(). Se, invece, i metodi che eseguono il calcolo si trovano in un'altra classe, l'output � errato in quanto risulta sempre uguale a 0.

    Codice classe Rendimento:

    public class Rendimento {


    private int tassoInteresse;
    private int anni;
    private double capitale;


    public double CalcolaRendimentoSemplice(){


    double tasso = tassoInteresse/100;
    return capitale*tasso*anni;
    }


    public double CalcolaRendimentoComposto(){


    double tasso = tassoInteresse/100;
    return capitale*(1+tasso)*anni;
    }
    }

    Codice classe con il metodo main():

    import java.util.Scanner;


    public class CalcoloRendimento {



    public static void main(String[] args) {

    Rendimento r = new Rendimento();

    Scanner sc = new Scanner(System.in);
    System.out.print("Inserisci il capitale da investire: ");
    double capitale = sc.nextDouble();
    System.out.print("Inserisci il tasso di interesse: ");
    double tassoInteresse = sc.nextDouble();
    System.out.print("Inserisci il numero di anni: ");
    int anni = sc.nextInt();

    System.out.println("Il rendimento semplice � di " + r.CalcolaRendimentoSemplice() + "�");
    }
    }


    Output:

    Inserisci il capitale da investire: 4
    Inserisci il tasso di interesse: 1
    Inserisci il numero di anni: 1
    Il rendimento semplice � di 0.0�

    Ovvero il rendimento risulta sempre 0 qualunque valore assumano i parametri immessi a console.

  4. #4
    Quote Originariamente inviata da StefanoCasalegn Visualizza il messaggio
    Codice classe Rendimento:

    public class Rendimento {


    private int tassoInteresse;
    private int anni;
    private double capitale;
    In questa classe, la variabile tassoInteresse deve essere di tipo double e non di tipo int perchè quando vai a fare la divisione per 100, il risultato viene arrotondato al numero intero subito inferiore, quindi in questo caso a 0.Nella classe CalcoloRendimento, infatti, memorizzandola in un riferimento di tipo double, non incorri nel problema

  5. #5
    Anch'io avevo poi pensato a modificare tasso interesse in double, ma il risultato finale non cambia.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    5
    Quote Originariamente inviata da StefanoCasalegn Visualizza il messaggio
    Anch'io avevo poi pensato a modificare tasso interesse in double, ma il risultato finale non cambia.
    Il risultato finale non cambia perche' non esiste nessun collegamento effettivo tra le variabili della classe rendimento e quella in cui lo si vuole calcolare. Questo perche' non e' stato generato il constructor nella classe rendimento, pertanto le variabili prese dallo scanner non vengono usate per eseguire il calcolo richiesto.
    Ecco come dovrebbero essere impostate le classi:
    rendimento:
    codice:
    public class rendimento {    
        private double tassoInteresse;
        private int anni;
        private double capitale;
            
        public rendimento(double tassoInteresse, int anni, double capitale) {
            super();
            this.tassoInteresse = tassoInteresse;
            this.anni = anni;
            this.capitale = capitale;
            //in questo modo la classe chiedera' di dichiarare queste variabili per essere utilizzata
        }
    
    
    
    
        public double CalcolaRendimentoSemplice(){
    
    
    
    
        double tasso = tassoInteresse/100;
        return capitale*tasso*anni;
        }
    
    
    
    
        public double CalcolaRendimentoComposto(){
    
    
    
    
        double tasso = tassoInteresse/100;
        return capitale*(1+tasso)*anni;
        }
    }
    Calcolo rendimento:
    codice:
    public class CalcoloRendimento {
    
    public static void main(String[] args) {
            
    
    
            Scanner sc = new Scanner(System.in);
            System.out.print("Inserisci il capitale da investire: ");
            double capitale = sc.nextDouble();
            System.out.print("Inserisci il tasso di interesse: ");
            double tassoInteresse = sc.nextDouble();
            System.out.print("Inserisci il numero di anni: ");
            int anni = sc.nextInt();
            rendimento r = new rendimento(tassoInteresse, anni, capitale);
            //ora sono collegate all'altra classe
            System.out.println("Il rendimento semplice � di " + r.CalcolaRendimentoSemplice() + "�"); 
            
        
        }
    }

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