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

    [JAVA] errore: Exception in thread "main" java.util.InputMismatchException

    ciao a tutti,
    premetto che sono alle prime armi con java. Stavo studiando un programma, ho provato a riscriverlo ed eseguirlo ma mi da i seguenti errori in esecuzione:

    Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:909)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextDouble(Scanner.java:2456)
    at ProvaConto.main(ProvaConto.java:20)

    il codice è questo:

    codice:
    import java.util.Scanner;
    
    public class ProvaConto
    {
    	public static void main(String args[])
    	{
    		ContoCorrente conto1 = new ContoCorrente(50.00);
    		ContoCorrente conto2 = new ContoCorrente(-7.53);
    		
    		// mostra il saldo iniziale di ciascun oggetto
    		System.out.printf("saldo di conto1: $%.2f\n", conto1.getSaldo());
    		System.out.printf("saldo di conto2: $%.2f\n", conto2.getSaldo());
    		
    		Scanner input = new Scanner(System.in);
    		double deposito;	// quantità inserità dall'utente
    		
    		System.out.printf("Inserire deposito per conto1: ");
    		deposito = input.nextDouble();	// input dell'utente
    		System.out.printf("\nsomma %2.f al saldo di conto1\n\n", deposito);
    		conto1.accredita(deposito);	// somma al saldo di conto1
    		
    		// mostra i saldi
    		System.out.printf("saldo di conto1: $%2.f\n", conto1.getSaldo());
    		System.out.printf("saldo di conto2: $%2.f\n", conto2.getSaldo());
    		
    		System.out.printf("Inserire deposito per conto2: ");
    		deposito = input.nextDouble();
    		System.out.printf("\nsomma %2.f al saldo di conto2\n\n", deposito);
    		conto2.accredita(deposito);
    		
    		// mostra i saldi
    		System.out.printf("saldo di conto1: $%2.f\n", conto1.getSaldo());
    		System.out.printf("saldo di conto2: $%2.f\n", conto2.getSaldo());
    	}
    	
    }
    Il programma fa riferimento a:

    codice:
    public class ContoCorrente
    {
    	private double saldo;	// variabile di istanza per il saldo
    	
    	// costruttore
    	public ContoCorrente(double saldoIniziale)
    	{
    		
    		/* controllo che saldoIniziale sia maggiore di 0.0 se non lo è, viene
    		   inizializzato a 0.0 per default */
    		if (saldoIniziale > 0.0)
    			saldo = saldoIniziale;
    	}
    	
    	// accredita una cifra al conto
    	public void accredita (double cifra)
    	{
    		saldo = saldo + cifra;
    	}
    	
    	// restituisce il saldo di ContoCorrente
    	public double getSaldo()
    	{
    		return saldo;	// restituisce il valore di saldo al metodo chiamante
    	}
    
    }
    qualche suggerimento?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Inserirai da tastiera un numero non floating point.

    Hai sbagliato sezione: java ha una sezione tutta sua.

    EDIT:
    Anche le printf sono errate...

  3. #3
    ah chiedo scusa, non avevo visto che c'era la sezione dedicata, come faccio a spostare?

    Comunque il numero che inserisco da tastiera è decimale

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Come ti ho scritto sopra il problema è anche la formattazione della printf.

    Utilizza il metodo hasNextDouble() che restituisce true se il prossimo token è un double, prima di chiamare il metodo nextDouble.
    codice:
    if(input.hasNextDouble()) deposito = input.nextDouble();
    Ricorda però di inizializzare deposito, altrimenti non compila.

    Per quanto riguarda lo spostamento, ci penserà lo staff.

  5. #5
    Scusami ma non ho capito molto le printf cos hanno che non va?

    Per quanto riguarda l'if, se il numero inserito non è un double cosa accade?

    Non so se magari mi potresti riscrivere il codice in modo corretto mi faresti un grance favore

    Il fatto è che se il libro è il primo a sbagliare non so come fare

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da edoedo91
    Scusami ma non ho capito molto le printf cos hanno che non va?

    Per quanto riguarda l'if, se il numero inserito non è un double cosa accade?

    Non so se magari mi potresti riscrivere il codice in modo corretto mi faresti un grance favore

    Il fatto è che se il libro è il primo a sbagliare non so come fare
    L'errore delle printf riguarda al fatto che hai scritto "%2.f". Manca il numero dei decimali :P

    Mi sono espresso molto male io in realtà, mi spiego meglio così da chiarirti tutto.
    Scanner spezza l'input in token (di default lo spazio, sorvolando sul fatto che puoi specificare i tuoi token); questi token sono delle Stringhe, quindi quando richiami nextDouble() tu stai dicendo di interpretare quel token come un double... se quello non è un double ottieni un eccezione InputMismatchException.
    Questa eccezione la ottieni anche in altre circostanze. Ad esempio se quando inserisci l'input utilizzi il carattere "punto" per separare i decimali, e non la virgola. Se utilizzi la virgola non avrai problemi!

    Prima di effettuare detta chiamata, sarebbe meglio assicurarsi che quel dato sia effettivamente un double (o un int, nel caso di nextInt()); quindi utilizzando hasNextDouble() sei sicuro he il prossimo token sia un double e che quindi non sollevi eccezioni.

  7. #7
    hai ragione, avevo sbagliato a copiare la formattazione per i decimali. è servito correggere solamente con %.2f

    Grazie per l'aiuto e per la pazienza

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.