Exercicio Array - fj11

6 respostas
J

Oi pessoal, estou começando com java. Estou fazendo os exercícios da apostila FJ11 e não estou conseguindo achar onde está esse erro, preciso de ajuda.

Empresa.java

public class Empresa {
	public String nome;
	public String cnpj;
	public int i;
	public Funcionario[] empregados;
	
	public Empresa(int valor) {
		this.empregados = new Funcionario[valor];
	}
	
	
	
	
	public void adiciona(Funcionario f){
		   for (int i = 0; i < empregados.length;i++){  
		        if (this.empregados[i] == null) {  
		            this.empregados[i] = f;  
		            break;  
		        }  
		        else{  
		            System.out.println("Array cheia");  
		        }
		   }
	}
	
	
	public void mostraEmpregados(){
		for (int i = 0; i < empregados.length; i++){
			System.out.println("Funcionário na posição: "+i+this.empregados[i].nome);
		}
	}

}


TestaEmpresa.java

public class TestaEmpresa {
	
	public static void main(String[] args) {
		
		Empresa empresa = new Empresa(10);
				
		Funcionario f1 = new Funcionario();
		
		f1.nome ="Ana";
		f1.departamento = "Vendas";
		f1.salario = 1000;
		
		Funcionario f2 = new Funcionario();
		
		f2.nome ="José";
		f2.departamento = "Compras";
		f2.salario = 1000;
	
		empresa.adiciona(f1);
		empresa.adiciona(f2);
		
		empresa.mostraEmpregados();
	}

Quando rodo a aplicação, dá esse resultado:

Array cheia

Funcionário na posição: 0Ana

Funcionário na posição: 1José

Exception in thread main java.lang.NullPointerException

at br.com.juzachi.cinco.Empresa.mostraEmpregados(Empresa.java:31)

at br.com.juzachi.teste.TestaEmpresa.main(TestaEmpresa.java:28)

O que pode ser?

6 Respostas

guisantogui

Primeiro, no seu if que verifica se o array esta cheio você esta fazendo o mecanismo errado devia ser algo como

for(int i = 0, i<empregados.lenght; i++){ if(empregados[lenght -1] != null){ this.empregados[i] = f; // f passado por parametro } else Print ("array cheio");

no mostra empregados é soh uma concatenação de espaço em branco algo como:

public void mostraEmpregados(){   
        for (int i = 0; i >< empregados.length; i++){   
            System.out.println("Funcionário na posição: "+i+" - "+this.empregados[i].nome);   
        }   
    }

Acho q eh isso!

Edit!
Alias bem vindo ao forum! :wink:

J

Oi, não consigo escrever essa linha, o eclipse não deixa colocar o lenght dessa maneira, como eu faço?

if(empregados[lenght -1] != null){
guisantogui

sim sim

tente

empregados[empregados.lenght -1] != null

J

Não adiantou, se eu coloco != ele só mostra o resultado de array cheia, e quando voltei pra ==, ele continua dando o mesmo erro, mas mostra apenas o 2º funcionário.

[b]

Exception in thread main java.lang.NullPointerException

at br.com.juzachi.cinco.Empresa.mostraEmpregados(Empresa.java:32)

at br.com.juzachi.teste.TestaEmpresa.main(TestaEmpresa.java:27)

Funcionário na posição: 0José

[/b]
guisantogui

Isso eh problema de logica, to meio ocupado agora, mas posta todo teu codigo ai, se eu tiver um tempo eu do uma olhada!

CarvalR2

O problema estava no método adiciona e no método mostraEmpregados

adiciona:

  • caso encontre uma posicao vazia (ou melhor nula) no array de funcionario, adiciona o funcionario passado para o metodo nesta posicao.
  • caso rode todas as posicoes do array e nao encontre uma posicao vazia , ou nula, então mostra a mensagem que array esta cheio.
  • ao adicionar o funcionario no array, sai imediatamente do metodo, senao ele iria inserir o funcionario nas posicoes restantes do array.

mostraEmpregados:

  • O for deve considerar que pode haver uma posicao vazia no array, pois nem sempre estará cheio.
public class Empresa {   
    public String nome;   
    public String cnpj;   
    public int i;   
    public Funcionario[] empregados;   
       
    public Empresa(int valor) {   
        this.empregados = new Funcionario[valor];   
    }   

    public void adiciona(Funcionario f){   
           for (int i = 0; i < empregados.length;i++){     
                if (this.empregados[i] == null) {     
                    this.empregados[i] = f;     
                    return;
                }
           }   
           System.out.println("Array cheia");     
    }   
       
    public void mostraEmpregados(){   
        for (int i = 0; i < empregados.length; i++){
        	if (empregados[i] != null) {
        		System.out.println("Funcionário na posição: " + i + " - " + this.empregados[i].nome);
        	}
        }   
    }   
}
Criado 11 de junho de 2010
Ultima resposta 11 de jun. de 2010
Respostas 6
Participantes 3