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

10 respostas
J
Estou a fazeres um metodo para excluir uma posicao de um array, segue o codigo:
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++;
        }
        }
Mas, da o tal do erro... e nao consigo achar a solucao se alguem ver o erro me ajudem..

10 Respostas

J

Por favor me ajudem…

BLV_DOOM_JAVA

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.

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

Jemerson

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.

J

nessa parte ele cria um array tmp com os dados do array produto que ja existe

asousaj
Não sou expert mas pra mim a falha seria a comentada no código
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.

J

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];

asousaj

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.

J

Cara eu entendi agora…
Depois vou tentar e te falo
Vlw pela dica

J
Consegui resolvi asousaj... Olha ai
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...

Criado 22 de novembro de 2011
Ultima resposta 23 de nov. de 2011
Respostas 10
Participantes 4