Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Desafio Final, problema no código

Olá, eu estou fazendo o projeto final de criar o banco. Para deixar mais realista tentei fazer um sistema de login, segue o código:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner dados = new Scanner(System.in);
        String nomeUsuario = "";
        String senhaUsuario = "";
        String senhaConfirma = "";

        while (true) {
            System.out.println("""
                    **************************************************
                    Olá, Bem Vindo ao Banco!
                    O que você quer fazer?
                    1- Fazer Login
                    2- Criar Conta
                    3- Sair
                    **************************************************
                    """);
            int primeiraOperacao = dados.nextInt();

            if (primeiraOperacao == 2) {
                System.out.println("""
                        *****************************************************
                        Vamos criar a sua conta!
                        Escolha um nome de usuário:
                        *****************************************************
                        """);
                nomeUsuario = dados.nextLine();

                System.out.println("""
                        *****************************************************
                        Agora escolha uma senha:
                        *****************************************************
                        """);
                senhaUsuario = dados.nextLine();

                System.out.println("""
                        ******************************************************
                        Digite a senha novamente:
                        ******************************************************
                        """);
                senhaConfirma = dados.nextLine();
                if (senhaUsuario == senhaConfirma) {
                    System.out.println("""
                            ********************************************************
                            Conta criada com sucesso!
                            ********************************************************
                            """);

                }

            }
        }
    }
}

Quando eu rodo o código vai tudo certo, até chegar na parte de digitar o nome de usuário. Aí que está o problema, quando chega no ponto onde eu deveria escrever o nome de usuário, ele simplesmente pula e vai pra parte de digitar a senha. Além de que, quando chega na parte onde deveria aparecer "Conta criada com sucesso", ele simplesmente volta para o começo do código, sem mostrar a mensagem. Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidadeAlguém poderia me dizer o que estou fazendo de errado? Obrigado.

1 resposta
solução!

Olá, Calebe! Tudo bem?

O problema que você está enfrentando está relacionado ao uso do método nextLine() após o nextInt(). O nextInt() lê apenas o inteiro digitado, deixando o caractere de quebra de linha no buffer. Quando você chama o nextLine() em seguida, ele lê esse caractere de quebra de linha e "pula" a entrada do nome de usuário. Para resolver esse problema, você pode adicionar um nextLine() após o nextInt(), para consumir esse caractere de quebra de linha. Ficaria assim:

int primeiraOperacao = dados.nextInt();
dados.nextLine(); // adiciona essa linha para consumir o caractere de quebra de linha

if (primeiraOperacao == 2) {
    System.out.println("""
            *****************************************************
            Vamos criar a sua conta!
            Escolha um nome de usuário:
            *****************************************************
            """);
    nomeUsuario = dados.nextLine();

Quanto ao problema de não exibir a mensagem "Conta criada com sucesso", ele ocorre porque você está comparando as senhas com o operador ==, que compara as referências dos objetos e não o conteúdo das strings. Para comparar o conteúdo das strings, você deve usar o método equals(). Ficaria assim:

if (senhaUsuario.equals(senhaConfirma)) {
    System.out.println("""
            ********************************************************
            Conta criada com sucesso!
            ********************************************************
            """);
    break; // adiciona essa linha para sair do loop após criar a conta
}

Note que adicionei um break após a mensagem de sucesso, para sair do loop e encerrar o programa após criar a conta. Espero ter ajudado e bons estudos!