2
respostas

Dúvida no Scaner

Eu preciso criar um novo objeto Scanner a cada vez que eu desejo ler uma entrada de dados? Ou eu posso usar o mesmo objeto Scanner? Exemplo: Primeiras linhas do Código Scanner scanner = new Scanner(System.in); Vamor dizer que eu preciso criar um While ou If com Int ou Double : int numeroInteiro = scanner.nextInt(); ou double numeroDecimal = scanner.nextDouble(); esse Scanner criado nas primeiras linhas lerá tudo que estiver abaixo dele? Não sei se minha pergunta ficou clara.

2 respostas
import java.util.Scanner;
public class ContaBancaria {
    public static void main(String[] args) {
        // Exibe mensagem de Bem - Vindo e Dados do Cliente
        System.out.println("*****************************");
        System.out.println("\nBem-vindo ao Banco João Curuca");
        System.out.println(" Dados do Cliente : ");
        int opcao = 0;
        // Leitor nome do Cliente
        System.out.println("Qual o seu nome?");
        Scanner leitorNome = new Scanner(System.in);
        String nomeCliente = leitorNome.nextLine();
        // Tipo de Conta
        String tipoConta;
        double saldoConta = 0.0;
        // Loop para visualizar Saldo e escolher tipo de conta
        while (true) {
            System.out.println("Conta Corrente ou Conta Poupança ?");
            Scanner leitorConta = new Scanner(System.in);
            tipoConta = leitorConta.nextLine();
            if (tipoConta.equalsIgnoreCase("Conta Corrente")) {
                saldoConta = 2000.0;
                break;
            } else if (tipoConta.equalsIgnoreCase("Conta Poupança")) {
                saldoConta = 4500.0;
                break;
            } else {
                System.out.println("Tipo de conta inválida !");
            }
        }
        // Exibe os Dados do Cliente e Saldo
        System.out.println("**********************************");
        System.out.println("\nBanco João Curuca");
        System.out.println("Cliente : " + nomeCliente + "!");
        System.out.println("Tipo de Conta : " + tipoConta);
        System.out.println("Saldo em Conta : " + saldoConta);
        System.out.println("\n**********************************");
        //Menu de Opções
        String menu = """
                ** Digite sua Opção
                1. Consultar Saldo
                2. Transferência 
                3. Receber Valor
                4. Trocar de Conta
                5. Sair
                """;
        // Leitura de Opções
        Scanner leituraOpcao = new Scanner(System.in);
        while (opcao != 5) {
            System.out.println(menu);
            opcao = leituraOpcao.nextInt();
            if (opcao == 1) {
                System.out.println("#########################");
                System.out.println("\nSaldo atual : " + saldoConta);
                System.out.println("\n#########################");
            } else if (opcao == 2) {
                System.out.println("Qual o valor da transferência? :");
                double valorTransf = leituraOpcao.nextDouble();
                if (valorTransf > saldoConta) {
                    System.out.println("###################");
                    System.out.println("\nSaldo insuficiente :");
                    System.out.println("\n######################");
                } else {
                    saldoConta -= valorTransf;
                    System.out.println("###########################");
                    System.out.println("\nSaldo atualizado :" + saldoConta);
                    System.out.println("\n##########################");
                }
            } else if (opcao == 3) {
                System.out.println("Valor Recebido :");
                double valorTransf = leituraOpcao.nextDouble();
                saldoConta += valorTransf;
                System.out.println("####################");
                System.out.println("\nSaldo atualizado :" + saldoConta);
                System.out.println("\n###################");
            } else if (opcao == 4) {
                // Trocar de Conta
                while (true) {
                    System.out.println("Conta Corrente ou Conta Poupança ?");
                    Scanner leitorConta = new Scanner(System.in);
                    tipoConta = leitorConta.nextLine();
                    if (tipoConta.equalsIgnoreCase("Conta Corrente")) {
                        saldoConta = 2000.0;
                        break;
                    } else if (tipoConta.equalsIgnoreCase("Conta Poupança")) {
                        saldoConta = 4500.0;
                        break;
                    } else {
                        System.out.println("Tipo de conta inválida !");
                    }
                }
                System.out.println("**********************************");
                System.out.println("\nBanco João Curuca");
                System.out.println("Cliente : " + nomeCliente + "!");
                System.out.println("Tipo de Conta : " + tipoConta);
                System.out.println("Saldo em Conta : " + saldoConta);
                System.out.println("\n**********************************");
            } else if (opcao != 5) {
                System.out.println("################");
                System.out.println("\nOpção inválida :");
                System.out.println("\n########");
            }
        }
    }
}

Olá André, tudo bem com você?

Não precisamos criar um novo objeto Scanner a cada vez que desejamos ler uma entrada de dados. O mesmo objeto Scanner pode ser usado para ler várias entradas de dados. No seu exemplo, uma vez que você criou o objeto Scanner na linha Scanner scanner = new Scanner(System.in);, você pode usar esse mesmo objeto para ler várias entradas de dados, seja elas int, double, String, etc.

Por exemplo:

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
      
        Scanner scanner = new Scanner(System.in); 
        int numeroInteiro = scanner.nextInt(); 
        double numeroDecimal = scanner.nextDouble();
        scanner.nextLine();
        String texto = scanner.nextLine();

        System.out.println("Número inteiro digitado: " + numeroInteiro);
        System.out.println("Número decimal digitado: " + numeroDecimal);
        System.out.println("Texto digitado: " + texto);
    }

}

Neste exemplo, o mesmo objeto Scanner é usado para ler um número inteiro, um número decimal e uma linha de texto. O Scanner lerá as entradas na ordem em que as instruções são executadas. Então, primeiro ele lê o número inteiro, depois o número decimal e, por fim, a linha de texto.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!