Exibir vetor de classe

Olá! Sou iniciante e estou tendo problemas para exibir um vetor de classe. São três as classes, a principal exibe o menu e chama o método da opção escolhida, a segunda é a classe do produto, com nome e preço e a terceira (“Carrinho”) é onde estou tendo problemas no segundo método, “atualizarProduto”. Estava tentando direto no vetor “Lista”, e estava tendo problema. Então, como havia resolvido um problema de um método anterior por meio de outro objeto, como poderão ver, tentei o mesmo por meio do objeto produto, e continua com problemas. Já tentei o println sem o vetor e funcionou.
A seguir as classes… Para fazer o teste, comece por adicionar um produto qualquer no vetor (opção 1), e depois tente a opção atualizar produtos, onde até agora só tem a exibição dos produtos adicionados, e verá o erro.

package Compras;
import java.util.Scanner;
public class Principal {
public static void main (String[] args){
Scanner ler=new Scanner (System.in);
int opcao, ultimoProduto=0;
do{
//Exibição do menu
System.out.println (“1- Adicionar produto \n2- Aualizar produto”);
System.out.println (“3- Remover produto \n4- Ver carrinho \n5- Sair”);
opcao=ler.nextInt();
//Acionar opção escolhida
switch (opcao){
case 1:
Carrinho.adicionarProduto(ultimoProduto++);
ultimoProduto++;
break;
case 2:
Carrinho.atualizarProduto(ultimoProduto);
break;
}
}while(opcao!=5);
}
}

package Compras;
public class Produto {
    String nome= new String();
    double preco;
    String getnome;
    public Produto(String nome, double preco){
        this.nome=nome;
        this.preco=preco;
    }
}


package Compras;
import java.util.Scanner;
public class Carrinho {
    static Produto[] lista= new Produto[50];
    static Scanner ler=new Scanner(System.in);
    static void adicionarProduto(int ultimoProduto) {
        System.out.println ("Nome: ");
        String nome=ler.nextLine();
        System.out.println ("Preco: ");
        double preco=Double.parseDouble(ler.nextLine());
        Produto produto = new Produto (nome, preco);
        lista[ultimoProduto]=produto;
        System.out.println (lista[ultimoProduto].nome+" foi adicionado ao carrinho.");
    }
    static void atualizarProduto(int ultimoProduto){
        for (int x=1; x<=ultimoProduto; x++){
            Produto produto = lista[x];
            System.out.println (x+"- "+produto.nome+" "+produto.preco);
        }
    }
}

creio que o erro pode estar acontecendo aqui… vc esta incrementando 2 vezes o mesmo atributo
add essa linha e veja o valor que ele esta retornando

                case 1:
                Carrinho.adicionarProduto(ultimoProduto++);
                ultimoProduto++;
                
                // veja isto
                System.out.println("valor ultimoProduto: " + ultimoProduto);
                break;

Outra coisa… vc instanciou um vetor de 50 posições, no laço ele vai percorrer todas as posições, se elas tiver vazias ira dar uma exceção.