Sou um principiante em java, estou com o seguinte problema, NullPointerException[RESOLVIDO]

Estou a fazeres um metodo para excluir uma posicao de um array, segue o codigo:

[code]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++;
    }
    }[/code]

Mas, da o tal do erro…
e nao consigo achar a solucao
se alguem ver o erro me ajudem…

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.

Este é o metodo que retorna a referencia do array:

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

aki esta o metodo para cadastrar um novo produto:

[code] //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[/code]

o metodo para alterar um produto:

//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

Não sou expert mas pra mim a falha seria a comentada no código

[code]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++;
    }
    }[/code]

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

Consegui resolvi asousaj…
Olha ai

[code]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++;
}
}
[/code]

Vlw obrigado pela dica…