:D Olá, estou iniciando meus estudos com Java mas já tenho experiencia em outras linguagens,
entretanto estou encontrando um problema esquizito.
Ao que suponho, nextDouble() serve para pegar um valor e convertê-lo para um double.
Entretanto, não é isto que esta acontecendo quando eu coloco um valor em double no input (com ponto).
:shock: Se eu colocar o valor com vírgula ele aceita.
importjava.util.Scanner;classCalculaFrete{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);doublevalor;System.out.print("Qual o valor do produto? ");valor=input.nextDouble();valor=valor+25.00;System.out.print(valor);}}
Exemplos de uso:Qual o valor do produto? 80Retorna 105.0Qual o valor do produto? 80,50Retorna 105.5Qual o valor do produto? 80.50Retorna uma exceção
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at CalculaFrete.main(CalculaFrete.java:11)
Nossa! Tá dificil de alguem solucionar este problema…
A
Ataxexe2 likes
Simples: o Scanner utiliza como padrão o Locale padrão da máquina, por isso ele não aceita o valor com ponto.
Tente isso após instanciar o Scanner:
input.useLocale(Locale.ENGLISH);
G
gilbertoalbino1 like
Obrigado, Ataxexe.
Ja estava quase desistindo de aprender a programar em Java.
Mas como cada linguagem tem suas próprias loucuras…
Obs.: Só lembrando para quem está procurando a mesma resposta, que para o Locale funcionar,
é preciso importar a classe Locale primeiro, vejam como ficou meu código após a dica do Ataxexe:
importjava.util.Scanner;importjava.util.Locale;classTeste{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);input.useLocale(Locale.ENGLISH);doublevalor;System.out.print("Qual o valor do produto? ");valor=input.nextDouble();valor=valor+25.00;System.out.print(valor);}}
R
rodpuc
Queria te corrigir, o input.nextDouble(); que vc está usando serve para ler um valor double da entrada, e não para converter o valor para double como vc disse.
Por isso o fato de usar vírgula ou ponto faz toda diferença. Se vc usa errado a entrada não vai ser considerada um valor double e ocorrerá um InputMismatchException (se não me engano).
G
gilbertoalbino
Okay, realmente rodpuc .
Entretanto, só fiz uma suposição: