Não consigo digitar data de admissão

3 respostas
Paulo_Mour

Boa tarde Srs,

alguém poderia me informar onde estou errando ? Todas as linhas estão funcionando, exceto a linha 23 da classe com método MAIN. Eu não consigo fazer com que o programa disponibilize a data a ser digitado. Agradeço a atenção.
import java.util.Scanner;

public class Funcionario
{
	String nome;
	String depto;
	double salario;
	String dataAdmissao;
	String nroIdentidade;
	boolean status = true;
	
	Scanner entrada = new Scanner(System.in);

	public Funcionario(String nome, String depto, double salario, String dataAdm, String nroIdentidade)
	{
		this.nome = nome;
		this.depto = depto;
		this.salario = salario;
		dataAdmissao = dataAdm;
		this.nroIdentidade = nroIdentidade;
		//this.status = status;
	}

	public void setNome(String nm)
	{
		this.nome = nm;
	}
	public String getNome()
	{
		return nome;
	}

	public void setDepto(String dep)
	{
		this.depto = dep;
	}
	public String getDepto()
	{
		return depto;
	}

	public void setSalario(double salario)
	{
		this.salario = salario;
	}
	public double getSalario()
	{
		salario = (salario > 0.0) ? salario: 0.0;
		return this.salario;
	}

	public void setDataAdmissao(String dataAdm)
	{
		dataAdmissao = dataAdm;
	}
	public String getDataAdmissao()
	{
		return dataAdmissao;
	}

	public void setNroIdentidade(String nroIdentidade)
	{
		this.nroIdentidade = nroIdentidade;
	}
	public String getNroIdentidade()
	{
		return nroIdentidade;
	}
	
	public boolean Status()
	{
		int opcao = 0;
		
		System.out.println("Digite o status do funcionario: ");
		System.out.println("1- Ativo ou 2 - Demitido: ");
		opcao = entrada.nextInt();

		switch(opcao)
		{
			case(1):
				System.out.println("Funcionario ativo");
			break;

			case(2):
				System.out.println("Funcionario demitido");
			break;
			
			default:
				System.out.println("Opcao invalida");		
		}
		return status;
	}

	public void bonifica(double aumento)
	{
		
		double porcento = 0;
		System.out.println("Informe o percentual de aumento: ");
		porcento = entrada.nextDouble();
		
		double aumentaSalario = getSalario() + (getSalario() * porcento / 100);
		
		System.out.printf("Salário corrigido: R$ %.2f", aumentaSalario );
		
	}

	public void demite()
	{
		status = false;
	}

}
import java.util.Scanner;

public class FuncionarioTeste
{
	public static void main(String[] args)
	{
		Scanner entrada = new Scanner(System.in);

		Funcionario funcionario = new Funcionario("", "", 0, "", "");

		System.out.println("Digite o nome do funcionario: ");
		String nome = entrada.nextLine();
		funcionario.setNome(nome);

		System.out.println("Digite o departamento: ");
		String depto = entrada.nextLine();
		funcionario.setDepto(depto);

		System.out.println("Digite o salario mensal: ");
		double salario = entrada.nextDouble();
		funcionario.setSalario(salario);

		System.out.println("Informe a data de admissão: ");
		String dataAdm = entrada.nextLine();
		funcionario.setDataAdmissao(dataAdm);
		
		System.out.println("Digite a identidade: ");
		String rg = entrada.nextLine();
		funcionario.setNroIdentidade(rg);
		
		funcionario.bonifica(salario);

	}

}

3 Respostas

lina

Oi,

Ai esses Scanners!

Mude de nextLine() para apenas next() ao receber um String!

public static void main(String[] args)
	{
		Scanner entrada = new Scanner(System.in);

		Funcionario funcionario = new Funcionario("", "", 0, "", "");

		System.out.println("Digite o nome do funcionario: ");
		String nome = entrada.next();
		funcionario.setNome(nome);

		System.out.println("Digite o departamento: ");
		String depto = entrada.next();
		funcionario.setDepto(depto);

		System.out.println("Digite o salario mensal: ");
		double salario = entrada.nextDouble();
		funcionario.setSalario(salario);

		System.out.println("Informe a data de admissão: ");
		String dataAdm = entrada.next();
		funcionario.setDataAdmissao(dataAdm);
		
		System.out.println("Digite a identidade: ");
		String rg = entrada.next();
		funcionario.setNroIdentidade(rg);
		
		funcionario.bonifica(salario);

	}

Tchauzin!

Paulo_Mour

Obrigado Lina,

Funcionou. Poderia me dizer o motivo de não funcionar ?

Abs,

lina

Oi,

O Scanner é esquisito #Fato.

Acredito que o fato de usar o nextDouble() antes do nextLine() faz com que o Scanner se perde e pegue alguma linha nova que fugiu da função nextDouble() (um ENTER talvez).

Você poderia testar isso:
public static void main(String[] args)
	{
		Scanner entrada = new Scanner(System.in);

		Funcionario funcionario = new Funcionario("", "", 0, "", "");

		System.out.println("Digite o nome do funcionario: ");
		String nome = entrada.nextLine();
		funcionario.setNome(nome);

		System.out.println("Digite o departamento: ");
		String depto = entrada.nextLine();
		funcionario.setDepto(depto);

		System.out.println("Digite o salario mensal: ");
		double salario = entrada.nextDouble();
		funcionario.setSalario(salario);

System.in.reset(); 
		System.out.println("Informe a data de admissão: ");
		String dataAdm = entrada.nextLine();
		funcionario.setDataAdmissao(dataAdm);
		
		System.out.println("Digite a identidade: ");
		String rg = entrada.nextLine();
		funcionario.setNroIdentidade(rg);
		
		funcionario.bonifica(salario);

	}

Tchauzin!

Criado 16 de maio de 2011
Ultima resposta 16 de mai. de 2011
Respostas 3
Participantes 2