Duvida Array

Pessoal , estou aprendendo um pouco de java com a FJ-11 da Caelum e estou com duvidas nos arrays

Pq toda vez que rodo esse codigo ele da NullPointer?o campo saldo esta populado e o espaço[0] do array tbm.

Obrigado pela ajuda.

public class Programa {
public static void main(String[] args) {
Conta[] minhasContas;
minhasContas = new Conta[10];

	Conta minhaConta;
	minhaConta= new Conta();
	Cliente JP;
	JP = new Cliente();
	minhaConta=minhasContas[0];
	minhaConta.titular=JP;
	minhaConta.titular.nome="Joao";
	minhaConta.titular.sobrenome="Paulo";
	minhaConta = new Conta();
	minhaConta.saldo = 950000;
	minhaConta.numero = 001;
	System.out.println(minhasContas[0].saldo);
	
	
	
}

}

minhasContas = new Conta[10]; 

Isto somente cria um array de Conta de 10 elementos vazios. Você tem de preencher com os valores adequados.

Eu costumo fazer uma comparação com uma caixa de ovos.

A fábrica de caixas de ovos faz o seguinte:

Ovo[] caixa = new Ovo[12]; // cria uma caixa que pode conter até 12 ovos, mas a caixa está vazia

A galinha, por sua vez, faz o seguinte:

Ovo ovo = new Ovo();

E o granjeiro (o dono da galinha), que vai juntar vários ovos e vendê-los em caixas para o supermercado, faz o seguinte:

caixa[0] = ovo;

Quando você vai fazer um ovo frito, você faz algo como:

Ovo ovo = caixa [0];
fritar (ovo);

Oi!

Antes de mais nada, sempre poste código usando as tags code, ok?
Sobre o seu erro, veja essa linha:

minhaConta=minhasContas[0]; 

Tens certeza que foi populado a posição 0 do array?
Eu acho que seria esse o seu código:

[code]public class Programa {
public static void main(String[] args) {
Conta[] minhasContas = new Conta[10];

Conta minhaConta= new Conta();
Cliente JP = new Cliente();
minhaConta.titular=JP;
minhaConta.titular.nome=“Joao”;
minhaConta.titular.sobrenome=“Paulo”;

minhasContas[0] = minhaConta;

minhaConta = new Conta();
minhaConta.saldo = 950000;
minhaConta.numero = 001;

minhasContas[1] = minhaConta;
System.out.println(minhasContas[0].saldo);
}

} [/code]

Algo assim.
Só uma observação, use encapsulamento para acessar suas variavéis, para este caso em particular.
Os famoso getters e setters e não faça o acesso direto como minhasContas[0].saldo, seria minhasContas[0].getSaldo();

Abraços.

Em C++ as coisas são um pouco diferentes, porque a divisão de tarefas é um pouco difusa. E é por isso que o Java não faz as coisas iguaizinhas ao C++ porque é realmente confuso.

Você pode ter algo como:

Ovo caixa[12];

Em C++ isso junta as responsabilidades da galinha (que é a de fabricar o ovo) e a da fábrica de caixas de ovos (que é a de fazer a caixa). Para tornar isso mais confuso ainda, a caixa de ovos (o array) não tem um indicador de tamanho intrínseco (ou seja, se você receber essa caixa de ovos como parâmetro, não sabe qual é o tamanho dela, se tem 12 ou 20 ovos). Você só tem a indicação de onde a caixa começa, mas não onde a caixa termina.

Segue um código comentado para lhe ajudar.

public class Array {
	public static void main(String[] args) {
		//Criando Vetor
		Objeto [] vetor = new Objeto [5];
		//Este for cria objetos e aloca na posição [i], até o final do vetor.
		for (int i = 0; i < vetor.length; i++) {
			vetor[i]= new Objeto();
		}
		//Essa parte altera o nome que é um atributo da classe Objeto.
		vetor[0].nome="Teste1";
		vetor[1].nome="Teste2";
		vetor[2].nome="Teste3";
		vetor[3].nome="Teste4";
		vetor[4].nome="Teste5";
		//Esse for mostra todos os atributos "nome" dos objetos do vetor.
		for (int i = 0; i < vetor.length; i++) {
			System.out.println(vetor[i].nome);
		}
	}
}

FLW

Olá,
Coloquei alguns comentários em seu código para lhe ajudar a entender o que está errado.
Basicamente você tentou acessar um objeto que não existe. O que existe é uma variável de referencia que por enquanto não aponta para lugar algum. 8)

[code]public class Programa {
public static void main(String[] args) {
Conta[] minhasContas;
minhasContas = new Conta[10];// Aqui você cria uma “caixa” com capacidade para armazenar 10 objetos Conta. Observe que você ainda não tem nenhum objeto Conta, somente a “caixa” para armazena-los.
Conta minhaConta;
minhaConta= new Conta(); // Aqui você realmente cria um Objeto Conta;
Cliente JP;
JP = new Cliente();
minhaConta=minhasContas[0];//Aqui você pega o que tem na sua caixa , que por enquanto é null, e coloca na variável minha conta. Agora sua variável minhaConta tem um null e não um objeto Conta;
minhaConta.titular=JP; // Aqui você está fazendo null.titular=JP, por isso é gerada a exception.
minhaConta.titular.nome=“Joao”;
minhaConta.titular.sobrenome=“Paulo”;
minhaConta = new Conta();
minhaConta.saldo = 950000;
minhaConta.numero = 001;
System.out.println(minhasContas[0].saldo);

}

}[/code]

Espero ter ajudado;

Abraços;

Opa muito obrigado, consegui resolver

minhaConta=minhasContas[0]; 

passei apra

minhasContas[0]=minhaConta;

Mto obrigado,quanto a encapsulamento ainda não cheguei nesta parte da apostila ^^

eu não entendi a parte do null titular na linha

minhaConta.titular=JP;

alguem poderia me explicar oque esta errado?

Oi!

O que quiseram explicar foi que você tinha uma referência de um Objeto nula e tentava executar alguma ação com ele.
Você tinha uma referência nula e tentava, nesse caso, acessar a variavél titular, fazendo:

minhaConta.titular=JP; 

Como a referência minhaConta é nula, seria o mesmo que:

null.titutal = JP;

Pois estava errado como foi demonstrado :slight_smile:
Abraços.

A entendi ,muito obrigado ^^