Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49

    java.util.Scanner...domanda da newbe

    Ciao, sto studiando java sul libro della Deitel. Essendo all'inizio avevo capito che bastasse creare un solo oggetto per la classe Scanner, anche se avessi avuto la necessità di più input...e in effetti in esercizi precedenti funzionava così..ma ora non se nn creo un secondo oggetto, all'inserimento dell'importo per il secondo impiegato mi da errore:

    Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextDouble(Scanner.java:2387)
    at Stipendio.main(Stipendio.java:35)

    Mi potreste spiegare l'arcano??

    Alex
    **************************************************
    Di seguito la classe Impiegato e la sua implementazione Stipendio:
    codice:
    /*
     * Esercizio 3.14
     */
    
    public class Impiegato {
    	private String nome;
    	private String cognome;
    	private double stipendio;
    	//Costruttore di classe
    	public Impiegato(String name,String surname,double stipend){
    		nome = name;
    		cognome = surname;
    		stipendio = stipend;
    		
    	}
    	// Imposta il nome
    	public void setNome(String name){
    		nome = name;
    	}
    	//Imposta il cognome
    	public void setCognome(String surname){
    		cognome = surname;
    	}
    	//Imposta lo stipendio
    	public void setStipendio(double stipend){
    		if (stipend <= 0)
    			stipendio = 0.0;
    		if (stipend > 0)
    			stipendio = stipend;
    	}
    	//recupera il nome
    	public String getNome(){
    		return nome;
    	}
    	//recupera il cognome
    	public String getCognome(){
    		return cognome;
    	}
    	//recupera lo stipendio
    	public double getStipendio(){
    		return stipendio;
    	}
    	//Calcoli stipendio annuale
    	public double getStipendioAnnuale(){
    		double stipAnnuale = stipendio * 12;
    		return stipAnnuale;
    	}
    	//Concessione aumento del 10%
    	public double getAumento(){
    		double aumento = (getStipendioAnnuale()  * 10)/100 + getStipendioAnnuale();
    		return aumento;
    	}
    	
    }
    
    
    **********************************************
    /*
     * Esercizio 3.14
     */
    import java.util.Scanner;
    public class Stipendio {
    
    	
    	public static void main(String[] args) {
    		//variabili
    		String nome,cognome;
    		double stipendio;
    		//Creo due oggetti della classe Impiegato e setto i costruttori
    		Impiegato cassiere = new Impiegato("Not available","Not available",0.0);
    		Impiegato sportellista = new Impiegato("Not available","Not available",0.0);
    		//Visualizzo dati iniziali
    		System.out.printf("%s%s\n%s\n%.1f\n","DATI INIZIALI Impiegato 1:\n\n",
    				cassiere.getNome(),cassiere.getCognome(),cassiere.getStipendio());
    		System.out.printf("%s%s\n%s\n%.1f\n","\n\nDATI INIZIALI Impiegato 2:\n\n",
    				sportellista.getNome(),sportellista.getCognome(),sportellista.getStipendio());
    		//Imposto i dati del primo impiegato
    		Scanner in = new Scanner(System.in);
    		//Scanner in2 = new Scanner(System.in);
    		System.out.println("\n\nInserire il dati  del primo impiegato: ");
    		nome = in.nextLine();
    		cognome = in.nextLine();
    		stipendio = in.nextDouble();
    		//Passo i dati alla classe Impiegato
    		cassiere.setNome(nome);
    		cassiere.setCognome(cognome);
    		cassiere.setStipendio(stipendio);
    		//Dati del secondo impiegato
    		System.out.println("\nInserire il dati  del secondo impiegato: ");
    		nome = in.nextLine();
    		cognome = in.nextLine();
    		stipendio = in.nextDouble();
    		//Passo i dati del secondo impiegato
    		sportellista.setNome(nome);
    		sportellista.setCognome(cognome);
    		sportellista.setStipendio(stipendio);
    		//visualizzazione dopo le operazioni
    		System.out.printf("%s%s\n%s\n%.1f\n","DATI AGGIORNATI Impiegato 1:\n\n",
    				cassiere.getNome(),cassiere.getCognome(),cassiere.getStipendio());
    		System.out.printf("%s%s\n%s\n%.1f\n","\n\nDATI AGGIORNATI Impiegato 2:\n\n",
    				sportellista.getNome(),sportellista.getCognome(),sportellista.getStipendio());
    		// Stampo i stipendi annuali
    		System.out.printf("%s%.1f\n","Stipendio Annuale Impiegato 1:\n\n",
    				cassiere.getStipendioAnnuale());
    		System.out.printf("%s%.1f\n","Stipendio Annuale Impiegato 2:\n\n",
    				sportellista.getStipendioAnnuale());
    		// e i relativi aumenti
    		System.out.printf("%s%.1f\n","Stipendio  Impiegato 1 con aumento del 10%:\n\n",
    				cassiere.getAumento());
    		System.out.printf("%s%.1f\n","Stipendio Impiegato 2 con aumento del 10%:\n\n",
    				sportellista.getAumento());
    		
    	}
    
    }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: java.util.Scanner...domanda da newbe

    Originariamente inviato da magobin
    Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextDouble(Scanner.java:2387)
    at Stipendio.main(Stipendio.java:35)

    Mi potreste spiegare l'arcano??
    Cosa scrivi sul terminale per causare l'eccezione?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49
    scrivo di seguito i dati richiesti..praticamente per non riscriver un System.out.... dopo ogni domanda scrivo nome cognome e stipendio; quando do 'enter' al cognome del secondo impiegato da errore così:

    codice:
    DATI INIZIALI Impiegato 1:
    
    Not available
    Not available
    0,0
    
    
    DATI INIZIALI Impiegato 2:
    
    Not available
    Not available
    0,0
    
    
    Inserire il dati  del primo impiegato: 
    aa
    bb
    1234
    
    Inserire il dati  del secondo impiegato: 
    cc
    dd
    Exception in thread "main" java.util.InputMismatchException
    	at java.util.Scanner.throwFor(Scanner.java:840)
    	at java.util.Scanner.next(Scanner.java:1461)
    	at java.util.Scanner.nextDouble(Scanner.java:2387)
    	at Stipendio.main(Stipendio.java:35)

  4. #4
    Dall'eccezione sembra che inserisci un tipo sbagliato di dato invece di un double...
    Inserisci un numero oppure un carattere ?
    Se metti la virgola, metti il punto e non la virgola normale ?
    lolide
    Java Programmer

    Informati

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49
    io inserisco un numero....praticamente 1234
    non riesco a capire perchè da errore...ho fatto decine di esercizi in cui inserisco dati allo stesso modo...ma non riesco a capire dove sbaglio


    alex

  6. #6
    Originariamente inviato da magobin
    io inserisco un numero....praticamente 1234
    non riesco a capire perchè da errore...ho fatto decine di esercizi in cui inserisco dati allo stesso modo...ma non riesco a capire dove sbaglio


    alex
    Leggi Scanner.nextDouble().
    Il numero deve essere del pattern dei Float.
    Uhm quindi, anche se molto strano, prova a cambiare con nextInt() (forse devi inserire per forza un numero con la virgola)
    lolide
    Java Programmer

    Informati

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49
    provando delle 'varianti'....ho visto che se, dove dovrei inserire il cognome, inserisco un numero...il programma non mi da errore...

    A questo punto devo aver sbagliato qualcosa a livello codice....però la parte interessata sembra giusta:

    cognome = in.nextLine();

    ...non capisco perchè vuole un numero a questo punto

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49
    Come si suol dire, non ho sicuramente il background per ribattere a quello che dici, ma un double dovrebbe comunque accettare un qualsiasi numero. E poi s lo accetta al primo impiegato, in più l'errore me lo da non sul doble, ma a questo punto su String...dato che lo da quando inserisco il cognome.

    Alex

  9. #9
    Originariamente inviato da magobin
    Come si suol dire, non ho sicuramente il background per ribattere a quello che dici, ma un double dovrebbe comunque accettare un qualsiasi numero.
    Si, in effetti hai ragione...

    Originariamente inviato da magobin
    E poi s lo accetta al primo impiegato, in più l'errore me lo da non sul doble, ma a questo punto su String...dato che lo da quando inserisco il cognome.

    Alex
    L'errore lo da sull'altra linea... Quindi, facciamo un po' di prove...

    Se sostituisci a quel nextDouble un nextLine e fai Double.parseDouble() alla String che ti ritornerà dal nextLine, funziona ?
    lolide
    Java Programmer

    Informati

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49
    Ma non posso sostituire a Double--> Line, mi da errore perchè stipendio è correttamente settata come double


    Non vorrei essere incorso in un bug...se il secondo impiegato lo 'gestisco con un nuovo oggetto scanner....tutto funziona..

    Alex

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.