Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luthien

Null Pointer: Chamar um método de outra classe como paramentro

Recommended Posts

Tinha q criar uma classe com o construtor e com os métodos pra adicionar,imprimir, etc. Mas na hora q vou chamar o método pra adicionar empregados da null pointer exception:

import java.util.Scanner;

import br.ufop.ex1.Empregado;

public class SetorPessoal {
	static Scanner in = new Scanner (System.in);
	Empregado vet[];
	int qtd;
	
	public SetorPessoal(int qtd){
		setQtd(qtd);
		vet = new Empregado[qtd];
	}
	
	public SetorPessoal(){
		
	}
	
	public Empregado[] getVet() {
		return vet;
	}

	public void setVet(Empregado[] vet) {
		this.vet = vet;
	}

	public int getQtd() {
		return qtd;
	}

	public void setQtd(int qtd) {
		this.qtd = qtd;
	}
	
	public Empregado[] adicionaEmpregado(){
		for(int i = 0; i < vet.length; i++){
			vet[i] = new Empregado();
			System.out.println("Informe o nome do funcionário "+(i+1));
			vet[i].setNome(in.nextLine());
			
			System.out.println("Informe o cargo do funcionário "+(i+1));
			vet[i].setCargo(in.nextLine());
			
			System.out.println("Informe o código de departamento do funcionário"+(i+1));
			vet[i].setCoddep(in.nextInt());
			
			System.out.println("Informe o salário do funcionário "+(i+1));
			vet[i].setSalario(in.nextDouble());
		}
		return vet;
	}
	
	public void imprimeFolhaDePagamento(){
		for(int i = 0; i < vet.length; i++){
			System.out.println("Nome: do empregado: "+vet[i].getNome());
			System.out.println("Cargo do empregado: "+vet[i].getCargo());
			System.out.println("Código do departamento: "+vet[i].getCoddep());
			System.out.println("Salário do empregado: "+vet[i].getSalario());
		}
	}
	
	public double retornaValorTotal(){
		double total = 0;
		for(int i = 0; i < vet.length; i++)
			total += vet[i].getSalario();
		return total;
	}
	
	public String retornaMaiorSalario(){
		double aux = 0;
		String nome = null;
		for(int i = 0; i < vet.length; i++){
			if(vet[i].getSalario() > aux ){
				aux = vet[i].getSalario();
				nome = vet[i].getNome();
			}
		}
		return nome;
	}
	
	public void pesquisaPorCod(int codDep){
		System.out.println("FUNCIONÁRIOS DO DEPARTAMENTO");
		for(int i = 0; i < vet.length; i++){
			if(codDep == vet[i].getCoddep()){
				System.out.println("Nome: "+vet[i].getNome());
				System.out.println("Cargo: "+vet[i].getCargo());
			}
		}
	}
	
	public void pesquisaPorFuncao(String funcao){
		System.out.println("FUNCIONÁRIOS DA FUNÇÃO");
		for(int i = 0; i < vet.length; i++){
			if(funcao == vet[i].getCargo()){
				System.out.println("Nome do funcionário: "+vet[i].getNome());
			}
		}
	}
	
	public void imprimeOrdemCrescente(Empregado vet[]){
		double aux = 0;
		for(int i = vet.length-1; i >= 1; i--){  			 
		    for( int j=0; j < i ; j++) {		 
		    	if(vet[j].getSalario() >vet[j+1].getSalario()) {		 
		    		aux = vet[j].getSalario();//auxiliar recebe o maior salario
		    		vet[j].setSalario(vet[j+1].getSalario());//a posição anterior recebe o menor salario
		    		vet[j+1].setSalario(aux);//a proxima posição recebe o maior
		    	}
		    	System.out.println("Ordem crescente: "+vet[j].getNome());
		    }
		}
	}		
}
import java.util.Scanner;

public class SetorPessoalMain {
	static Scanner in = new Scanner(System.in);
	public static void main(String args[]){
		SetorPessoal SP[];
	
		System.out.println("Informe a quantiade de empregados que deseja cadastrar");
		int qtd = in.nextInt();
		SP = new SetorPessoal[qtd];
		
		for(int i = 0; i < qtd; i++){//da erro aqui
			SP[i] = new SetorPessoal();
			SP[i].adicionaEmpregado();
		}
	}
}

Desse jeito da o erro:

Exception in thread "main" java.lang.NullPointerException
at ufop.br.ex4.SetorPessoal.adicionaEmpregado(SetorPessoal.java:38)
at ufop.br.ex4.SetorPessoalMain.main(SetorPessoalMain.java:16)

 

 

já tentei de outro jeito, mas n da:

for(int i = 0; i < qtd; i++){
			SP[i] = new SetorPessoal();
			SP[i].setVet(adicionaEmpregado()[i]);
		}

assim, nem compila, da esse erro:

the method adicionaEmpregado() is undefined for the type SetorPessoalMain

eu teria que passar uma variável local como padrão? Como faço pra chamar o método q fiz na classe no main?

Compartilhar este post


Link para o post
Compartilhar em outros sites

No método adicionaEmpregado() que vc está chamando diretamente, vc chama o atributo length em uma referência nula (atributo vet da classe SetorPessoal). Vc tem que alocar espaço primeiro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu faço

vet = new Empregado[];

mas passo oq como parametro? eu testei com numero pra testar e rodou, mas n pode ser numero já q a quantidade de empregados vai ser definida pelo usuário

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.