Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Laço de repetição(while) e validação(if)

Não consegui encontrar um tópico exato, pois envolve metodos, mas como o problema está no while, resolvi postar aqui (se estiver errado, sorry)

Galera, ao tentar rodar este código fonte pelo CMD (Prompt =)), eu estou com dois probleminhas:

1º Se o usuário não inserir nenhum valor (Sendo ele String, é NULL) como eu faço para aplicar um tratamento? if(!qlqrcoisa.getNome().equals(null)) ?

2º No final, o usuário tem três opções: [1] para refazer a operação; [2] para sair e caso não sejam um destes dois, deveria retornar para a pergunta "JOptionPane.showMessageDialog(null, "Informacao invalida. As opções são 1 e 2 apenas..");"

import javax.swing.JOptionPane;
import javafx.application.Application;
import java.util.Scanner;

public class EntradaDeDados {

    public static void main(String args[])    {

        QualquerCoisa qlcoisa = new QualquerCoisa();
        boolean repeticao = true;
        int repetidor;

    while(repeticao == true){
         qlcoisa.setNome(JOptionPane.showInputDialog(null,
                                    "Digite seu nome",
                                    "Cadastro de Cliente",
                                    3));
        if(qlcoisa.getNome().equals(null)) { JOptionPane.showMessageDialog(null, "Voce nao inseriu seu nome.");
        repeticao = true;
        } else { repeticao = false;
        }

        qlcoisa.setIdade(JOptionPane.showInputDialog(null,
                                    "Digite sua idade",
                                    "Cadastro de Cliente",
                                    3));
        if(qlcoisa.getIdade().equals(null)) { JOptionPane.showMessageDialog(null, "Voce nao inseriu seu nome.");
        repeticao = true;
        } else {  repeticao = false;
        }

        JOptionPane.showMessageDialog(null, "Nome: "
            + qlcoisa.getNome() + "\nIdade:" + qlcoisa.getIdade());

        repetidor = Integer.parseInt(JOptionPane.showInputDialog(null,
                                    "Deseja realizar uma nova operacao? \nDigite 1 para SIM e 2 para NAO.", 2));


         try{ if(repetidor == 1){
                JOptionPane.showMessageDialog(null, "Voce optou por realizar uma nova operacao. \n:)");
                repeticao = true;
            } else if(repetidor == 2) {
                JOptionPane.showMessageDialog(null, "Voce optou por sair. Obrigado por usar nosso aplicativo.\n:)");
                System.exit(0);

            } else { 
                JOptionPane.showMessageDialog(null, "Informacao invalida. As opções são 1 e 2 apenas..");
                System.exit(0);
            }} 
            //} catch (Exception a) { JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)"); 
             catch (NumberFormatException ab) { 
                    JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)"); 
            } catch (ArrayIndexOutOfBoundsException e) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
            } catch (NullPointerException ar) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
            } catch (StringIndexOutOfBoundsException at) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
            } catch (Throwable aw) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
                aw.printStackTrace();
            }
        }     
    }
}

classe dos metodos:

public class QualquerCoisa {
        public String nome;
        public String idade;
        //public String repetidor;

        public void setNome(String nomee){
            this.nome = nomee;
        }
        public String getNome(){
            return this.nome;
        }
        public void setIdade(String idadee){
            this.idade = idadee;
        }
        public String getIdade(){
            return this.idade;
        }
        /*public void setRepetidor(String repetidorr){
            this.repetidor = repetidorr;
        }
        public String getRepetidor(){
            return this.repetidor;
        }*/
}

Obrigado!

9 respostas

No caso da validação com null, você deve fazer com o operador '==', no caso:

if(qlqrcoisa.getNome() != null)

Quanto à segunda pergunta não entendi muito bem. Você quer continuar no programa?

@Hugo, obrigado!

Sim, eu quero que - em caso do usuário digitar um número qualquer que não seja 1 nem 2 - o programe continue. Porém, o programa não continua, ele encerra e eu preciso que ele continue e fique dentro do laço If até o usuário digitar 1 ou 2.

solução!

Coloquei pra rodar o programa aqui. Se você está se referindo à acentuação zoada que sai na mensagem, você deve pedir pro java compilar passando o encode utf8.

No caso,

javac -encoding utf8 EntradaDeDados.java

Aí você pode rodar que os acentos aparecerão certos.

Entendi!

Nesse caso, o ideal é colocar ele dentro de um while(true) e assim você controla quando você quiser sair do programa com um break.

Edit: Ah, vi que você tem uma variável de repetição. Só tirar a opção de sair e setar pra true lá.

} else {
   JOptionPane.showMessageDialog(null, "Informacao invalida. As opções são 1 e 2 apenas..");  
   repeticao = true;
}

Vou tentar! obrigado man!!!

Este cara nao funcionou:

if(qlqrcoisa.getNome() != null)

Error: cannot find symbol

e, o outro caso, ele funciona uma vez. Se eu tentar realizar uma nova operação pela segunda vez, ele encerra o programa mesmo assim. =(

import javax.swing.JOptionPane;
import javafx.application.Application;
import java.util.Scanner;

public class EntradaDeDados {

    public static void main(String args[])    {

        QualquerCoisa qlcoisa = new QualquerCoisa();
        boolean repeticao = true;
        boolean repetir = true;
        int repetidor;

    while(repeticao == true){
         qlcoisa.setNome(JOptionPane.showInputDialog(null,
                                    "Digite seu nome",
                                    "Cadastro de Cliente",
                                    3));
        if(qlcoisa.getNome().equals(null)) { JOptionPane.showMessageDialog(null, "Voce nao inseriu seu nome.");
        repeticao = true;
        } else { repeticao = false;
        }

        qlcoisa.setIdade(JOptionPane.showInputDialog(null,
                                    "Digite sua idade",
                                    "Cadastro de Cliente",
                                    3));
        if(qlcoisa.getIdade().equals(null)) { JOptionPane.showMessageDialog(null, "Voce nao inseriu seu nome.");
        repeticao = true;
        } else {  repeticao = false;
        }

        JOptionPane.showMessageDialog(null, "Nome: "
            + qlcoisa.getNome() + "\nIdade:" + qlcoisa.getIdade());
        break;
        }

        while(repetir == true){
        repetidor = Integer.parseInt(JOptionPane.showInputDialog(null,
                                    "Deseja realizar uma nova operacao? \nDigite 1 para SIM e 2 para NAO.", 2));

         try{
             if(repetidor == 1){
                JOptionPane.showMessageDialog(null, "Voce optou por realizar uma nova operacao. \n:)");
                repetir = false;

            } else if(repetidor == 2) {
                JOptionPane.showMessageDialog(null, "Voce optou por sair. Obrigado por usar nosso aplicativo.\n:)");
                System.exit(0);

            } else { 
                JOptionPane.showMessageDialog(null, "Informacao invalida.");
                }
            }                        
             catch (NumberFormatException ab) { 
                    JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)"); 
            } catch (ArrayIndexOutOfBoundsException e) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
            }//catch (Exception ae) {
                //JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
             catch (NullPointerException ar) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
            } catch (StringIndexOutOfBoundsException at) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
            } catch (Throwable aw) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
                aw.printStackTrace();
            }
        }

    }
}

Bom, no seu código está como equals, então o operador seria '=='. Eu coloquei o '!=' por causa do seu exemplo na pergunta, apenas. :P

Qual o cenário que você está testando? Inserir um? Cancelar outro?

ah sim, eu corrigi o nome do objeto e alterei o parâmetro de != null para ==. Mas, mesmo assim, não funciona. Nem com == e nem com equals. =(

Eu quero que sirva de filtro, mas acho que não vai rolar, somente com exception mesmo.

Outra coisa que eu quero é que, no final do programa, o usuário é questionado a continuar [1] ou sair [2]. Caso o número inserido não seja 1 ou 2, o programa continua pergutando (até aí funciona), mas quando vc digita 1 para continuar, o programa encerra (nessa hora, o programa deveria voltar para o primeiro laço de While).

É isso =)

Segue abaixo novo codigo com os ajutes

import javax.swing.JOptionPane;
import javafx.application.Application;
import java.util.Scanner;

public class EntradaDeDados {

    public static void main(String args[])    {

        QualquerCoisa qlcoisa = new QualquerCoisa();
        boolean repeticao = true;
        boolean repetir = true;
        int repetidor;

    while(repeticao == true){
         qlcoisa.setNome(JOptionPane.showInputDialog(null,
                                    "Digite seu nome",
                                    "Cadastro de Cliente",
                                    3));
        if(qlcoisa.getNome().equals(null)) { JOptionPane.showMessageDialog(null, "Voce nao inseriu seu nome.");
        repeticao = true;
        } else { repeticao = false;
        }

        qlcoisa.setIdade(JOptionPane.showInputDialog(null,
                                    "Digite sua idade",
                                    "Cadastro de Cliente",
                                    3));
        if(qlcoisa.getIdade().equals(null)) { JOptionPane.showMessageDialog(null, "Voce nao inseriu seu nome.");
        repeticao = true;
        } else {  repeticao = false;
        }

        JOptionPane.showMessageDialog(null, "Nome: "
            + qlcoisa.getNome() + "\nIdade:" + qlcoisa.getIdade());
        break;
        }

        while(repetir == true){
        repetidor = Integer.parseInt(JOptionPane.showInputDialog(null,
                                    "Deseja realizar uma nova operacao? \nDigite 1 para SIM e 2 para NAO.", 2));

         try{
             if(repetidor == 1){
                JOptionPane.showMessageDialog(null, "Voce optou por realizar uma nova operacao. \n:)");
                repetir = false;
                break;

            } else if(repetidor == 2) {
                JOptionPane.showMessageDialog(null, "Voce optou por sair. Obrigado por usar nosso aplicativo.\n:)");
                System.exit(0);

            } else { 
                JOptionPane.showMessageDialog(null, "Informacao invalida.");
                }
            }                        
             catch (NumberFormatException ab) { 
                    JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)"); 
            } catch (ArrayIndexOutOfBoundsException e) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
            }//catch (Exception ae) {
                //JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
             catch (NullPointerException ar) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
            } catch (StringIndexOutOfBoundsException at) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
            } catch (Throwable aw) {
                JOptionPane.showMessageDialog(null, "Voce inseriuu um valor errado. \ntry again.\n:)");
                aw.printStackTrace();
            }
        }
    }
}

Não entendi muito bem porque sua comparação com null deu errado, até pq nem no código que você postou está.

Quanto à saida quando seleciona a opção 1, isso se dá porque no código tem a opção break, que simplesmente sai do laço while e, consequentemente, do programa.