Erro ao retornar um vetor

3 respostas
P

Boa tarde!
Será que alguém pode me dizer pq que da erro e como corrigir esse algoritmo?

o erro é esse:

Exception in thread “main” java.lang.NullPointerException
at edu.exercicios.tres.Produto.main(Produto.java:63)

segue o algoritmo:

package edu.exercicios.tres;

import javax.swing.JOptionPane;

public class Produto {

	private Integer codigo;
	private String nome;
	private Double preco;
	private Data dataValidade;
	
	/*
	public Produto(Integer codigo, String nome, Double preco, Data dataValidade) {
		this.codigo = codigo;
		this.nome = nome;
		this.preco = preco;
		this.dataValidade = dataValidade;
	}
	
	*/
	
	public Produto[] preenche(Produto[] p){
		for (int i = 0; i < p.length; i++) {
			
			p[i].codigo = Integer.parseInt(JOptionPane.showInputDialog("Digite o codigo do produto: "));
			p[i].nome = JOptionPane.showInputDialog("Digite o nome do produto: ");
			p[i].preco = Double.parseDouble(JOptionPane.showInputDialog("Digite o preço do produto: "));

			Integer dia = Integer.parseInt(JOptionPane.showInputDialog("Digite o dia da data de validade: "));
			Integer mes = Integer.parseInt(JOptionPane.showInputDialog("Digite o mes da data de validade: "));
			Integer ano = Integer.parseInt(JOptionPane.showInputDialog("Digite o ano da data de validade: "));
			
			p[i].dataValidade = new Data(dia, mes, ano);
			//return p;
		}
		return p;
	}
	
	public Produto[] imprime(Produto[] prod){
		
		for(int i = 0; i < prod.length; i++){
			
			System.out.println("=== PRODUTO ===");
			System.out.println("codigo: " + prod[i].codigo);
			System.out.println("Nome: " + prod[i].nome);
			System.out.println("Preço: R$" + prod[i].preco );
			System.out.println("Data de validade: " + prod[i].dataValidade.getDia() + "/" + prod[i].dataValidade.getMes() + "/" + prod[i].dataValidade.getAno());
			
		}
		return prod;
	}
	
	//public Produto alteraPreco(Produto prod, Double novoPreco){
		//prod.dataValidade = novoPreco;
		
		//return prod;
	//}
			
	public static void main(String[] args){
		Produto[] p = new Produto[2];
		
		for (int i = 0; i < p.length; i++) {
			p[i].preenche(p);
			p[i].imprime(p);
		}
		
	}
}

3 Respostas

R

Parece-me que você alocou espaço para um array de n instâncias de Produto, mas não alocou as instâncias propriamente ditas. Experimente incluir essa linha antes do trecho “p[i].preenche§;” :

p[i] = new Produto();
yhhik

qual a necessidade de colocar um for dentro da funcao preencher?
se isso funcionase para cada produto seria cadastrado 3 produtos em um so.
essa é a maneira correta:

public static Produto  preenche(){
    	Produto p = new Produto(); 
         
        	
            p.codigo = Integer.parseInt(JOptionPane.showInputDialog("Digite o codigo do produto: "));   
            p.nome = JOptionPane.showInputDialog("Digite o nome do produto: ");   
            p.preco = Double.parseDouble(JOptionPane.showInputDialog("Digite o preço do produto: "));   
   
            Integer dia = Integer.parseInt(JOptionPane.showInputDialog("Digite o dia da data de validade: "));   
            Integer mes = Integer.parseInt(JOptionPane.showInputDialog("Digite o mes da data de validade: "));   
            Integer ano = Integer.parseInt(JOptionPane.showInputDialog("Digite o ano da data de validade: "));   
               
            p.dataValidade = new Date(dia, mes, ano);   
             
         
        return p;   
    }

para chamar a função faça assim:

for (int i = 0; i < p.length; i++) {  
        	p[i]=preenche();   
            //p[i]=imprime(p);
             
        }

agora faça o msm com a função imprime.

M

Para finalizar :-)

public static void imprime(Produto[] prod){  
          
        for(int i = 0; i < prod.length; i++){  
              
            System.out.println("=== PRODUTO ===");  
            System.out.println("codigo: " + prod[i].codigo);  
            System.out.println("Nome: " + prod[i].nome);  
            System.out.println("Preço: R$" + prod[i].preco );  
            System.out.println("Data de validade: " + prod[i].dataValidade.getDay() + "/" + prod[i].dataValidade.getMonth() + "/" + prod[i].dataValidade.getYear());  
              
        }  
       
    } 



         public static void main(String[] args){  
        
    	        Produto[] p = new Produto[2];  
    	
    	        for (int i = 0; i < p.length; i++) {    
                p[i]=preenche();     
            
          
                
         }  
    	           imprime(p);  
          
    }
Criado 2 de novembro de 2011
Ultima resposta 2 de nov. de 2011
Respostas 3
Participantes 4