Dúvida para implementar a classe Funcionário[RESOLVIDO]

15 respostas
jrbonilha

Oi Pessoal,

Estou estudando o básico do Java pela apostila da Caelum, e estou com uma dúvida quanto a como implementar a classe Funcionário, abaixo segue meu código para a classe:

//Montagem da classe Funcionario em Java

public class Funcionario
{
	double salario;
	String nome;
	String departamento;
	String dataDeEntrada;
	String RG;
	boolean estaNaEmpresa;

	public void AtendePessoas(boolean atendimento, boolean insatisfeito, boolean satisfeito)
	{
		     int qualidadeDoFuncionario = 0;

		    if (atendimento == true)
		    {
		    	if (satisfeito == true && insatisfeito == false)
		    	{
		    			System.out.println("Cliente Satisfeito");
		    			int qualidadeDoFuncionario = qualidadeDoFuncionario + 1;

		        }
		        else
		        {

			         System.out.println("Cliente Insatisfeito");
			         int qualidadeDoFuncionario = qualidadeDoFuncionario - 1;

		    	}

		    	else
		    	{
		    		System.out.println("Não teve atendimento");
		    	}


		    }


	}

	   public void Bonifica(double aumento)
	   {
	   	if (this.qualidadeDoFuncionario > 150)
	   	{
	   		salario= salario+aumento;
	   	}



	   }

	   public void Demite( )
	   {
	   	 if (this.qualidadeDoFuncionario < 50)
	   	 {
	   	 	System.out.println("Funcionario Demitido");

	   	 }
	   }


	}

Não estou conseguindo fazer implantação da rotina Bonifica, alguém poderia me dar uma luz para que eu possa fazer ela?

Agradeço desde já pela atenção

Abraços,
João Rafael.

15 Respostas

leobmx

só pra avisar o teu código não compila, você está criando a mesma variavel 2 vezes dentro do metodo AtendePessoas

Aqui você criou e inicializou

int qualidadeDoFuncionario = 0;

E dentro do if você criou denovo

int qualidadeDoFuncionario = qualidadeDoFuncionario + 1;

Vai estourar erro de variavel duplicada uma pergunta você está usando alguma IDE?

M

olha só… qdo comecei a aprender… tive as mesmas duvidas e mesmas difuculdades que você… postei varias vezes aqui no fórum, varias
veses me ajudaram…algumas não… então, vai ter que ler, procurar e estudar bastante !!rsrs …mas olha só seu codigo corrigido ( vou deixar alguns erros de proposito para vc olhar e tentar identificar onde esta ) alias ta meio confuso, não sei se você copiou errado ou não…mas enfim

public class Funcionario {
	double salario = 155.0;
	String nome;
	String departamento;
	String dataDeEntrada;
	String RG;
	boolean estaNaEmpresa;
	int qualidadeDoFuncionario;

	public void AtendePessoas(boolean atendimento, boolean insatisfeito,
			boolean satisfeito) {
		qualidadeDoFuncionario = 0;

		if (atendimento == true) {
			System.out.println("Cliente Satisfeito");

		} else {
			System.out.println("Cliente Insatisfeito");

		}
	}

	public void Bonifica(double aumento) {
		if (this.qualidadeDoFuncionario > 150) {
			salario = salario + aumento;
		}
		System.out.println("salario é " + salario);
	}

	public void Demite() {
		if (this.qualidadeDoFuncionario < 50) {
			System.out.println("Funcionario Demitido");

		}
	}

	public static void main(String[] args) {
		Funcionario func = new Funcionario();
		func.Bonifica(80);
		func.AtendePessoas(true, false, false);

	}
}

no construtor, esta passando os parametros atendimento, insatisfeito e satisfeito, sendo que o metodo atende pessoas ja
te retorna se o cliente esta insatisfeito ou nao !.. deixe desta ± asssim :

public class Funcionario {
	double salario = 155.0;
	String nome;
	String departamento;
	String dataDeEntrada;
	String RG;
	boolean estaNaEmpresa;
	int qualidadeDoFuncionario;

	public void AtendePessoas(boolean atendimento, boolean insatisfeito) {
		qualidadeDoFuncionario = 0;

		if (atendimento == true) {
			System.out.println("Cliente Satisfeito");

		} else {
			System.out.println("Cliente Insatisfeito");

		}
	}

	public void Bonifica(double aumento) {
		if (this.qualidadeDoFuncionario > 150) {
			salario = salario + aumento;
		}
		System.out.println("salario é " + salario);
	}

	public void Demite() {
		if (this.qualidadeDoFuncionario < 50) {
			System.out.println("Funcionario Demitido");

		}
	}

	public static void main(String[] args) {
		Funcionario func = new Funcionario();
		func.Bonifica(80);
		func.AtendePessoas(true, false);

	}
}

ainda tem codigo desnecessário nesse construtor … mas da uma lida melhor… tenta entender o que esta
sobrando…
outra coisa… implementei para voce o Main… pode rodar e ver o resultado. ou simplesmente, desconsidere !!!

Rodrigo_Sasaki

que construtor? :shock:

Rodrigo_Sasaki

Algumas dicas:

1 - nunca dê um nome para o método com a primeira letra em maiúsculo use demite() ao invés de Demite(), ou somarValor() ao invés de SomarValor()

2 - Produre identar seu código como o marcelo-rebello fez, não sei se você usa alguma IDE pra programar, mas elas normalmente fazem isso pra você, deixa seu código muito mais legível.

leobmx

ainda tem codigo desnecessário nesse construtor … mas da uma lida melhor… tenta entender o que esta
sobrando…

que construtor? você quis dizer as variaveis na assinatura do metódo?

M

ops… erro meu… no metodo AtendePessoas , os parametros que voce esta passando… tem coisa a mais e desnecessaria ai !!

jrbonilha

Obrigado Marcelo-Rebello, digaoneves pela ajuda e dicas, vou dar uma olhada no código para corrigir o mesmo, eu uso o JCreator para desenvolver, peço desculpas pelo código não ter sido copiado identado de forma correta, não imagino o porque, pois o mesmo está identado no JCreator.

Abraços,
João Rafael.

jrbonilha

Boa Tarde Pessoal,

Refiz o código depois das dicas de vocês, mas estou com uma dúvida, como faço para que o método bonifica() me retorne a bonificação para o funcionário de maneira correta de acordo com a condição existe com método atendePessoas()? Tentei de várias formas, com while, for e if mas não consigo implementar de maneira correta isso.

Abaixo o meu código fonte:

//Montagem da classe Funcionario em Java

public class Funcionario {
    double salario = 155.0;
    String nome;
    String departamento;
    String dataDeEntrada;
    String RG;
    boolean estaNaEmpresa;
    int qualidadeDoFuncionario;

    public void atendePessoas(boolean atendimento, boolean satisfeito) {
        qualidadeDoFuncionario = 0;

        while (qualidadeDoFuncionario < 350 && atendimento == true) {
        	if ( satisfeito == true){
        	qualidadeDoFuncionario = qualidadeDoFuncionario + 1;
            System.out.println("Cliente Satisfeito");

        	} else {
            qualidadeDoFuncionario = qualidadeDoFuncionario - 1;
            System.out.println("Cliente Insatisfeito");
        }
            atendimento = false;
       }
    }

    public void bonifica(double aumento) {
        if (this.qualidadeDoFuncionario > 150) {
             salario = salario + aumento;
        }
        System.out.println("salario é " + salario);
    }

    public void demite() {
        if (this.qualidadeDoFuncionario < 50) {
            System.out.println("Funcionario Demitido");

        }
    }

}

// Classe para testar a classe Funcionario

public class TestaFuncionario{
	public static void main (String [] args){
		Funcionario Rafael = new Funcionario();
		Rafael.bonifica(80);
		Rafael.atendePessoas(true, true);

		}
}

Agradeço desde já pela ajuda e obrigado aos mantenedores deste fórum que é muito útil para nós iniciantes.

João Rafael.

Rodrigo_Sasaki

Cara, não entendi muito bem. Tente explicar melhor o que você quer que aconteça, como você quer que o seu método atendePessoas() altere a execução do método bonifica() ?

jrbonilha

Rodrigo,

O que não estou conseguindo implementar é que se o critério que está no método atendePessoas() seja verificado pelo método bonifica() e em caso de as condições sejam corretas, bonifica() altere o salario com a bonificação. Isso não está acontecendo e não estou conseguindo fazer com que bonifica() faça essa verificação.

Obrigado desde já pela ajuda.

Abraços,
João Rafael.

Rodrigo_Sasaki

seu método atendePessoas está com um comportamento estranho.

se satisfeito for true, ele entra em um loop e fica nele até que qualidadeDoFuncionario seja igual a 350.
agora se satisfeito for false, você entra em um loop infinito, pois a condição do loop será sempre verdadeira.

e sempre que ele é executado a sua variável é zerada também, não creio que esse método esteja se comportando como você quer, o que ele deveria estar fazendo ?

jrbonilha

Rodrigo,

O método atendePessoas() deveria de acordo com as condições definidas incrementar ou decrementar a variável qualidadeDoFuncionario para que a mesma possa ser usada como condição para o método bonifica(). Mas não está fazendo isso.

Vou fazer uma nova análise no código para corrigir isso e fazer com que ele faça o que eu preciso.

Abraços,
João Rafael.

M

jrbonilha ! o erro ta aqui :
se qualidadeDoFuncionario for maior que 150 vai, adicionar o aumento, como qualidadeDeFuncionario até o inicio do método bonifica
é 0 , então ele não vai adicionar para voce o salario + o aumento, porque no seu main, vc esta primeiro rodando metodo bonifica . como voce poderia fazer ! inverte seu main, executa primeiro método atendePessoas, e depois
o método bonifica ! vai ver que vai dar certo ! porque ? a variavel qualidadeDoFuncionario, vai entrar dentro do if do metodo bonifica !!! desde que ela esteja maior que 150, logo no inicio do
método atendePessoas ! deu para entender ?

public void atendePessoas(boolean atendimento, boolean satisfeito) {
		qualidadeDoFuncionario = 0;

		while (qualidadeDoFuncionario < 350 && atendimento == true) {
			if (satisfeito == true) {
				qualidadeDoFuncionario = qualidadeDoFuncionario + 1;
				System.out.println("Cliente Satisfeito");

			} else {
				qualidadeDoFuncionario = qualidadeDoFuncionario - 1;
				System.out.println("Cliente Insatisfeito");
			}
			atendimento = false;
		}
	}
public void bonifica(double aumento) {
				
		if (this.qualidadeDoFuncionario > 150) {     
			 
			
			salario = qualidadeDoFuncionario + salario + aumento;
		}
		System.out.println("salario é " + salario);
	}
jrbonilha

Obrigado pessoal,

Agora funcionou, valeu pela ajuda.

Abraços,
João Rafael.

A

Não sei se eu posso falar isso, mas…

jrbonilha, clica em editar no primeiro post e adiciona a tag [RESOLVIDO] no final da pergunta pra que as pessoas saibam que o problema foi resolvido.

Criado 17 de maio de 2012
Ultima resposta 22 de mai. de 2012
Respostas 15
Participantes 5