Ajuda em uma estrutura de controle

2 respostas
O

Olá!

Tenho um exercício simples para fazer mas estou com um pouco de dificuldade. O objetivo do exercício é solicitar ao usuário digitar uma lista de pedidos, com a descrição do pedido, quantidade e valor e no final devo imprimir tudo na tela. Fiz da seguinte maneira:

import javax.swing.JOptionPane;

public class Main {

    public static void main(String[] args) {


        //define a quantidade de produtos para achar o limite para os vetores
        String limite = JOptionPane.showInputDialog("Informe a quantidade de produtos que compõe o pedido");
        int lim = Integer.parseInt(limite);

        //Criação dos vetores que serão utilizados no cadastro usando o número informado acima
        String nome;
        String descricao[] = new String[lim];
        double precoUnitario[] = new double[lim];
        int quantidade[] = new int[lim];
        double valorTotal[] = new double[lim];
        double total = 0, totalComImposto = 0;
        String estado;

        nome = JOptionPane.showInputDialog("Informe o nome do cliente");
        estado = JOptionPane.showInputDialog("Informe o Estado de destino da compra");
        for (int i = 0; i < lim; i++)  //solicitação dos dados do cadastro na quantidade de vezes informadas na variável "lim"
        {

         valorTotal[i] = 0;
         descricao[i] = JOptionPane.showInputDialog("Informe a descrição do produto");
         quantidade[i] = Integer.parseInt(JOptionPane.showInputDialog("Informe a quantidade do produto"));
         precoUnitario[i] = Double.parseDouble(JOptionPane.showInputDialog("Informe o preço unitário do produto"));
         valorTotal[i] = (double) quantidade[i]*precoUnitario[i];
         total = total + valorTotal[i];
        }

        //criação da mensagem final com o nome do cliente e os produtos cadastrados
        String mensagemFinal = "Cliente: " + nome + "\n";
        for (int i = 0; i < lim; i++)
        {
            mensagemFinal = mensagemFinal + descricao[i] + " " + "quantidade: " + quantidade[i] +
                    " custo unitário: " + precoUnitario[i] + " Valor total: " + valorTotal[i] + "\n";
        }

        //Calcula ICMS de acordo com o Estado
        if (estado.equalsIgnoreCase("SC"))
            totalComImposto = total * 1.17;
        else
            totalComImposto = total * 1.12;

        //insere o valor total (soma) de todos os produtos cadastrados
        mensagemFinal = mensagemFinal + "Total sem impostos: " + total +
                "\nTotal com impostos: " + totalComImposto;

        //exibe a mensagem final
        JOptionPane.showMessageDialog(null, mensagemFinal);
    }
}

Esse código funciona, porém queria não ter que perguntar no início quantos produtos a pessoa quer colocar, queria que a pessoa fosse digitando enquanto quisesse. Sei que se eu usasse o Scanner eu teria o comando “.hasNext()”, mas como estou usando o JOptionPane não consigo usar esse comando. Alguém sabe qual o comando equivalente? Só falando o nome do comando já facilitaria pois eu saberia onde procurar.

Grato

2 Respostas

O
Opa ! Cara, se voce quer registrar varios produtos, mas nao sabe exatamente a quantidade, acredito que tera que trocar a array por alguma colecao. Entao, no lugar do for, voce poderia utilizar um while, conforme o exemplo abaixo:
boolean incluirMaisProdutos = false;
do {

	// obtem informacoes do produto

	incluirMaisProdutos = (JOptionPane.showConfirmDialog(null, "Deseja incluir mais produtos?", 
                                        " :: Confirmacao:", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION);
} while (incluirMaisProdutos);
Espero que tenha ajudado.
O

dei uma olhada e com coleção realmente parece ser mais fácil e melhor, vou dar uma estudada melhor e depois posto oq fiz :wink: valeu pela dica!

Criado 8 de fevereiro de 2010
Ultima resposta 9 de fev. de 2010
Respostas 2
Participantes 2