Duvida com um programinha de estoque que estou fazendo

18 respostas
J

Estou com uma duvida com um programinha de estoque que estou fazendo

Tenho 3 classes : Produto , GerenciaProduto , Pedidos
A classe main : Estoque

Produto: Nesta classe eu tenho duas variaveis, apenas NOME e COD e os metodos set e get.

GerenciaProduto: Aqui eu crio um array da classe Produto

Produto[] produto = new Produto[10];

Preencho ele normalmente. Ex:

produto[0] = new Produto(<codigo>,<nomeProduto>); produto[1] = new Produto(<codigo>,<nomeProduto>);

E tenho um metodo que mostra todos os elementos do array:
public void Mostra(){ for ( Produto atual : produto ) System.out.println(atual.getNome());}

Até aqui o codigo funciona que é uma beleza.
Mas na classe Pedido acontece o seguinte:
Crio uma variavel de classe obs:ou mesmo criando um objeto da classe GerenciaProduto nao funciona

GerenciaProduto produto;

Acesso o metodo Mostra():

public void MostraProduto(){ produto.Mostra();}

E crio um objeto na classe main :

Pedido p = new Pedido();
p.MostraProduto();

Da um erro NullPointerExcption nao consigo resolver…

18 Respostas

leonardobhbr

Amigo poste o codigo inteiro

vc esta preenchendo as 10 posicoes o vetor de produto?

e onde exatamente esta a NPE ?

M

jcsj2010
Porque você não usa List ao invés de Vetores ?

Exemplo

List&lt;Produto&gt; produtos = new ArrayList&lt;Produto&gt;();
produtos.add(new Produto());

// iterando na lista
for (Produto p : produtos) {
      System.out.println(p);
}

asousaj

Simples, somente declarou GerenciaProduto, esqueceu de instanciar/criar.

GerenciaProduto produto;  
// cade 'new GerenciaProduto()' ???
J

Obrigado pela dica…
Mas o programa ja esta grande e acho que nao compensa nesse momento mudar, eu estou aprendendo ainda …sou novato com java

J

Mesmo criando o objeto da o erro de NullPointer…

J

Vou colocar o codigo inteiro…

J
Classe Produto:
package Produtos;

import Estoque.Estoque;

/**
 *
 * @author Cliente
 */
public class Produto {
    private String nome;
    private int cod;
    private Estoque estoque;

    
    //CONSTRUTOR//
    public Produto(int cod, String nome, int qtd){
       this.nome = nome;
       this.cod = cod;
       estoque = new Estoque();
       estoque.setQtd(qtd);
    }
    
    
    ///////////////////////////////////////////////
    ////////////////METODOS/////////////////////////
    //////////////////////////////////////////////
    
    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the cod
     */
    public int getCod() {
        return cod;
    }

    /**
     * @param cod the cod to set
     */
    public void setCod(int cod) {
        this.cod = cod;
    }

    /**
     * @return the estoque
     */
    public Estoque getEstoque() {
        return estoque;
    }

    public int MostraQtd()
    {
        return estoque.getQtd();
    }
    

}//fim da classe
J
Classe GerenciaEstoque:
package Produtos;
import Teclado.Teclado;
/**
 *
 * @author Cliente
 */


/*****************************************************
  
 * Esta classe faz o gerenciamento do estoque de produtos,
 * ou seja, cadastra um novo produto, altera um produto que
 * esta cadastrado, exclui um produto, mostra os produtos
 * cadastrados. E tem dois metodos diferentes que encontra
 * a referencia de um array.
 
 ****************************************************/
public class GerenciaEstoque {
   //DECLARACAO DAS VARIAVEIS
    Produto[] produto;
    Teclado teclado;
    
    
    
    
    //CONSTRUTOR
    public GerenciaEstoque(){
        teclado = new Teclado();
    }//FIM DO CONSTRUTOR
    
    
    
    
    //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());
    }
    
    
    
    
    //METODO PARA EXCLUIR UM PRODUTO
    public void ExcluirProduto(){
        
        //aqui verifica se o array tem tamanho maior que 1
        if (produto.length > 1){
        
            //cria um array temporario e copia o array produto para ele
            Produto[] tmp = produto;
        
            //nesse momento cria o array produto com o tamanho de
            // uma posicao menor, porque eu vou excluir uma posicao
            //por isso eu diminuo de tamanho
        produto = new Produto[produto.length - 1];
        
        //agora eu copio o array tmp para o array produto novamente
        //pois se eu nao fizer isto o array vai ficar null
        //por que eu dei um [new] 
        //se nao fizer esse passo ocorre uma excecao nullPointerException
        System.arraycopy(tmp, 0, produto, 0, produto.length);
        
        
        //crio uma variavel de controle para a posicao do array produto
        int posOrig = 0;
        
        //nesse momento eu pergunto ao usuario o codigo que ele quer
        //excluir e atribuo para a variavel a
        int a = AcharProduto2(tmp,teclado.lerCodExcluir()).getCod();
        
        //aqui esta o laco for para percorrer todo o array
            for (int i = 0; i < tmp.length; i++){ 
            
            //aqui nesse momento do codigo é essencial
            //faz a comparacao do codigo que o usuario escolheu
            //com o codigo existente no array
            //se for diferente ele copia a posicao i do tmp
            //para para uma posicao sequencial do array produto
            //se for igual , a condicao se torna falso e nada acontece
            if ( tmp[i].getCod() != a) 
            {
            produto[posOrig++] = tmp[i];
            
            }
        }
        }else
            produto = null;
    }
    
    
    
    
    //METODOS PARA MOSTRAR TODOS OS PRODUTOS CADASTRADOS
    public void MostraProdutosCadastrados(){
        for ( Produto atual : produto )
        {
            System.out.printf("Codigo: %d Nome: %s Qtd: %s\n", atual.getCod(),atual.getNome(),atual.MostraQtd());
        }
    }
    
    
    
    //METODO PARA ENCONTRAR UMA REFERENCIA DO ARRAY POR ALGUM
    //ELEMENTO DENTRO DELE
    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
    
    
    
    private Produto AcharProduto2(Produto[] tmp,int cod){
        for (Produto atual : tmp)
        {
            if ( atual.getCod() == cod)
            {
                return atual;
            }//fim do if
        }//fim do for
        return null;
    }//fim do metodo AcharProduto
}//FIM DA CLASSE
J
Classe Vendedor:
package Vendedor;

/**
 *
 * @author Cliente
 */
public class Vendedor {
    //DECLARAR OS CAMPOS AQUI
    private String nome;
    private int cod;
    
    //CONSTRUTOR
    public Vendedor(int cod, String nome){
        this.cod = cod;
        this.nome = nome;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the cod
     */
    public int getCod() {
        return cod;
    }

    /**
     * @param cod the cod to set
     */
    public void setCod(int cod) {
        this.cod = cod;
    }
}
J
Classe GerenciaVendedor:
package Vendedor;

import Interfaces.Gerencia;
import Teclado.Teclado;

/**
 *
 * @author Cliente
 */
public class GerenciaVendedor implements Gerencia{
    //DECLARAR CAMPOS AQUI
    Vendedor[] vendedores;
    Teclado teclado;
    
    //CONSTRUTOR
    public GerenciaVendedor()
    {
        teclado = new Teclado();
    }

    @Override
    public void CadastrarNovo(){
       
        int pos = -1;
        if ( vendedores == null )
        {
            
            vendedores = new Vendedor[1];
            pos = 0;
        }else{
            
            Vendedor[] tmp = vendedores;
            vendedores = new Vendedor[tmp.length + 1];
            System.arraycopy(tmp, 0, vendedores, 0, tmp.length);
            pos = tmp.length;
        }
        
        vendedores[pos] = new Vendedor(teclado.lerCodigoProduto(),
                                       teclado.lerNomeVendedor());
    }
            

    @Override
    public void AlterarCadastro() {
        int cod = teclado.lerCodigoProduto();
       AcharReferencia(cod).setNome(teclado.lerNomeVendedor());
    }

    @Override
    public void Excluir() {
        
    }

    
    public Vendedor AcharReferencia(int cod) {
        for ( Vendedor atual : vendedores )
        {
            if ( atual.getCod() == cod )
                return atual;
        }
        return null;
    }
    
    
    
    public void MostrarVendedoresCadastrados(){
        for ( Vendedor atual : vendedores )
            System.out.printf("Cod: %d Nome: %s", atual.getCod(),atual.getNome());
    }
}
J
Classe Pedido:
package Pedidos;

/**
 *
 * @author Cliente
 */
public class Pedidos {
    private int cod, codProduto, codVend;
    
    public Pedidos(int cod, int codProduto, int codVend){
        this.cod = cod;
        this.codProduto = codProduto;
        this.codVend = codVend;
    }

    /**
     * @return the cod
     */
    public int getCod() {
        return cod;
    }

    /**
     * @param cod the cod to set
     */
    public void setCod(int cod) {
        this.cod = cod;
    }

    /**
     * @return the codProduto
     */
    public int getCodProduto() {
        return codProduto;
    }

    /**
     * @param codProduto the codProduto to set
     */
    public void setCodProduto(int codProduto) {
        this.codProduto = codProduto;
    }

    /**
     * @return the codVend
     */
    public int getCodVend() {
        return codVend;
    }

    /**
     * @param codVend the codVend to set
     */
    public void setCodVend(int codVend) {
        this.codVend = codVend;
    }
    
    
}
J
Classe GerenciaPedido:
package Pedidos;

import Interfaces.Gerencia;
import Produtos.GerenciaEstoque;
import Teclado.Teclado;
import Vendedor.GerenciaVendedor;

/**
 *
 * @author Cliente
 */
public class GerenciaPedidos implements Gerencia{
    Pedidos[] pedidos;
    int pos = -1;
    Teclado teclado;
    GerenciaEstoque produto;
    GerenciaVendedor vendedor = new GerenciaVendedor();
    
    
    
    public GerenciaPedidos(){
        teclado = new Teclado();
        
        
    }
    
    
    
    
    @Override
    public void CadastrarNovo() {
        if (pedidos == null)
        {
            System.out.println("if");
            pedidos = new Pedidos[1];
            pos = 0;
        }else{
             System.out.println("else");
            Pedidos[] tmp = pedidos;
            pedidos = new Pedidos[pedidos.length + 1];
            System.arraycopy(tmp, 0, pedidos, 0, tmp.length);
            pos = tmp.length;
        }
         System.out.println("Akki");
        produto.MostraProdutosCadastrados();
        System.out.println();
        vendedor.MostrarVendedoresCadastrados();
        pedidos[pos] = new Pedidos(teclado.lerCodPedido(),teclado.lerCodigoProduto(),teclado.lerCodVendedor());
    }

    
    
    
    
    @Override
    public void AlterarCadastro() {
        int cod = teclado.lerCodPedido();
        produto.MostraProdutosCadastrados();
        AcharCodigo(cod).setCodProduto(teclado.lerCodigoProduto());
        vendedor.MostrarVendedoresCadastrados();
        AcharCodigo(cod).setCodVend(teclado.lerCodVendedor());
    }

    
    
    
    
    @Override
    public void Excluir() {
        
    }
    
    
    
    
    private Pedidos AcharCodigo(int cod){
        
        for ( Pedidos atual : pedidos )
            if ( atual.getCod() == cod )
                return atual;
        return null;
    }
    
    
    
    
    public void MostrarPedidosCadastrados(){
        for ( Pedidos atual : pedidos)
            System.out.printf("Codigo: %d \nNome do Produto: %s\nNome do Vendedor: %s",
                                atual.getCod(),produto.AcharProduto(atual.getCod()),
                                vendedor.AcharReferencia(atual.getCodVend()));
    }
    
    
    
    
    public void teste(){
        produto.MostraProdutosCadastrados();
        vendedor.MostrarVendedoresCadastrados();
    }
}
J
Por fim a classe main:
package Tela;

import Pedidos.GerenciaPedidos;
import Produtos.GerenciaEstoque;
import Vendedor.GerenciaVendedor;

/**
 *
 * @author Cliente
 */
public class Roda { 
    public static void main(String[] args){    
    GerenciaEstoque novoProduto = new GerenciaEstoque();
    GerenciaVendedor novoVendedor = new GerenciaVendedor();
    GerenciaPedidos novoPedido = new GerenciaPedidos();
    
    novoProduto.CadastrarNovoProduto();
    //novoProduto.CadastrarNovoProduto();
    novoProduto.MostraProdutosCadastrados();
    novoVendedor.CadastrarNovo();
    //novoVendedor.CadastrarNovo();
    novoVendedor.MostrarVendedoresCadastrados();
    
     //novoPedido.CadastrarNovo();
    //novoPedido.MostrarPedidosCadastrados();
    novoPedido.teste();
    }
      }
J
package Teclado;

import javax.swing.JOptionPane;

/**
 *
 * @author Cliente
 */
public class Teclado {
    
    public Teclado(){}
    
    
    public String lerNomeProduto(){
        return JOptionPane.showInputDialog(null,"Informe o nome do produto.");
    }//fim do metodo
    
    
    
    
    public int lerCodigoProduto(){
        return Integer.valueOf(JOptionPane.showInputDialog(null,"Informe o codigo de controle."));
    }//fim do metodo codigo do produto
    
    
    
    
    public int lerQtdProduto(){
        return Integer.valueOf(JOptionPane.showInputDialog(null,"Informe a quantidade do produto."));
    }
    
    
    
    
    public int lerCodExcluir(){
        return Integer.valueOf(JOptionPane.showInputDialog(null,"Informe o codigo do produto,\npara fazer a exclusao."));
    }
    
    
    
    
    public String lerNomeVendedor(){
        return JOptionPane.showInputDialog(null,"Informe o nome do vendedor.");
    }//fim do metodo
    
    
    
    public int lerCodVendedor(){
        return Integer.valueOf(JOptionPane.showInputDialog(null,"Informe o codigo do vendedor."));
    }
    
    
    
    
     
    public int lerCodPedido(){
        return Integer.valueOf(JOptionPane.showInputDialog(null,"Informe o codigo do pedido para alterar."));
    }
}
A

Bom dia,

Amigo, coloque o stack trace também, isso vai ajudar a encontrarmos a linha que está errada …

[]'s

asousaj

[EDITADO] - tinha colocado a mesma coisa e o alex.brito

leonardobhbr

Amigo reparei que voce fica redimensionando o seu vetor toda hora use

List<Produto> ao invés do array nela não precisa redimensionar só da add

J

A tudo bem…
Vou refazer usando List
Obrigado!

Criado 25 de novembro de 2011
Ultima resposta 25 de nov. de 2011
Respostas 18
Participantes 5