Failure in swing application response

Asked

Viewed 52 times

1

I have a swing application in which verifying whether the typed word is correct or wrong.

String palavra[] = new String[3];
palavra[0] = "bar";
palavra[1] = "ola";
palavra[2] = "alo";
String p = jTextField1.getText();
int cont = 0;
while (cont < 3) {
    if (palavra[cont].equals(p)) {
        JOptionPane.showMessageDialog(this, "EXISTE");
        jTextField1.setText("");
        break;
    } else {
        JOptionPane.showMessageDialog(this, "NAO EXISTE");
        jTextField1.setText("");
        break;
    }
    cont++;
    // TENTATIVA DELE RETOMAR O LOOP DEPOIS DO BREAK
}

In addition to the first word "bar", I am unable to validate the following. And for many times in the attempt to change the code, I end up going into a looping that keeps returning.

  • Try to explain better what your need is, if possible include an example closer to what is needed so that we can reproduce.

1 answer

2


Your description doesn’t match what’s really going on.

    String palavra[] = new String[3];
    palavra[0] = "bar";
    palavra[1] = "ola";
    palavra[2] = "alo";
    String p = jTextField1.getText();
    int cont = 0;
    while (cont < 3) {
        if (palavra[cont].equals(p)) { // Só verifica aqui uma vez. Porque? Repare o seu else.
           JOptionPane.showMessageDialog(this, "EXISTE");
           jTextField1.setText("");
           break;

        // Se a condição de cima é falsa então você diz aqui para sair do laço,
        // o laço nunca vai dar dois loops, ou seja só vai dar a resposta certa quando
        // o textfield tiver o valor "bar".
        } else {
            JOptionPane.showMessageDialog(this, "NAO EXISTE");
            jTextField1.setText("");
            break; // Manda sair do laço while, sem ao menos ter dado todos os loops.
        }
        cont++;
        // TENTATIVA DELE RETOMAR O LOOP DEPOIS DO BREAK.
    }

The code shows no flaw, the flaw is in the logic of what you want to do.

SOLUTION

I will leave the code well commented for a better understanding. This is one of the ways to solve this problem.

String palavra[] = {"bar", "ola", "alo"}; // Maneira mais elegante de inicializar um vetor
String p = jTextField1.getText(); // Recupera String do componente textfield.
boolean existe = false; // Declaro uma flag que indica se encontrou ou não uma palavra igual.

// Quando você sabe o tamanho máximo que vai percorrer o laço, utilize o for.
for (int i = 0 ; i < 3; i++) {
    if (palavra[i].equals(p)) { // Percorre vetor de acordo com i.
        existe = true; // Altera valor da flag.
        break; // Sai do laço se encontrou palavra igual.
    }
}
if (existe) {//verifica flag
    JOptionPane.showMessageDialog(this, "EXISTE");
} else {
    JOptionPane.showMessageDialog(this, "NAO EXISTE");
}
jTextField1.setText("");
  • This was one of the attempts to be able to display only once the message of whether or not it exists. As I had tried before, in addition to only validating the first word, then I entered a loop that displayed No Exists several times. Tonight I’ll try this stretch, thank you!

  • It worked perfectly and gave me a clear understanding of the logic of what I need.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.