public void ExcluirProduto(){
int cod = teclado.lerCodigoProduto();
int posOrig = 0;
Produto[] tmp = produto;
produto = new Produto[produto.length - 1];
for (int i = 0; i < tmp.length; i++){
if ( produto[i].getCod() != AcharProduto(cod).getCod() )
{
System.arraycopy(tmp, i, produto, posOrig, 1);
posOrig++;
}
}
Sou um principiante em java, estou com o seguinte problema, NullPointerException[RESOLVIDO]
10 Respostas
Por favor me ajudem…
Cara, poste o processo todo,
qual o caminho que sua aplicação esta fazendo, mostre o fluxo das chamadas dos métodos para ficar mais facil de entender.
Mas aparentemente o que esta acontecendo é que o produto esta nulo…pro seu método receber o parametro na assinatura…
esta confuso esse trecho de código.
Poste mais coisas do seu aplicativo.
Flw.
public Produto AcharProduto(int cod){
for (Produto atual : produto)
{
if ( atual.getCod() == cod)
{
return atual;
}//fim do if
}//fim do for
return null;
}//fim do metodo AcharProduto
//METODO PARA CADASTRAR UM NOVO PRODUTO
public void CadastrarNovoProduto(){
int pos = -1;
if ( produto == null)
{
produto = new Produto[1];
pos = 0;
}else{
//cria um array temporario e guarda os objetos produto
//para poder aumentar uma posicao no array produto
Produto[] tmp = produto;
//cria o array produto novamente com tamanho do array
//tmp + 1 , ou seja , aumenta o array uma posica
//para poder add mais um produto
produto = new Produto[ tmp.length + 1 ];
//copia o array tmp para o array produto e ajusta a
//variavel de gerenciamento de posicao pos do mesmo
//tamanho do array tmp, assim posdendo adicionar um
//novo produto na posicao que estara vazia
System.arraycopy(tmp, 0, produto, 0, tmp.length);
//ajusta a posicao correta
pos = tmp.length;
}//fim do else
//faz a entrada no array usando metodos por outra classe
produto[pos] = new Produto(teclado.lerCodigoProduto(),teclado.lerNomeProduto(),teclado.lerQtdProduto());
}//fim do metodo
//METODO PARA ALTERAR O CADASTRO
public void AlterarCadastroProduto(){
//define uma variavel inteira para usar como o codigo
//para poder alterar o array
int cod = teclado.lerCodigoProduto();
//encontra a referencia do codigo e muda o nome do produto
AcharProduto(cod).setNome(teclado.lerNomeProduto());
//muda a quantidade do estoque
AcharProduto(cod).getEstoque().setQtd(teclado.lerQtdProduto());
}
basicamente é como funciona o controle do array de produto
mas o metodo de excluir nao funfa
Provavelmente há uma referência para um objeto que não existe.
public void ExcluirProduto(){
int cod = teclado.lerCodigoProduto();
int posOrig = 0;
Produto[] tmp = produto; //de onde veio essa atribuição? produto recebeu um new Produto() em alguma outra parte do código?
produto = new Produto[produto.length - 1];
for (int i = 0; i < tmp.length; i++){
if ( produto[i].getCod() != AcharProduto(cod).getCod() )
{
System.arraycopy(tmp, i, produto, posOrig, 1);
posOrig++;
}
}
Tente ver se todos os objetos foram istanciados corretamente.
nessa parte ele cria um array tmp com os dados do array produto que ja existe
public void ExcluirProduto(){
int cod = teclado.lerCodigoProduto();
int posOrig = 0;
Produto[] tmp = produto;
produto = new Produto[produto.length - 1]; // nesse momento seu array de produtos está com as poisções NULL correto? acabou de dar um new
for (int i = 0; i < tmp.length; i++){
// na linha abaixo 'produto[i].getCod()' produto[i] não é null? pra mim seria esse o erro
if ( produto[i].getCod() != AcharProduto(cod).getCod() )
{
System.arraycopy(tmp, i, produto, posOrig, 1);
posOrig++;
}
}
Se eu escrevi algo errado por favor me digam.
entendi, mas no caso
a variavel produto é um array, ela foi declarada como ( Produto[] produto )
dai o que aquela parte faz
cria um outro array , seria mesma coisa que
Produto[] produto = new Produto[tamanho do array];
Entendi mas seu objeto array possui variaveis de referencia para objetos tipo Produto, porem nesse instante os valores de referencia estão NULL, então terá de criar um objeto e associa-la às variaveis de referencia do array, chamar um metodo de produto, vai dar NullPointerException .
Produto[] produto = new Produto[10];//declara array de produtos com 10 referencias tipo Produtos com valor null
produto[2].umMetodoQualquer(); //NullPointerException pq neste instante produto[2] não possui referencia a um objeto Produtos.
//sem problemas assim
Produto[] produto = new Produto[10];//declara array de produtos com 2 referencias tipo Produtos com valor null
produto[0] = new Produto(); //cria um objeto Produto e associa à variavel de referencia da possição 0 do array
produto[1] = new Produto();
produto[0].umMetodoQualquer(); //OK pq esta posição do array possui referencia a um objeto Produto
Não sei deu pra entender, sei bem os conceitos mas as vezes não explico de forma clara.
Cara eu entendi agora…
Depois vou tentar e te falo
Vlw pela dica
public void ExcluirProduto(){
int cod = teclado.lerCodigoProduto();
int posOrig = 0;
Produto[] tmp = produto;
produto = new Produto[produto.length - 1]; // nesse momento aki o array realmente estava null , aki eu resolvi da seguinte forma, copiando o array tmp novamente assim..
System.arraycopy(tmp, 0, produto, 0 , produto.length);//agora ele ja nao esta mais null, mas ainda sim continuava dando erro, na comparacao
for (int i = 0; i < tmp.length; i++){
// na linha abaixo
//tive que fazer outra funcao AcharProduto para funcionar
if ( produto[i].getCod() != AcharProduto(cod).getCod() )
{
System.arraycopy(tmp, i, produto, posOrig, 1);
posOrig++;
}
}
Vlw obrigado pela dica...