NullException - o que está errado

Segue código abaixo::

package supermercado;

import java.util.*;

public class Supermercado {

    public Supermercado() {
    }

    public static void main(String[] args)
    {
        int qtd, qtdProd;
        String data;

        Scanner in = new Scanner(System.in);

        qtd = Integer.parseInt(in.nextLine());    // qtos produtos serão comprados (leite + arroz = 2 produtos)
        data = in.nextLine();

        Compra comp = new Compra(data, qtd);
        
        qtdProd = Integer.parseInt(in.nextLine()); //qtde de cada produto( qtos leites, qto arroz)
        comp.insereProdutos(qtdProd);
    }
}

import java.util.*;

public class Compra {

    //ATRIBUTOS
    private String dataCompra;

    Produto[] prod;
    int[] qtdeProduto;
    static int num;
    int i = 0;

    //CONSTRUTOR
    public Compra(String data, int qtd){
        setDataCompra(data);
        this.num = qtd;
    }

    //PROPRIEDADES
    public String getDataCompra(){
        return dataCompra;
    }
    public void setDataCompra(String dataCompra) {
        this.dataCompra = dataCompra;
    }

    //MÉTODOS
    public void insereProdutos(int qtd){
       
        Scanner en = new Scanner(System.in);

        prod = new Produto[num];
        qtdeProduto = new int[num];
       
        if(i<num){
            prod[i].setDescricao(en.nextLine());
            prod[i].setPreco(Double.parseDouble(en.nextLine()));
            prod[i].setTipo(en.nextLine().charAt(0));
            qtdeProduto[i] = qtd;
            i++;
        }
    }
}
public class Produto {    
    
    //ATRIBUTOS
    private String descricao;
    private char tipo;
    private double preco;
    
    
    //CONSTRUTOR
    public Produto(String descricao, char tipo, double preco) {
        setDescricao(descricao);
        setTipo(tipo);
        setPreco(preco);
    }
    
    
    //PROPRIEDADES
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    

    public char getTipo() {
        return tipo;
    }
    public void setTipo(char tipo) {
        this.tipo = tipo;
    }    
    

    public double getPreco() {
        return preco;
    }
    public void setPreco(double preco) {
        this.preco = preco;
    }    
}

pessoal quando eu rodo ta dando esse erro:

“Exception in thread “main” java.lang.NullPointerException
at supermercado.Compra.insereProdutos(Compra.java:40)
at supermercado.Supermercado.main(Supermercado.java:24)”

erro é nessa linha:
prod[i].setDescricao(en.nextLine()); da classe compra

Amigo, não basta so fazer isso : prod = new Produto[num];

você tem que, para cada posição dar um new, por exemplo:

prod = new Produto[num];   
        qtdeProduto = new int[num];   
         
        if(i<num){   
            prod[i] = new Produto();            
            prod[i].setDescricao(en.nextLine());   
            prod[i].setPreco(Double.parseDouble(en.nextLine()));   
            prod[i].setTipo(en.nextLine().charAt(0));   
            qtdeProduto[i] = qtd;   
            i++;   
        }

Fazer o que esta na linha 5.

se voce não fizer isso, sempre dara nullPointer.>

Tente:

 prod[i].setDescricao(String.valueOf(en.nextLine()));

ou

 prod[i].setDescricao(en.nextLine().toString());

Nossa não acredito que fiz isso. Meu sem comentários sobre esse erro.

Ratao nao precisa colocar prod[i].setDescricao(en.nextLine().toString()); porque o retorno do nextLine() já é uma string.
O erro era mesmo o não instanciamento de PROD. Vlw galera…

galera e também vai uma outra falta de atenção minha fazendo conversão de tipos sendo que o Java já tem

double preco = Double.parseDouble(en.nextLine());

o mais correto seria usar

en.nextDouble();

ae não precisaria fazer conversão manual

:lol: