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 
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. 