Exibir vetor de classe

2 respostas
vetorobjetoclassearraylistarray
T

São três as classes:

PRINCIPAL:

`package Compras;
import java.util.Scanner;
public class Principal {
public static void main (String[] args){
    Produto[] lista = new Produto[50];
    Scanner ler=new Scanner (System.in);
    int opcao, ultimoProduto=0;
    do{
        //Exibição do menu 
        System.out.println ("1- Adicionar produto \n2- Atualizar produto");
        System.out.println ("3- Remover produto \n4- Ver carrinho \n5- Sair");
        opcao=ler.nextInt();
        //Execução da opção escolhida
        switch (opcao){
            //Chama método para adicionar produto ao carrinho
            case 1:
                Carrinho.adicionarProduto (ultimoProduto++);
                ultimoProduto++;
                break;
            //Chama o método para editar algum produto no carrinho
            case 2:
                Carrinho.atualizarProduto (ultimoProduto);
                break;
        }
    }while(opcao!=5);
}
}`

PRODUTO:

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

CARRINHO:

package Compras;
import java.util.Scanner;
public class Carrinho {
static Produto[] lista= new Produto[50];
static Scanner ler=new Scanner(System.in);
//método recebe a posição do último produto adicionado
static void adicionarProduto(int ultimoProduto) {
    //Ler nome e preço do produto a ser adicionado
    System.out.println ("Nome: ");
    String nome=ler.nextLine();
    System.out.println ("Preço: ");
    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.");
}
//método para editar produtos adicionados
static void atualizarProduto(int ultimoProduto){
    //laço para exibir os produtos contidos no carrinho
    for (int x=1; x<=ultimoProduto; x++){
        System.out.println (x+"- "+lista[x].nome+" "+lista[x].preco);
    }
}
}

Ao executar o projeto, adiciono um produto qualquer sem problemas, mas depois, quando retorna o menu e escolho a opção 2, para editar algum produto, que começa por exibir o produtos já adicionados, então erros são acusados na linha 21 da classe “Carrinho”, um println que, curiosamente, foi usado normalmente no primeiro método que falei que roda sem problemas; e na linha 22 da classe Principal, onde é chamado esse método “atualizarProduto”.

2 Respostas

R

O for deve começar em 0.

Se não resolver, poste o erro que está informando para facilitar.

E poderia explicar o porque de uma lista de produtos na main e uma no carrinho? Pois você está utilizando apenas a do carrinho.

T

Já descobri o que era, amigo. Eu pensava que ao passar como parâmetro “ultimoProduto++” para o método “adicionarProduto”, era apenas mandada a variável+1 para o método, por isso eu incrementava de novo na linha abaixo; mas na verdade é a variável estava sendo incrementada também na classe Principal e, sendo incrementada duas vezes, começava a leitura do segundo método numa posição a mais. Então passei como parâmetro “ultimoProduto+1”, que apenas manda a soma sem incrementar, e incrementei na linha abaixo. Também valeria mandar “ultimoProduto++” e tirar o incremento repetido. Imagino que se você localizar aquilo sobre o que estou falando, entenderá o que eu disse. Abraço.

P.S: a lista da classe principal era desnecessária. Eu a tinha criado numa das tentativas de concertar o erro, e esqueci de apagar.

Criado 3 de janeiro de 2018
Ultima resposta 3 de jan. de 2018
Respostas 2
Participantes 2