Ajuda com copia de array entre classes

3 respostas
S

Pessoal, tenho uma classe que cria um array de objetos de outra classe, bom preciso passar esse array para uma outra classe que cuida de impressões deste array.

o codigo esta abaixo, mas ja tentei de tudo e continuo tendo o erro NullPointerExeption ou algo assim.

public class VisualizaFuncionario {

	public void Show()
	{
		//int arraylength = 
		AdicionaFuncionario newEmployee = new AdicionaFuncionario();
		Employee array[] = new Employee[newEmployee.getArrayLength()]; 
		array = newEmployee.getArray(); 
			
		int i = 0;
		while (i<array.length)
		{
			System.out.printf("\n%s\n%s",array[i],array[i].getPaymentAmount());
			i++;
		
		
		}
	}
	
	
	
}

ja tentei de tudo e não sei mais como fazer isso !!!

alguma ajuda ?

Ah, o metodo getArray, retorna o array da classe que eu quero, mas ele não vem...

segue o metodo.

public Employee[] getArray()
	{
		return Array;
	}

3 Respostas

BrunoBastosPJ

Cola todas as 3 classes… porque o erro deve estar na AdicionaFuncionario

S
import java.util.Scanner;


public class AdicionaFuncionario {
	
	private Scanner input = new Scanner(System.in);
	private String firstName;
	private String lastName;
	private String Cpf;
	private int day;
	private int month;
	private int year;
	private Date birthDate;
	private Employee Array[];
	private int i;
	private int j =0;
	
	
	public void Adiciona()
	{

		System.out.println("Entre com número de funcionarios a adicionar");
		i = Integer.parseInt(input.next());
		
		Array = new Employee[i];
	
		System.out.println("Entre com o primeiro nome do funcionario");
		firstName = input.next();
	
		System.out.println("Entre com o último nome do funcionario");
		lastName = input.next();
		
		System.out.println("Entre com o CPF do funcionario");
		Cpf = input.next();
		
		System.out.println("Entre com o dia aniversário do funcionario:");
			day = Integer.parseInt(input.next());
	
			System.out.println("Entre com o mês aniversário do funcionario:");
		month = Integer.parseInt(input.next());
	
		System.out.println("Entre com o ano aniversário do funcionario:");
		year = Integer.parseInt(input.next());
	
		birthDate = new Date(day, month, year);
	
		System.out.println("Escolha o tipo de funcionario a adicionar:");
		System.out.println("1. Comission Employee");
		System.out.println("2. Salary Employee");
		int choice = Integer.parseInt(input.next());
	
		switch (choice)
		{
		case 1:
			{
			AdicionaComissionEmployee();
			Menu menu = new Menu();
			menu.ShowMenu();
			}
		case 2:
			{
			AdicionaSalaryEmployee();
			Menu menu = new Menu();
			menu.ShowMenu();
			}
		
		default:
			{
			System.out.println("Valor invalido, por favor tente novamente.");
			Adiciona();
			}
		
		}

	}
	
	
	
	private void AdicionaComissionEmployee()
	{
		
		double comission;
		double grossSale;
	
		System.out.println("Entre com o valor total da venda do funcionario:");
		grossSale = Integer.parseInt(input.next());
		System.out.println("Entre com o valor da porcentagem de comissão do funcionario:");
		comission = Integer.parseInt(input.next());
	
	
		ComissionEmployee cemployee = new ComissionEmployee(firstName, lastName, Cpf,
				birthDate, comission, grossSale);
		
			if (j<Array.length)
			{
				Array[j]=cemployee;
				j++;
			}
		
	}
	
	private void AdicionaSalaryEmployee()
	{
		double salary;
		System.out.println("Entre com o valor do salario do funcionario:");
		salary = Integer.parseInt(input.next());
		
		SalaryEmployee semployee = new SalaryEmployee(firstName, lastName,
				Cpf, birthDate, salary);
			
		if (j<Array.length)
			{
				Array[j]=semployee;
				j++;
			}
		
	}
	
	public Employee[] getArray()
	{
		return Array;
	}
	public int getArrayLength()
	{
		return Array.length;
	}
}
BrunoBastosPJ

em primeiro lugar seu switch tem que ter um break; no final de cada case.

O problema no seu codigo é o seguinte:

seu array é definido como null por default na classe, e este array só é alimentado quando o método Adicionar() é chamado. Você pode ver isso nos métodos AdicionaComissionEmployee() e AdicionaSalaryEmployee(), que são privados, e são chamados nos cases do seu switch.

No seu código você está instânciando a classe AdicionaFuncionario, mas não está chamando o Adicionar() nestá instância. Por isso ela sempre retorna uma referência que referencia null. Por isso o NullPointerException. Segue o seu código modificado:

public class VisualizaFuncionario {

   public void Show()
   {
      //int arraylength =
      AdicionaFuncionario newEmployee = new AdicionaFuncionario();
      newEmploy.Adicionar();
      Employee array[] = new Employee[newEmployee.getArrayLength()];
      array = newEmployee.getArray();
         
      int i = 0;
      while (i<array.length)
      {
         System.out.printf("\n%s\n%s",array[i],array[i].getPaymentAmount());
         i++;
      
      
      }
   }
   
   
   
}
Criado 28 de março de 2007
Ultima resposta 29 de mar. de 2007
Respostas 3
Participantes 2