[RESOLVIDO] Por que não sai da repetição?

Oi! Gostaria de saber por que não sai da repetição do “do/while” quando eu digito “d” no menu de opções.

case 3:
        tempLog = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite seu login"));
        tempPwd = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite sua senha"));

        for (int i = 0; i < cont; i++) {
            if (conta[i].autenticacao(tempLog, tempPwd)) {
                do {
                opt = JOptionPane.showInputDialog(null, ""+
                        "a. Depósito\n" +
                        "b. Retirada\n" +
                        "c. Consultar Saldo\n" +
                        "d. Voltar ao menu anterior");

                    switch (opt.toLowerCase()) {
                        case "a":
                            valor = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o valor para depositar!"));
                            conta[i].depositar(valor);
                            JOptionPane.showMessageDialog(null, "Valor depositado: " + valor + "\nSaldo atual: " + conta[i].getSaldoDaConta());
                            break;

                        case "b":
                            valor = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o valor para retirar!"));

                            if (conta[i].retirar(valor)) {
                                JOptionPane.showMessageDialog(null, "Valor sacado: " + valor + ", \nSaldo atual: " + conta[i].getSaldoDaConta());
                            } else {
                                JOptionPane.showMessageDialog(null, "ERRO! \nValor que você tentou sacar: " + valor + " \nSaldo atual: " + conta[i].getSaldoDaConta());
                            }
                            break;

                        case "c":
                            conta[i].getSaldoDaConta();
                            JOptionPane.showMessageDialog(null, "Saldo atual: " + conta[i].getSaldoDaConta());
                            break;
                    }
                } while (opt.equals("d")); // eu estava usando opt!="d", mas deu no mesmo...
                System.out.println("saiu do while / atingiu o for"); // nunca recebo esse output!
            }
        }

Bom… Você esta falando pro laço continuar enquanto a opção seja igual a d

Coloque uma ! (exclamação antes de opt)

while (!opt.equals("d"))
1 curtida

Caaaara… que erro bobo… Obrigado! Era isso mesmo. Mas consegue me dizer por que não funcionou com o “!=”?

O == verifica se os objetos são iguais ou se ocupam o mesmo lugar na memória, já o equals verifica o conteúdo.

!= significa: se o objeto não ocupa o mesmo lugar na memoria
!string.equals(string) significa: se o conteúdo for diferente

Ou seja, não ocupar o mesmo lugar na memória é diferente de conteúdo diferente.

Se o problema foi resolvido, considere marcar a minha resposta como SOLUÇÃO e colocar [RESOLVIDO] no nome do tópico

:+1:

1 curtida