Scanner - Erro usando nextDouble()

8 respostas
R

Olá pessoal
Estou fazendo um exercício básico e o mesmo está me retornando um erro, quando uso tipo double.
no caso quando digito o salário um valor inteiro, ele calcula correto, o problema é quando digito um salário fracionado, como
por exemplo: 850,75. Se digito com vírgula, ele aparece em branco, mas não dá erro.
Não deveria estar certo? Mesmo digitando com o ponto (850.75) não dá certo, ele causa uma exceção, que no caso não estou tratando.
Tem alguma coisa a ver com a formatação da saída?

import java.util.Scanner;

public class SalarioFuncionario {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String nome = "";
        double salario = 0.0;
        double totSalario = 0.0;
        double acrescimo = 0.0;
        System.out.println("Qual o nome do Funcionário?");
        nome = sc.next();
        System.out.println("Entre com valor do Salário");
        salario = sc.nextDouble();
        
        if (salario <= 150){
            acrescimo = salario * 0.25;
            totSalario = salario + acrescimo;
        }
        System.out.println("Nome: "+nome);
        System.out.println("Salário: "+totSalario);
        }
    }
[color=darkred]Erro:

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 SalarioFuncionario.main(SalarioFuncionario.java:13)

Java Result: 1[/color]

8 Respostas

R

Após ler alguns post aquí mesmo no GUJ, verifiquei que alguns tem dúvidas semelhantes, uns falam pra usar o Locale, tentei, mas agora dá outro erro:

[color=darkred]Exception in thread main java.lang.UnsupportedOperationException: Not yet implemented

at input.useLocale(input.java:16)

at SalarioFuncionario.main(SalarioFuncionario.java:7)

Java Result: 1[/color]

Alguém pode me ajudar?

F

So pra fazer um teste. Tente pegar primeiro o valor double e depois a string.

R
Erro:

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 SalarioFuncionario.main(SalarioFuncionario.java:13)

Java Result: 1

Tenta escrever o número com ponto em vez de vírgula… exemplo:

Escreva 80.90 em vez de 80,90

Outra coisa, sempre que uso a classe Scanner eu leio o dado como String (através do método nextLine() ) e depois o converto… tenta ver se isso te ajuda!

Scanner sc = new Scanner(System.in);
		System.out.print("Digite o valor: ");
		double valor = Double.parseDouble(sc.nextLine());

ok?

R

Olá, obrigado por ter respondido.
Fiz conforme falou, mas mesmo assim, ele continua dando erro, agora ele nem deixa digitar os valores.
Segue erro:

[color=red]Exception in thread main java.lang.NumberFormatException: empty String

at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:994)

at java.lang.Double.parseDouble(Double.java:510)

at SalarioFuncionario.main(SalarioFuncionario.java:13)

Java Result: 1[/color]
R

Exception in thread “main” java.lang.NumberFormatException: empty String

Tinha que limpar o buffer… utiliza a primeira dica que dei… escrever com “.” em vez de “,”… aqui funcionou!

R
Também fiz assim e não dá erro, mas o valor fica zerado:
import java.util.Scanner;

public class SalarioFuncionario {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String nome = "";
        String tempSal = "";
        double salario = 0.0;
        double totSalario = 0.0;
        double acrescimo = 0.0;
        System.out.println("Qual o nome do Funcionário?");
        nome = sc.next();
        System.out.println("Entre com valor do Salário");
        tempSal = sc.next();
        salario = Double.parseDouble(tempSal);
        if (salario <= 150){
            acrescimo = salario * 0.25;
            totSalario = salario + acrescimo;
        }
        System.out.println("Nome: "+nome);
        System.out.println("Salário: "+totSalario);
        }
    }

[color=blue]Resultado:
run:
Qual o nome do Funcionário?
Ronimarcos
Entre com valor do Salário
850.75
Nome: Ronimarcos
Salário: 0.0
CONSTRUÍDO COM SUCESSO (tempo total: 8 segundos)[/color]

R
public class SalarioFuncionario {  
    public static void main(String[] args) {  
        Scanner sc = new Scanner(System.in);  
        String nome = "";  
        
        double salario = 0.0;  
        double totSalario = 0.0;  
        double acrescimo = 0.0;  
        System.out.println("Qual o nome do Funcionário?");  
        nome = sc.nextLine();  //troque para nextLine
        System.out.println("Entre com valor do Salário");  
        salario = Double.parseDouble(sc.nextLine());   //faça assim
        
        if (salario <= 150){  
            acrescimo = salario * 0.25;  
            totSalario = salario + acrescimo;  
        }  
        System.out.println("Nome: "+nome);  
        System.out.println("Salário: "+totSalario);  
        }  
}
ou
public class SalarioFuncionario {  
    public static void main(String[] args) {  
        Scanner sc = new Scanner(System.in);  
        String nome = "";  
        
        double salario = 0.0;  
        double totSalario = 0.0;  
        double acrescimo = 0.0;  
        System.out.println("Qual o nome do Funcionário?");  
        nome = sc.nextLine();  //troque para nextLine
        System.out.println("Entre com valor do Salário");  
        salario = sc.nextDouble();   //ou assim
        
        if (salario <= 150){  
            acrescimo = salario * 0.25;  
            totSalario = salario + acrescimo;  
        }  
        System.out.println("Nome: "+nome);  
        System.out.println("Salário: "+totSalario);  
        }  
}
R

Putz, erro meu, desculpe.
Testei com o valor acima da condição.
Muito obrigado renamed.
Grande abraço.

Criado 9 de novembro de 2009
Ultima resposta 10 de nov. de 2009
Respostas 8
Participantes 3