Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Exercício 6: Função Contem - Não compila quando é false

Amigos,

A função contem(argumento) deveria informar TRUE caso o argumento fosse encontrado e FALSE caso não fosse, porém, quando testo a função com um argumento que deveria retornar FALSE o código não compila com o seguinte erro:

1 error found: File: C:\Users\Lucas\Funcionários\TestaEmpresa.java [line: 43] Error: cannot find symbol symbol: variable lucass location: class TestaEmpresa

Segue o código:

class Data{
  int dia;
  int mes;
  int ano;

  void preencheData(int dia, int mes, int ano){
    this.dia = dia;
    this.mes = mes;
    this.ano = ano;
  }

  String getFormatada(){
    return this.dia + "/" + this.mes + "/" + this.ano;
  }
}
class Empresa{

  String nome;
  String cnpj;
  Funcionario[] empregados;

  int livre = 0;

  void adiciona(Funcionario f) {
    this.empregados[this.livre] = f;
    this.livre++;
  }

//  ADICIONA ALTERNATIVO
//  void adiciona(Funcionario f){
//    for(int i=0; i<empregados.length; i++){
//      if(this.empregados[i] == null){
//        this.empregados[i] = f;
//        break;
//      }
//    }
//  }

  void mostraEmpregados(){
    for(int i=0; i<this.livre; i++){
      if(empregados[i] != null){
        System.out.println("Posição " + i + ": " + empregados[i].salario);
      }
    }
  }

  void mostraTodasAsInformacoes(){
    for(int i=0; i<this.livre; i++){
      if(empregados[i] == null)
        continue;
      System.out.println("Posição " + i + ":");
      this.empregados[i].mostra();
    }
  }

  boolean contem(Funcionario f){
    for(int i=0; i<this.livre; i++){
      if(f == this.empregados[i]){
        return true;
      }
    }
    return false;
  }
}
class Funcionario{
  String nome;
  String departamento;
  double salario;
  Data dataDeEntrada;
  String rg;

  void recebeAumento(double valor){
    System.out.println("Antigo salário: " + this.salario);
    this.salario += valor;
    System.out.println("Novo salário: " + this.salario + "\n");
  }

  void calculaGanhoAnual(){
    System.out.println("Salário anual: " + this.salario * 12 + "\n");
  }

  void mostra(){
    System.out.println("Nome: " + this.nome);
    System.out.println("Departamento: " + this.departamento);
    System.out.println("Salário: " + this.salario);
    System.out.println("Entrada: " + this.dataDeEntrada.getFormatada());
    System.out.println("RG: " + this.rg + "\n");
  }

}
class Programa{

  public static void main(String[] args){

    Funcionario lucas = new Funcionario();
    lucas.nome = "Lucas";
    lucas.departamento = "Coordenação de TI";
    lucas.salario = 1000;
    lucas.rg = "11.111.111";
    lucas.dataDeEntrada = new Data();
    lucas.dataDeEntrada.preencheData(11, 11, 1111);

    lucas.recebeAumento(500);
    lucas.calculaGanhoAnual();
    lucas.mostra();
  }
}
class TestaEmpresa{
  public static void main(String[] args){

    Funcionario lucas = new Funcionario();
    lucas.nome = "Lucas";
    lucas.departamento = "Coordenação de TI";
    lucas.salario = 1000;
    lucas.rg = "11.111.111";
    lucas.dataDeEntrada = new Data();
    lucas.dataDeEntrada.preencheData(11, 11, 111);

    Funcionario franci = new Funcionario();
    franci.nome = "Franci";
    franci.departamento = "Coordenação de RH";
    franci.salario = 2000;
    franci.rg = "22.222.222";
    franci.dataDeEntrada = new Data();
    franci.dataDeEntrada.preencheData(22, 22, 2222);

    Funcionario antonio = new Funcionario();
    antonio.nome = "Antonio";
    antonio.departamento = "Coordenação de Compras";
    antonio.salario = 3000;
    antonio.rg = "33.333.333";
    antonio.dataDeEntrada = new Data();
    antonio.dataDeEntrada.preencheData(33, 33, 3333);

    Empresa empresa = new Empresa();
    empresa.empregados = new Funcionario[10];

    empresa.adiciona(lucas);
    empresa.adiciona(franci);
    empresa.adiciona(antonio);

//    System.out.println(empresa.empregados[0].nome);
//    System.out.println(empresa.empregados[1].nome);
//    System.out.println(empresa.empregados[2].nome);

//    empresa.mostraEmpregados();

//    empresa.mostraTodasAsInformacoes();

    System.out.println(empresa.contem(lucasssss));
  }
}
2 respostas
solução!

Cara, o problema é que você não inicializou o funcionário lucasssss ai no final, o método contem() recebe um funcionário e compara pra ver se esse funcionário está dentro do Array empregados, como você não inicializou ele a variável lucasssss não é nada além uma palavra solta dentro do código, só mudar o final do seu código do TestaEmpresa para:

Funcionario lucasssss = new Funcionario();
        System.out.println(empresa.contem(lucasssss));

Espero ter conseguido explicar, qualquer coisa só voltar por aqui.

Entendi! Eu tinha interpretado errado. Não achava que necessariamente o argumento passado deveria ser um Funcionario, mas agora vi que sim.

Obrigado!