Failure in swing application response

1

I have a swing application in which I verify whether the word entered is right 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 not able to validate the following. And for many times in trying to change the code, I end up going into a looping that keeps returning. There are several times.

    
asked by anonymous 16.04.2015 / 03:41

1 answer

2

By its description it does not match what is really happening.

    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 does not show any fault, the fault is in the logic of what you want to do.

SOLUTION

I will comment on the code 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("");
    
16.04.2015 / 04:43