[Resolvido] Exercicio Caelum FJ-11 - Arrays


    public class TestaEmpresa {  
        public static void main (String[] args){  
      
            Empresa empresa = new Empresa();          
              
            empresa.empregados = new Funcionario[5];  
              
            for (int i = 0; i < empresa.empregados.length; i++) {  
                Funcionario f = new Funcionario();   
                f.salario = 1000 + i * 100;  
                  
                //if temporario para testar o metodo contem  
                if (i == 0)               
                    f.rg="456456";  
                else  
                    f.rg="777";  
                  
                empresa.adiciona(f);  
                  
            }  
      
            // Como utilizo o metodo abaixo?  
            
           //essa hora vc precisa ter um outro objeto de Funcionario instanciado para pesquisar ....tente assim
           Funcionario testeFunc = new Funcionario();
           testeFunc.setRg("12345")// ou testeFunc.rg = "12345";
           sysout(empresa.contem(testeFunc));  
              
        }  
    }  

tente deixar o contem assim:

    boolean contem(Funcionario f){   
        boolean flag = false;   
           
        for (int i=0; i<this.controlador; i++){   
            if (this.empregados[i].rg.equals(f.rg)) // Não sei se esse codigo ta certo!   
                flag = true;                   
        }   
        return flag;   
    } 

e acho que o controlador estático fica meio estranho… você pode ter problemas se tiver mais de uma empresa.

edit: se decidir que quer deixar o controlador como estático… remova o ‘this’ no controlador dentro do for…

frostbyte…
Você está utilizando alguma IDE para desenvolver suas aplicações?
Elas te ajudam a identificar e corrigir erros básicos como de escopo de classe e chamada de métodos que as vezes passam despercebidos…

o problema é que quando ele está adicionando o f, ele logo depois chama o contem(), que corre o array todo pela sua propriedade length… que no caso é 5

então no momento ele está assim: array[f, null, null, null, null]

na hora em que ele testa o rg com o primeiro dado do array nenhum problema o corre… agora quando ele pergunta o rg do segundo dado que é um null… lança uma NullPointerException… por isso achei melhor ele usar o controlador… que quando adiciona 1 dado… vale 1… então testa o contem() em apenas um registro… e esse problema ja não ocorre mais

[quote]Exception in thread “main” java.lang.NullPointerException
at Empresa.contem(Empresa.java:35)
at TestaEmpresa.main(TestaEmpresa.java:26)[/quote]

Continua dando esse erro.

[quote]frostbyte…
Você está utilizando alguma IDE para desenvolver suas aplicações?
Elas te ajudam a identificar e corrigir erros básicos como de escopo de classe e chamada de métodos que as vezes passam despercebidos…[/quote]
Resposta: Eclipse

[quote]tente deixar o contem assim:

boolean contem(Funcionario f){     
    boolean flag = false;     
         
    for (int i=0; i<this.controlador; i++){     
        if (this.empregados[i].rg.equals(f.rg)) // Não sei se esse codigo ta certo!      
            flag = true;                     
    }     
    return flag;     
}   

e acho que o controlador estático fica meio estranho… você pode ter problemas se tiver mais de uma empresa.

edit: se decidir que quer deixar o controlador como estático… remova o ‘this’ no controlador dentro do for…[/quote]
Feito!

Funcionario testeFunc = new Funcionario(); testeFunc.setRg("12345")// ou testeFunc.rg = "12345"; sysout(empresa.contem(testeFunc));
Feitp

eu acabei de testar aqui… removendo o static de controlador… e trocando o ‘empregados.length’ por ‘this.controlador’

e rodou certinho…

Resultado:

[quote]contem funcionario
contem funcionario
contem funcionario
contem funcionario
contem funcionario
Funcionario: 456456
Funcionario: 777
Funcionario: 777
Funcionario: 777
Funcionario: 777
true
[/quote]

Pessoal, muitissimo obrigado pela sua ajuda e paciência!
Vocês foram de muita ajuda!

Eu devo colocar as classes aqui ? Não sei como é a regra do fórum…

Só coloque como resolvido no assunto do seu primeiro post!

Abraços!