Bom, primeiramente boa noite, venho aqui pedir ajuda para tirar uma dúvida.
— Ao executar uma série de instruções utilizando uma referencia"input" a um objeto do tipo Scanner, a JVM começa a “pular” algumas das instruções do Scanner, como ocorre de maneira semelhante em C, utilizando o scanf… em C a solução seria o fflush(stdin).
As soluções encontradas para resolver problema foram:
-
criar uma segunda referencia “input2” a um objeto do tipo Scanner.
O problema é que o primeiro Scanner ao ser utilizado sempre irá pular, como se ainda estivesse com a informação anterior no buffer. -
Scanner "pulando etapas"
Nesse post, um usuario faz descrição de um problema semelhante, porém com o tipo double e a solução recomendada é que em vez de chamar o método “setPreco” no caso assimprodutos.setPreco(scanner.nextDouble()); ele o faça da seguinte forma:
produtos.setPreco( Double.ParseDouble( scanner.nextLine()) );
Como aplicar a resolução para os outros tipos primitivos, como no caso em questão, String? -
Um nextLine com uma linha em branco. (Achei esse método muito "gambiarrento", mas aparentemente é o mais utilizado)
Já aproveitando o post, o que poderia ser melhorado no código?
import java.util.Scanner;
public class Funcionario {
Scanner input = new Scanner(System.in);
private String nome;
private String departamento;
private double salario;
private String dataAdmissao;
private String rg;
//Metodo responsavel por cadastrar cada funcionario
void cadastraFuncionario(){
System.out.println("Entre com o nome do funcionario: ");
setNome(input.nextLine());
System.out.println("Entre com o departamento do funcionario: ");
setDepartamento(input.nextLine());
System.out.println("Entre com o salario do funcionario: ");
setSalario(input.nextDouble());
System.out.println("Entre com a data de admissao do funcionario: ");
input.nextLine();
setDataAdmissao(input.nextLine());
System.out.println("Entre com o RG do funcionario: ");
setRG(input.nextLine());
}
public void setNome(String nome){
this.nome = nome;
}
public String getNome(){
return nome;
}
public void setDepartamento(String departamento){
this.departamento = departamento;
}
public String getDepartamento(){
return departamento;
}
public void setSalario(double salario){
this.salario = salario;
}
public double getSalario(){
return salario;
}
public void setDataAdmissao(String dataAdmissao){
this.dataAdmissao = dataAdmissao;
}
public String getDataAdmissao(){
return dataAdmissao;
}
public void setRG(String rg){
this.rg = rg;
}
public String getRG(){
return rg;
}
public void recebeAumento(double porcentoAumento){
double aumentoSalarial;
porcentoAumento /= 100;
aumentoSalarial = this.salario * porcentoAumento;
this.salario += aumentoSalarial;
}
public double calculaGanhoAnual(){
return this.salario *12;
}
}