[RESOLVIDO] Dúvida em array

Boa noite, tive dúvidas em como passar um array de um construtor em outra classe, segue abaixo as três classes utilizadas. O objetivo é calcular o IMC de um conjunto de pessoas (ainda está na metade do código, pois parei nessa dúvida). No total são três classes, um para os dados de cada pessoa, outra para a instituição e outra para “juntar” as duas.

    public class Pessoasatt {

	String nome;
	String sexo;
	long cpf;
	float peso;
	float altura;
	
}
public class Instituicao {

	public int num=2;
	String nome;
	long cnpj;
	Pessoasatt p[]=new Pessoasatt[num];
	

	Instituicao(String nome, long cnpj){
		this.nome=nome;
		this.cnpj=cnpj;
		this.p=new Pessoasatt[num];
	}
	
}

E abaixo veio minha dúvida na realização do código:

public class Ex3att {

	public static int num=2;
	static String nome;
	static long cnpj;
	static Scanner input=new Scanner(System.in);
	static Instituicao insti=new Instituicao(nome,cnpj);
	public static void main(String[] args) {
		System.out.println("\t****Sistema de IMC***\n");
		System.out.println("\nInforme o nome da Empresa: ");
		insti.nome=input.nextLine();
		System.out.println("Informe o CNPJ:");
		insti.cnpj=input.nextLong();
		for(int i=0;i<num;i++) {
			System.out.println("Informe o nome da pessoa: ");
			insti.p[i].nome=input.nextLine();
			
		}
	}
}

Quando peço para pegar o nome da pessoa dá esse erro:

Exception in thread "main" java.lang.NullPointerException
	at exerciciosTreino/exerciciosStruct.Ex3.Ex3att.main(Ex3att.java:20)

Me ajudem por favor, pois comecei em c há um tempo e comecei com java por agora.

Se voce ja iniciou o array na declaracao, nao precisa inicializar ele no construtor. nem mesmo declarar. e voe nao esta colcando nada dentro do array. o que é para guardar nele? uma instituicao?

Ahh entendi, no array seriam colocados os dados de uma pessoa, fazendo o cadastro de várias pessoas. Então fiquei na dúvida de como coloco algo nele antes da entrada de dados pelo Scanner.

nome = scanner.readLine();
sexo = scanner.readLine();
...
Pessoa pessoa = new Pessoa(nome, sexo);
instituicao.adicionarPessoas(pessoa);

//na sua classe instituicao devera ter:
public void adicionarPessoas(Pessoa pessoa) {
    pessoas[pessoas.length()-1] = pessoa;
    num++;
}

nossa cara, me salvou. Brigadão

Boa Tarde!

dezin,

No caso da classe instituição você pode passar a quantidade de pessoas que você deseja informar os dados, lembrando que um construtor é útil para inicializar valores em um objeto. Você também pode criar um método que será responsável por adicionar o objeto pessoa ao array. Da mesma forma você poderá criar um método para imprimir a lista das pessoas da instituição.

Exemplo:

public class Instituicao {

private String nome;
private String cnpj;
private Pessoa[] lista;

public Instituicao(String nome, String cnpj, int numeroDePessoas) {
	this.nome = nome;
	this.cnpj = cnpj;
	this.lista = new Pessoa[numeroDePessoas];
}

    public void adicionarPessoa(int posicao, Pessoa pessoa) {

	lista[posicao] = pessoa;
}

    public void imprimirListaDePessoas() {

	StringBuilder sb = new StringBuilder();
	sb.append("::: DADOS DA INSTITUICAO :::\n");
	sb.append("Nome: " + nome + "\n");
	sb.append("CNPJ: " + cnpj + "\n\n");
	sb.append("::: LISTA DE PESSOAS :::\n");

	for (int i = 0; i < lista.length; i++) {
		sb.append(lista[i] + "\n");
	}

	System.out.println(sb.toString());

}

}

Obs: Você sobrescrever o método toString() na classe pessoa.
Exemplo:
@Override
public String toString() {
return “Nome: " + nome + " Sexo: " + sexo + " IMC = " + String.format(”%.2f", calcularIMC());
}

Na classe do programa onde você deverá instanciar o objeto instituicao, você pode usar um for para garantir que o total de pessoas não ultrapassará o limite do seu array, desta forma você evitará o Exception: java.lang.NullPointerException. Veja o exemplo abaixo:

public class ExercicioIMC {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Locale.setDefault(Locale.US);
	Scanner sc = new Scanner(System.in);

	System.out.print("Quantas pessoa(s) deseja informa? ");
	int n = sc.nextInt();

	System.out.println();
	System.out.println("::: DADOS DA INSTITUICAO :::");
	System.out.print("Nome: ");
	String nomeDaInstituicao = sc.next();
	System.out.print("CNPJ: ");
	String cnpj = sc.next();

	Instituicao instituicao = new Instituicao(nomeDaInstituicao, cnpj, n);

	System.out.println();
	System.out.println("::: Informe os dados da(s) Pessoa(s) :::");

	for (int i = 0; i < n; i++) {

		System.out.println("Pessoa #" + (i + 1) + " :");
		System.out.print("Nome: ");
		String nome = sc.next();
		System.out.print("Sexo (Feminina;Masculino): ");
		String sexo = sc.next();
		System.out.print("CPF: ");
		String cpf = sc.next();
		System.out.print("Peso: ");
		float peso = sc.nextFloat();
		System.out.print("Altura: ");
		float altura = sc.nextFloat();

                    // o i informa a posição em que o objeto pessoa deverá ser inserida no array.
		instituicao.adicionarPessoa(i, new Pessoa(nome, sexo, cpf, peso, altura));
	}

	System.out.println();
            // aqui você pode utilizar o método criado na classe instituicao para imprimir o seu array. 
	instituicao.imprimirListaDePessoas();

	sc.close();
}

}

Espero ter ajudo!

Brigadão cara, ajudou demais!!