Erro Exception in thread "main" java.util.InputMismatchException

8 respostas
G

ola pessoa esta aparecendo um erro, quando eu digito a quantidade de deposito mesmo se eu colocar o deposito com (23.56 ou 23,56) com virgula o com ponto

Exception in thread "main" java.util.InputMismatchException

Sei que é alguma coisa referente o Scanner

O codigo é esse

import java.util.Scanner;


public class TestConta
{

    //inicio do Metodo main
    public static void main(String args[])
    {
        Conta conta1 = new Conta(50.00);//Cria o objeto Conta
        Conta conta2 = new Conta(-7.53);//Cria o objeto Conta

        System.out.printf("Saldo da Conta1: $%.2f",conta1.getSaldo());

        System.out.printf("\nSaldo da Conta2: $%.2f",conta2.getSaldo());

        Scanner input = new Scanner(System.in);
        double deposito=0;

        System.out.print("\nEntrar com a quantidade de deposito na Conta1");
        deposito = input.nextDouble();//adiciona quantidade de deposito na variavel

        System.out.printf("\n Quantidade de deposito $%.f na conta1",deposito);

        conta1.credit(deposito);//adiciona o saldo na conta1

        System.out.printf("Saldo da conta1 esta em: $%.2f",conta1.getSaldo());

        System.out.printf("Saldo da Conta2: $%.2f",conta2.getSaldo());

        System.out.print("Entrar com a quantidade de deposito na Conta2");
        deposito = input.nextDouble();//adiciona quantidade de deposito na variavel

        System.out.printf("\n Quantidade de deposito $%.2f na conta2",deposito);

        conta2.credit(deposito);

        System.out.printf("Saldo da conta2 esta em: $%.2f",conta2.getSaldo());

    }//fim do Metodo main

}//fim da Classe TestConta

8 Respostas

aajjbb

posta a stacktrace ai… em que linha da a exception.

Natalia_Lima

Eu executei aqui e estava dando erro nessa linha

deposito = input.nextDouble();//adiciona quantidade de deposito na variavel

Troquei por

deposito = Double.parseDouble(input.nextLine());//adiciona quantidade de deposito na variavel

//mudei aqui também para não dar erro no $%.f
System.out.print("\n Quantidade de deposito " + deposito + " na conta1");

Assim funciona, mas como eu nunca usei a classe Scanner, não vou conseguir te explicar o erro…
Mas pelo menos, desse outro jeito, vc já consegue continuar desenvolvendo… blz? :lol:

G

Ola pessoa obrigado pelas resposta vlw

Natalia Lima vlw pela sua solução mas quero saber o motivo do erro, mesmo assim agradeço muito pela sua ajuda.

entao [color=blue]aajjbb[/color] o erro da na linha 21

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 TestConta.main(TestConta.java:21)
Natalia_Lima

A documentação da classe Scanner que está no link
http://download.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

diz o seguinte:
Este método irá lançar InputMismatchException se o próximo token não pode ser traduzido em um duplo valor válido.
Ou seja, o erro se deve pq o valor que está passando não é válido.

Daí, pesquisando nesse fórum
http://javafree.uol.com.br/topic-877257-Exception-in-thread.html?page=1
Descobri que o problema provavelmente ocorre pq o Scanner está tentando ler um número real no formato da sua máquina que deve usar a vírgula para separar os decimais, mas recebeu um número separado por ponto.

Para resolver o seu problema, coloque

Scanner input = new Scanner(System.in); input.useLocale(Locale.US);

Aí vai funcionar se colocar números com ponto - 12.0 (por exemplo)!!!
:lol: :lol: :lol:

aajjbb

direto da api

"Thrown by a Scanner to indicate that the token retrieved does not match the pattern for the expected type, or that the token is out of range for the expected type. "

G

Obrigado Natalia Lima agora sim eu entendi

vlw pessoal

setezerocinco

Loguei só para agradecer a resposta ao problema. Perdi um bom tempo procurando =P

R

Natalia Lima:
A documentação da classe Scanner que está no link
http://download.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

diz o seguinte:
Este método irá lançar InputMismatchException se o próximo token não pode ser traduzido em um duplo valor válido.
Ou seja, o erro se deve pq o valor que está passando não é válido.

Daí, pesquisando nesse fórum
http://javafree.uol.com.br/topic-877257-Exception-in-thread.html?page=1
Descobri que o problema provavelmente ocorre pq o Scanner está tentando ler um número real no formato da sua máquina que deve usar a vírgula para separar os decimais, mas recebeu um número separado por ponto.

Para resolver o seu problema, coloque

Scanner input = new Scanner(System.in); input.useLocale(Locale.US);

Aí vai funcionar se colocar números com ponto - 12.0 (por exemplo)!!!
:lol: :lol: :lol:


I eu criei meu cadastro só para te agradecer.
Estava com dois problemas este e o fato de Double ser o tipo padrão, sendo este o motivo de eu não estar conseguindo usar o float, tinha que declarar float f = 2,44f, não lembro de ter lido nada parecido e achei a resposta aqui.

Dps em você e me salva, tava achando estranho que o ponto(.) não estava funcionando, mas a virgula estava.
Obrigado! :slight_smile:

Criado 24 de janeiro de 2011
Ultima resposta 16 de jan. de 2014
Respostas 8
Participantes 5