Método para um sistema de venda só que está dando erro?

Fiz esse método para um sistema de venda só que está dando erro

public void venda() {
    Venda venda = new Venda();
    Produto produto = new Produto();
    GerenciaProduto gp = new GerenciaProduto();
    int fim = 0;
    System.out.println("Digite o código do produto:");
    produto.setCodigo(in.nextInt());
    System.out.println("Digite quantidade de produtos vendidos");
    int qtd = in.nextInt();
    double qtdd = qtd;
    System.out.println("Deseja encerrar a venda? 1-sim 2-não");
    int y = in.nextInt();
    if(y == 2){
        venda();
    }
    
    double valor = produto.getValor() * qtdd;
    venda.setValor(valor);
    produto.setQtdProduto(produto.getQtdProduto() - qtd);
    fim = in.nextInt();
    System.out.println("Valor:" + venda.getValor());
    n++;
}

Certo, qual o erro? poste a classe completa, por favor!

Mais qual o erro?