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

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

[code]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[/code]

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

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:

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)

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:

4 curtidas

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. "

1 curtida

Obrigado Natalia Lima agora sim eu entendi

vlw pessoal

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

[quote=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:
[/quote]
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: