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

Não compila com false e retornar outra mensagem

Quando coloco um funcionário f3 para no método contem ele retorna um erro. Vi em outras perguntas que esse erro aparece porque não inicializei o f3. Mas tem como retornar alguma mensagem quando colocar qualquer outra coisa sem ter que inicializar? Outra coisa, como substituo o "true" que aparece quando o funcionário existe por uma outra mensagem como "Funcionário existente"?

public class Data {
    int dia, mes, 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;
    }   
}

public class Funcionario {
    String nome;
    String departamento;
    double salario;
    double ganhoAnual;
    Data dataDeEntrada;

    void recebeAumento(double valor) {
        this.salario += valor; 
    }

    public double calculaGanhoAnual() {
        return this.salario * 12;
    }

    void mostra() {
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salário: " + this.salario);
        System.out.println("Ganho anual: " + this.calculaGanhoAnual());
        System.out.println("Data de entrada: " + this.dataDeEntrada.getFormatada() + "\n");


    } 
}

public class Empresa {
    String nome;
    int cnpj;
    Funcionario[] funcionarios;
    int livre = 0;

    void adicionar(Funcionario f) {
        this.funcionarios[this.livre] = f;
        this.livre++;
    }

    void mostraFuncionarios() {
        for(int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            System.out.println("R$" + this.funcionarios[i].salario);
        }
    }

    void mostraTodasAsInformacoes() {
            for(int i = 0; i < this.livre; i++) {
            System.out.println("Id: " + i);
            this.funcionarios[i].mostra();
        }
    }

    boolean contem(Funcionario f) {
        for (int i = 0; i < this.livre; i++) {
            if (f == this.funcionarios[i]) {
            return true;
            }
        }
        return false;
    }

}

public class TestaEmpresa {
    public static void main(String[] args) {
        Empresa neowix = new Empresa();
        neowix.funcionarios = new Funcionario[10];


        Funcionario f1 = new Funcionario();
        f1.nome = "Marcelo";
        f1.departamento = "TI";
        f1.salario = 1000;
        f1.dataDeEntrada = new Data();
        f1.dataDeEntrada.dia = 13;
        f1.dataDeEntrada.mes = 10;
        f1.dataDeEntrada.ano = 1981;
        neowix.adicionar(f1);

    Funcionario f2 = new Funcionario();
        f2.nome = "Adriana";
        f2.departamento = "TI";
        f2.salario = 2000;
        f2.dataDeEntrada = new Data();
        f2.dataDeEntrada.dia = 14;
        f2.dataDeEntrada.mes = 11;
        f2.dataDeEntrada.ano = 1985;
        neowix.adicionar(f2);


        neowix.mostraTodasAsInformacoes();

        System.out.println(neowix.contem(f2));

    }  
}
7 respostas

Você poderia colocar o erro que ocorreu aqui pra gente poder analisar melhor? =)

System.out.println(neowix.contem(f3));

Erro:

run: Id: 0 Nome: Marcelo Departamento: TI Salário: 1000.0 Ganho anual: 12000.0 Data de entrada: 13/10/1981

Id: 1 Nome: Adriana Departamento: TI Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: Salário: 2000.0 Ganho anual: 24000.0 Data de entrada: 14/11/1985

at aula3.TestaEmpresa.main(TestaEmpresa.java:46) /home/marcelo/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java returned: 1 FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

Marcelo, não tem como pois f3 ainda não é um Funcionário e o parâmetro do método contem só permite a entrada de referências a Funcionario, este erro já ocorre em tempo de compilação, quando começar a utilizar IDE's verá que ao informar no parâmetro do método algum tipo que não seja Funcionario a linha do código ficará sublinhada e não permitirá você executar.

Referente a outra duvida da mensagem é possivel basta colocar System.out.println acima dos retornos conforme abaixo:

boolean contem(Funcionario f) { for (int i = 0; i < this.livre; i++) { if (f == this.funcionarios[i]) { System.out.println("Contem Funcionário"); return true; } } System.out.println("Não contem o funcionário"); return false; }

Na classe TestaEmpresa basta chamar o método contem diretamente ao inves de utilizar o println.

neowix.contem(f2);

Espero ter ajudado!

Marcelo, desculpe não havia formatado a mensagem segue o código novamente para imprimir a mensagem.

boolean contem(Funcionario f) { for (int i = 0; i < this.livre; i++) { if (f == this.funcionarios[i]) { return true; } } return false; }

solução!
boolean contem(Funcionario f) {
        for (int i = 0; i < this.livre; i++) {
            if (f == this.funcionarios[i]) {
                System.out.println("Contem Funcionário");
            return true;
            }
        }
        System.out.println("Contem Funcionário");
        return false;
    }

Entendi. Só não faz muito sentido você ter que saber se o funcionário existe para procurar se ele existe ou não.

boolean contem(Funcionario f) {
        for (int i = 0; i < this.key; i++) {
            if (f == this.funcionario[i]) {
                System.out.println("Contem Funcionário");
                return true;
            }
        System.out.println("Nao contem Funcionário");
        return false;
        }
  }


}