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.
[code]import java.util.Scanner;
class CalculaFrete
{
public static void main(String[] args)
{
Scanner input= new Scanner(System.in);
double valor;
System.out.print("Qual o valor do produto? ");
valor = input.nextDouble();
valor = valor + 25.00;
System.out.print(valor);
}
}[/code] Exemplos de uso: Qual o valor do produto? 80 Retorna 105.0 Qual o valor do produto? 80,50 Retorna 105.5 Qual o valor do produto? 80.50 Retorna 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)
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:
import java.util.Scanner;
import java.util.Locale;
class Teste
{
public static void main(String[] args)
{
Scanner input= new Scanner(System.in);
input.useLocale(Locale.ENGLISH);
double valor;
System.out.print("Qual o valor do produto? ");
valor = input.nextDouble();
valor = valor + 25.00;
System.out.print(valor);
}
}
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).