pessoal, depois de muito tempo estou desenferrujando os conhecimentos sabre Java, nossa, como ficar sem estudar enferruja.
Bem, sei que a dúvida é meio trivial, mas não estou entendendo uma coisa, apesar do exemplo estar funcionando bem.
Seguinte, estava revendo alguns tópicos com o livro do Deitel, e no capítulo 6 deparei-me com um exemplo sobre sobrecarga de métodos. Achei muito simples e resolvi mudar.
As classes estão abaixo, desconsiderem os três primeiros métodos da classe MethodOverload:
package packageSobrecarga;
public class MethodOverload
{
public void testOverloadMethods()
{
System.out.printf("Square of integer 7 is %d\n", square(7));
System.out.printf("Square of double 7,5 is %4.2f\n", square(7.5));
} // Fim do método testOverloadMethods
public int square( int intValue)
{
System.out.printf("\nCalled square with int argument: %d\n", intValue);
return intValue*intValue;
}
public double square(double doubleValue)
{
System.out.printf("\nCalled square with double value: %f\n", doubleValue);
return doubleValue*doubleValue;
}
public float calculaSalario(float salario, float premio)
{
float vencimento;
vencimento = salario + premio;
return vencimento;
}
public float calculaSalario(float salario, float vendas, float premio)
{
float vencimento;
vencimento = salario + 0.05f*vendas + premio;
return vencimento;
}
public float calculaSalario(float salario, float vendas, float premio, float premioGerente)
{
float vencimento;
vencimento = salario + 0.15f*vendas + premio + premioGerente;
return vencimento;
}
}
package packageSobrecarga;
import java.util.Scanner;
public class MethodOverloudTest
{
static float salarioFunc;
static float salarioGerente;
static float salarioVendedor;
static float premioGerente;
static float premioFunc;
static float premioVendedor;
static float vendasVendedor;
static float vendasGerente;
static float premio;
Scanner input = new Scanner(System.in);
MethodOverload methodOverload = new MethodOverload();
public static void main(String[] args)
{
// Cria objeto da classe MethodOverloudTest
MethodOverloudTest chamaMetodo = new MethodOverloudTest();
// Invoca método salarioFunc
chamaMetodo.salarioFunc();
// invoca método salarioVendedor
chamaMetodo.salarioVendedor();
// Invoca método salarioGerente
chamaMetodo.salarioGerente();
}
// Método para se calcular o salário do funcionário
public void salarioFunc()
{
System.out.println("Informe o salário do funcionário:");
salarioFunc = input.nextFloat();
System.out.println("Informe o prêmio do funcionário:");
premioFunc = input.nextFloat();
// Invoca método da classe MethodOverload para se calcular o salário do funcionário
float salFunc = methodOverload.calculaSalario(salarioFunc, premioFunc);
// Exibe o salário do funcionário
System.out.println("O salário do funcionário é: " + salFunc);
}
// Invoca método para se calcular o salário do vendedor
public void salarioVendedor()
{
System.out.println("Informe o salário do vendedor:");
salarioVendedor = input.nextFloat();
System.out.println("Informe o prêmio do vendedor:");
premioVendedor = input.nextFloat();
System.out.println("Informe as vendas do vendedor:");
vendasVendedor = input.nextFloat();
// Invoca método da classe MethodOverload para se calcular o salário do vendedor
float salVend = methodOverload.calculaSalario(salarioVendedor, vendasVendedor, premioVendedor);
// Exibe o salário do vendedor
System.out.println("O salário do vendedor é: " + salVend);
}
public void salarioGerente()
{
System.out.println("Informe o salário do gerente:");
salarioGerente = input.nextFloat();
System.out.println("Informe o prêmio");
premio = input.nextFloat();
System.out.println("Informe o prêmio do gerente:");
premioGerente = input.nextFloat();
System.out.println("Informe as vendas do gerente:");
vendasGerente = input.nextFloat();
float salGer = methodOverload.calculaSalario(salarioGerente, vendasGerente, premio, premioGerente);
// Exibe o salário do gerente
System.out.println("O salário do gerente é: " + salGer);
}
}
Bem, como disse, está funcionando bem, mas minha dúvida é na entrada dos dados floats. Devo usar a vírgula como separador de ponto decimal, mas o formato americano faz isso com ponto, certo ? E devo usar o ponto para separar os milhares, mas o formato americano faz isso com a vírgula, certo ?
A seguir mostro a entrada e a saída de um teste que fiz:
Informe o salário do funcionário:
4.750
Informe o prêmio do funcionário:
650,98
O salário do funcionário é: 5400.98
Informe o salário do vendedor:
7.654,97
Informe o prêmio do vendedor:
1.123,80
Informe as vendas do vendedor:
45.654,75
O salário do vendedor é: 11061.508
Informe o salário do gerente:
12.345,98
Informe o prêmio
1.200,00
Informe o prêmio do gerente:
1.345,80
Informe as vendas do gerente:
150.563,34
O salário do gerente é: 37476.285
Notem que na saída o aplicativo mostra os resultados no formato americano, ou seja, o separdaor de ponto decimal é o ponto (.) mesmo.
A minha dúvida está aí, na entrada devo usar um formato e na saida ele apresenta em outro.
Notem agora o erro que ocorre quando tento usar o ponto na entrada de dados para a variável prêmio do funcionário. A entrada e a saída é a seguinte:
Informe o salário do funcionário:
2.345,65
Informe o prêmio do funcionário:
245.76
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.nextFloat(Unknown Source)
at packageSobrecarga.MethodOverloudTest.salarioFunc(MethodOverloudTest.java:44)
at packageSobrecarga.MethodOverloudTest.main(MethodOverloudTest.java:27)
Alguém pode explicar isso, por favor ?
Agradecido desde já.