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]
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]
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());
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]
Também fiz assim e não dá erro, mas o valor fica zerado:
[code]
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);
}
}[/code]
[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]