nextDouble() não aceita ponto?

5 respostas
G

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

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);
	}
}
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)

:roll: Estou entendendo algo errado?

5 Respostas

G

Nossa! Tá dificil de alguem solucionar este problema…

Ataxexe

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

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);
	}
}
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

Okay, realmente rodpuc .
Entretanto, só fiz uma suposição:

Criado 9 de maio de 2009
Ultima resposta 11 de mai. de 2009
Respostas 5
Participantes 3