Método que não recebe parâmetro e troque valor de variável

Código da classe Funcionário.
Não sei fazer o método demite trocar o valor da variável estaNaEmpresa.

class Funcionario {
	// Atributos da classe funcionarios.
	String nome;
	String depTrab;
	double salario;
	String dtAdm;
	String rg;
	boolean estaNaEmpresa;
	// fim atributos.
	
	void bonifica(double incentivo) {
		this.salario += incentivo;
	}
	
	boolean demite() {
		// nao sei o que colocar aqui.
		/*
		 * Nao sei o que colocar aqui, mas eu quero que o metodo
		 * troque o valor da variavel estaNaEmpresa.
		 * Detalhe: o metodo nao pode ter argumentos.
		 */
	}
}

Código da classe de Teste. Esse aqui está correto. Só coloquei terem uma leitura correta do todo.

class TestaFuncionario {
	public static void main(String[] args) {
		// Criando objeto Funcionario f1.
		Funcionario f1 = new Funcionario();
		
		// variavel de referencia f1 com atributos manipulados.
		f1.nome = "Jayme";
		f1.depTrab = "CDP";
		f1.salario = 20000.0;
		f1.dtAdm = "01/01/2010";
		f1.rg = "49.304.370-5";
		f1.estaNaEmpresa = true;
		
		
		
		//Teste de impressao da variavel de referencia f1.
		System.out.println(f1.nome);
		System.out.println(f1.depTrab);
		
		// invocacao do metodo bonifica em f1.
		f1.bonifica(2000);
		
		//Teste de impressao da variavel de referencia f1.
		System.out.println(f1.salario);
		System.out.println(f1.dtAdm);
		System.out.println(f1.rg);
		
		//Invocaçao do metodo demite em f1.
		//f1.demite();
		
		// Checahgem de status de funcionario f1.
		if (f1.estaNaEmpresa != false) {
			System.out.println("Ele nao trabalha mais na empresa!");
		}
			else {
				System.out.println("Ele trabalha na empresa!");
			}
		
		//Teste de impressao da variavel de referencia f1.
		System.out.println(f1.estaNaEmpresa);
	}
}

Como eu faço isso funcionar?

É apenas uma alteração, talvez você possa querer receber como argumento do método, um boolean que irá definir se o funcionário trabalha ou não, mas como, acredito eu, esse exercício ser o da apostila FJ-11 da Caelum, não há a necessidade de passar um argumento, portanto:

boolean demite() {  
       this.estaNaEmpresa = false;
}

Deva funcionar…

=)

Esse aqui já funcionou. Não tinha a necessidcade do condicional, mas eu queria brincar com o código.

Tem de ser void senão é obrigatório o retorno de valor. Valeu a ajuda aí.

void demite() {
		if (estaNaEmpresa != false){
			this.estaNaEmpresa = false;
		}
		else {
			this.estaNaEmpresa = true;
		}
class Funcionario {
	// Atributos da classe funcionarios.
	String nome;
	String depTrab;
	double salario;
	String dtAdm;
	String rg;
	boolean estaNaEmpresa;
	// fim atributos.
	
	// metodo para bonifica funcionario.
	void bonifica(double incentivo) {
		this.salario += incentivo;
	}
	//metodo para contratacao ou demissao de funcionario.
	void demiteOuContrata() {
		if (estaNaEmpresa != false){
			this.estaNaEmpresa = false;
		}
		else {
			this.estaNaEmpresa = true;
		}
	}
	
	// metodo para testar codigo.
	void mostra() {
		//Teste de impressao da variavel de referencia f1.
		System.out.println(nome);
		System.out.println(depTrab);
		System.out.println(salario);
		System.out.println(dtAdm);
		System.out.println(rg);
		// Checahgem de status de funcionario f1.
		if (estaNaEmpresa != false) {
			System.out.println("Ele nao trabalha mais na empresa!");
		}
			else {
				System.out.println("Ele trabalha na empresa!");
			}
		
		//Teste de impressao da variavel de referencia f1.
		System.out.println(estaNaEmpresa);
		
		if (f1 == f2) {
			System.out.println("f1 e f2 sao o mesmo funcionario!");
		}
		else {
			System.out.println("f1 e f2 sao funcionarios distintos!");
		}
	}
}

Como eu faço o código da linha 44-48 funcionar dentro dessa classe. Quero deixar os testes no metodo, não direto no main().
Está dando esse erro em f1 e f2:

f1 cannot be resolved to a variable

f2 cannot be resolved to a variable


Código da classe de teste de funcionario:

class TestaFuncionario {
	public static void main(String[] args) {
		// Criando objeto Funcionario f1.
		Funcionario f1 = new Funcionario();
		
		// variavel de referencia f1 com atributos manipulados.
		f1.nome = "Jayme";
		f1.depTrab = "CDP";
		f1.salario = 20000.0;
		f1.dtAdm = "01/01/2010";
		f1.rg = "49.304.370-5";
		f1.estaNaEmpresa = true;
		
		Funcionario f2 = new Funcionario();
		
		// variavel de referencia f2 com atributos manipulados.
		f2.nome = "Jayme";
		f2.depTrab = "CDP";
		f2.salario = 20000.0;
		f2.dtAdm = "01/01/2010";
		f2.rg = "49.304.370-5";
		f2.estaNaEmpresa = true;
		
		// invocando do metodo bonifica em f1.
		f1.bonifica(2000);
		
		//Invocando do metodo demite em f1.
		f1.demiteOuContrata();
		
		// invocando metodo mostra rm f1.
		f1.mostra();
	}
}

Oi

Esse seu método demite ou contrata poderia ficar simplesmente assim: (o seu também ficou correto, mas assim é bem mais simples, veja)

void demiteOuContrata() { estaNaEmpresa = !estaNaEmpresa; //Se estiver na empresa recebe false, senão recebe true ;P }

Para saber se são o mesmo funcionário ou não, voce deve implementar (na verdade sobrescrever, visto que já estão implementados em Object) o equals() e o hashcode()…

No seu caso, você não pode usar as variáveis f1 e f2 pq elas estão fora do escopo (o escopo delas é só o método main da classe TestaFuncionario), então na classe Funcionário, do jeito que está, o f1 será o próprio objeto (this) e f2 deve ser passado como parametro.

[]'s

Qual a função desse método mostra??

Eu poderia criar um atributo na classe Funcionario chamado:

TestaFuncionario titular1;

TestaFuncionario titular2;

para usar e comprar se as variáveis de referência f1 e f2 são as mesmas?

Você nunca compara objetos com ‘==’, sua classe precisa ter um método equals. Veja esse artigo: http://www.java-samples.com/showtutorial.php?tutorialid=660

É pequeno mas esclarecedor.

Gente, deixe eu recomeçar.
Eu sou novo em Java e estou seguindo a apostila FJ-11 da Caelum. Não sei nada sobre equals() ainda.

Olhem para os meu dois últimos código.

Eu criei o método mostra para não ter que ficar escrevendo no main toda hora para testar meu outros métodos e funcionalidades.

Eu já sei que f1 e f2 são distintos. Eu só queria fazer aquele if funcionar dentro do metodo mostra() pq no main ele já funciona. Então tem como vocês me mostrarem o código para funcionar dentro da classe?

Olhem os dois últimos códigos e me ajudem a fazer funcionar as linhas 44 até 48 da classe funcionário. Só isso.

Quem tem twitter olha isso: http://twitter.com/#!/sandra_anenberg

frase dela …

Humor: pena de urubo pena de galinha se você ja deu o bumbum de uma risadinha rsrs

Acho que o intuito aqui não é darmos o código pra fazer funcionar. É ajudar a você aprender e entender :wink:

Você chegou a ler algo sobre o método equals?

Qualquer dúvida posta ai!

Abraço!

Sim, eu li, mas se eu for por aí. vou pular etapas da apostila o que não seria bom para mim. Eu mal sei o que é uma Super classe, classe, sub-classe, objeto, atributos, métodos, visibilidade, herança e polimorfismo ( estive lendo sobre uml, a apostila pede).

Eu seu que se eu tivesse feito

f2 = f1 e usa apenas um new no inicio … ele seriam reconhecido pela classe como sendo os mesmo objetos pois ambos apontam para o mesmo endereço de memória e no caso do meu código não … apesar de seus atributos serem os mesmo, eles se encontram em posições de memória distintas.

Se eu tivesse feito o if da linha 44-48 no main da classe TestaFuncionario … ele já teria dado que são diferentes. minha dúvida era como fazer isso sem passar parâmetros. Eu só queria otimizar, não tendo que digitar System,out toda hora … mas agora eu já vou deixr para lá para não pular etapas … prefiro ir mais devagar e não voltar em coisas banais no futuro que fazer do meu estudo um io io.

Vlw gente e, drigo.angelo valeu pelo método demiteOuContra que tu reformulou … ficou sem 1 if e bem mais elegante. já mudei. :smiley: