Erro de lógica( Iniciante )

10 respostas
C

O programa abaixo só permite cadastrar um produto.
Alguém pode dar uma olhada e mandar uma idéia.

//-- Implementa a classe CadastraProdutos - CadastraProdutos.java

package vendas;

//-- importa os pacotes necessários
import javax.swing.*;

public class CadastraProdutos 
{
    //-- método main inicia a execução da aplicação
    public static void main( String args[] )
    {
        Produtos prod[] = new Produtos[6];
        Departamento depto[] = new Departamento[3];
        
        int cp = 0, cd = 0;
        int opc = 0;
        
        while( opc != 5 )
        {
            opc = Integer.parseInt( JOptionPane.showInputDialog( "Escolha a Opção \n" + 
                    "1 - Cadastrar Produto\n" +
                    "2 - Cadastrar Departamento\n" +
                    "3 - Consulta Produto por Departamento\n" +
                    "4 - Consulta Produto por faixa de preço\n" +
                    "5 - Sair" ));
            
            if( opc == 1 )
            {
                prod[cp] = new Produtos();
                prod[cp].setCodigo( JOptionPane.showInputDialog( "Código do Produto" ));
                prod[cp].setNome( JOptionPane.showInputDialog( "Nome do Produto" ));
                prod[cp].setDepto( JOptionPane.showInputDialog( "Nome do Departamento" ));
                prod[cp].setPreco( Double.parseDouble( JOptionPane.showInputDialog( "Preço do Produto" )));
cp++
                
            }//-- fim da opc == 1
            else
                if( opc == 2 )
                {
                    depto[cd] = new Departamento();
                    depto[cd].setDepto( JOptionPane.showInputDialog( "Nome do Departamento" ));
                    depto[cd].setGerente( JOptionPane.showInputDialog( "Nome do Gerente do Depto." ));
                    cd++;
                }//-- fim da opc == 2
                else
                    if( opc == 3 )
                    {
                        String pesq = JOptionPane.showInputDialog( "Depto. a ser pesquisado" );
                        for( int i = 0; i < cp; i++ )
                        {
                            if( prod[i].getDepto().equalsIgnoreCase( pesq ))
                            {
                                JOptionPane.showMessageDialog( null, "PRODUTOS DO DEPTO" + "\n" + 
                                        "CÓDIGO: " + prod[i].getCodigo() + "\n" +
                                        "NOME: " + prod[i].getNome() + "\n" );
                            }
                        }
                    }//-- fim da opc == 3
                    else
                        if( opc == 4 )
                        {
                            double min = Double.parseDouble( JOptionPane.showInputDialog( "Valor mínimo para pesquisar" ));
                            double max = Double.parseDouble( JOptionPane.showInputDialog( "Valor máximo para pesquisar" ));
                            
                            for( int i = 0; i < cp; i++ )
                            {
                                if( prod[i].getPreco() >= min && prod[i].getPreco() <= max )
                                {
                                    JOptionPane.showMessageDialog( null, "PRODUTOS ENCONTRADOS" + "\n" +
                                            "CÓDIGO: " + prod[i].getCodigo() + "\n" +
                                            "NOME: " + prod[i].getNome() + "\n" + 
                                            "PREÇO: " + prod[i].getPreco() + "\n" );
                                }
                            }
                        }//-- fim da opc == 4
                        else
                            if( opc == 5 )
                                JOptionPane.showMessageDialog(null, "Saindo do Sistema!" );
                                break;
       }//-- fim da estrutura while
       
    }//-- fim do método main
}

10 Respostas

D

Amigo,sendo que vc é iniciante,leia sobre o switch,use-o. Tire o while que está usando nas opcoes.

thegoergen

E use as TAGS CODE. E qual o seu problema?? Você quer fazer o quê?

C

Não posso utilizar o switch, pois ainda não o estudei.
Objetivo do programa é cadastrar 6 produtos e 3 departamentos e fazer as consultas como informa as opções.

felipedamiani
switch (int value) {
		case 1:
			//executa opc = 1 
			break;
		case 2:
			//executa
			break;
			default:
			// executa
			
		}

não tem o que estudar :slight_smile:

victorwss

Tente quebrar o método main em métodos menores. Vai te ajudar bastante.

felipedamiani

o while sempre irá mostrar o menu após executar a opção desejada

Mavericks

Uma boa prática é declarar sempre uma variável por linha comentando o que ela faz, por exemplo:
int cp; // armazena os produtos de x
int cd; // armazena os cds

Posta a classe Produtos tb.

C

A CLASSE PRODUTOS:

//-- Cria a classe Produto - Produtos.java

package vendas;

public class Produtos

{

private String codigo, nome, depto;

private double preco;
public Produtos()
{
    codigo = "";
    nome = "";
    depto = "";
    preco = 0;
}
public void setCodigo( String scodigo )
{
    codigo = scodigo;
}
public void setNome( String snome )
{
    nome = snome;
}
public void setDepto( String sdepto )
{
    depto = sdepto;
}
public void setPreco( double spreco )
{
    preco = spreco;
}
public String getCodigo()
{
    return codigo;
}
public String getNome()
{
    return nome;
}
public String getDepto()
{
    return depto;
}
public double getPreco()
{
    return preco;
}

}

Mavericks

Se vc ñ coloca as instruções do if entre ‘{}’ o compilador vai entender que apenas a primeira instrução após o if faz parte do bloco.

Na classe CadastraProdutos, no último if vc deve colocar a instrução JOptionPane e o break entre ‘{}’.

Mavericks

Se vc ñ coloca as instruções do if entre ‘{}’ o compilador vai entender que apenas a primeira instrução após o if faz parte do bloco.

Na classe CadastraProdutos, no último if vc deve colocar a instrução JOptionPane e o break entre ‘{}’.

Criado 18 de abril de 2008
Ultima resposta 20 de abr. de 2008
Respostas 10
Participantes 6