Erro de inserção usando for each

Opa, Freqüento o fórum à bastante tempo, mas esta é meu primeiro post…

Não entendi mto bem o pq q da erro em tempo de execução do código abaixo ! é lançado um “java.lang.NullPointerException”

Produto mercado[] = new Produto[6];
        String aux = new String();
        
        for(Produto a : mercado){
            aux = JOptionPane.showInputDialog("Digite o código do produto");
            a.setCodigo(Integer.parseInt(aux));
            aux = JOptionPane.showInputDialog("Digite a descrição do produto");
            a.setDescricao(aux);
            aux = JOptionPane.showInputDialog("Digite o valor");
            a.setPreco(Double.parseDouble(aux));
        }

se alguém pude me da uma luz eu agradeço !!!

 Produto mercado[] = new Produto[6];   // isto cria um array com 6 posições, todas com valor "null"
         String aux = new String();  // Pra que usar "new String()"? Não precisa (não é isto que provoca o "null pointer exception")
           
         for(Produto a : mercado){ // se você não preencheu o array "mercado" com produtos, "a" vai ser null e vai dar o NullPointerException. 

o new String() - foi recomendação do prof. de uma boa prática de programação,

e vc ta querendo dize q não da pra preenche o array usando for each ?!?!

Esse seu professor aprendeu isso onde? Isso parece transplante de uma prática que você é obrigado a fazer em VB (“Dim Bla as New Ble”). Não é boa prática nem em Java, nem em C#, e mesmo em VB.NET não é boa prática.

Se você precisa inicializar uma variável string com um valor vazio, use “” ou null, não “new String()”.

Sim senhor, e também estou querendo dizer que você come todos os erres. É que “for each” é uma visão “read-only” de um conjunto, ou seja, ele não é feito para preencher um array, e sim para percorrê-lo.

entendeu !

apesar de sua resposta parecer de má vontade eu agradeço bastande o esclarescimento !!!

valeu !