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

O meu

Eu tentei procurar um pouco na internet um jeito de não ficar usando if e else toda hora e meu código acabou ficando um pouco diferente (embora completamente funcional) :


import java.util.Scanner;
public class Desafio {
    public static void main(String[] args) {
        String tipoConta = "Corrente";
        double saldo = 1599.99;
        int opcao = 0;

        Scanner leitura = new Scanner(System.in);
        System.out.println("Digite o seu nome: ");
        String nome = leitura.nextLine();

        System.out.println("**********************************");
        System.out.println("\nNome do cliente: " + nome);
        System.out.println("Tipo Conta: " + tipoConta);
        System.out.println("Saldo atual:" + saldo);
        System.out.println("\n**********************************");

        String menu = """
                ** Digite sua opção: **
                                
                1 - Consultar saldo
                2 - Transferir valor
                3 - Receber valor
                4 - Sair
                """;

        while (opcao != 4) {
            System.out.println(menu);
            opcao = leitura.nextInt();

            switch (opcao) {
                case 1:
                    System.out.println("Seu saldo atual é: " + saldo);
                    break;
                case 2:
                    System.out.println("Insira o valor que deseja inserir: ");
                    double valorTransferencia = leitura.nextDouble();

                    if (saldo >= valorTransferencia) {
                        saldo -= valorTransferencia;
                        System.out.println("Transferência realizada com sucesso! Seu novo saldo é: " + saldo);
                    } else {
                        System.out.println("Saldo insuficiente para realizar a transferência!");
                        break;
                    }
                case 3:
                    System.out.println("Insira o valor a ser recebido: ");
                    double valorRecebido = leitura.nextDouble();
                    saldo += valorRecebido;
                    System.out.println("Valor recebido com sucesso! Seu novo saldo é: " + saldo);
            }
        }
        leitura.close();
    }
}
1 resposta
solução!

Olá, Renato!

Gostei de ver a sua iniciativa de buscar alternativas para evitar o uso excessivo de if e else no seu código. É sempre bom explorar diferentes abordagens para resolver um problema.

Uma alternativa interessante para evitar a repetição de if e else é utilizar o padrão de projeto Strategy. Esse padrão consiste em encapsular diferentes algoritmos em classes separadas e permitir que eles sejam selecionados dinamicamente durante a execução do programa.

No seu caso, você poderia criar uma interface Operacao que define um método executar e implementar diferentes classes para cada operação disponível no menu (consultar saldo, transferir valor, receber valor). Cada classe seria responsável por implementar o método executar de acordo com a operação correspondente.

Dessa forma, ao invés de usar um switch para verificar a opção selecionada, você poderia criar um mapa onde a chave é o número da opção e o valor é a instância da classe correspondente. Assim, você poderia simplesmente chamar o método executar da classe correspondente, sem precisar de if e else repetitivos.

Aqui está um exemplo de como ficaria o código utilizando o padrão Strategy:

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Desafio {
    public static void main(String[] args) {
        String tipoConta = "Corrente";
        double saldo = 1599.99;
        int opcao = 0;

        Scanner leitura = new Scanner(System.in);
        System.out.println("Digite o seu nome: ");
        String nome = leitura.nextLine();

        System.out.println("**********************************");
        System.out.println("\nNome do cliente: " + nome);
        System.out.println("Tipo Conta: " + tipoConta);
        System.out.println("Saldo atual:" + saldo);
        System.out.println("\n**********************************");

        Map<Integer, Operacao> operacoes = new HashMap<>();
        operacoes.put(1, new ConsultarSaldo());
        operacoes.put(2, new TransferirValor());
        operacoes.put(3, new ReceberValor());

        while (opcao != 4) {
            System.out.println(menu);
            opcao = leitura.nextInt();

            if (operacoes.containsKey(opcao)) {
                operacoes.get(opcao).executar(saldo, leitura);
            } else {
                System.out.println("Opção inválida!");
            }
        }

        leitura.close();
    }
}

interface Operacao {
    void executar(double saldo, Scanner leitura);
}

class ConsultarSaldo implements Operacao {
    @Override
    public void executar(double saldo, Scanner leitura) {
        System.out.println("Seu saldo atual é: " + saldo);
    }
}

class TransferirValor implements Operacao {
    @Override
    public void executar(double saldo, Scanner leitura) {
        System.out.println("Insira o valor que deseja transferir: ");
        double valorTransferencia = leitura.nextDouble();

        if (saldo >= valorTransferencia) {
            saldo -= valorTransferencia;
            System.out.println("Transferência realizada com sucesso! Seu novo saldo é: " + saldo);
        } else {
            System.out.println("Saldo insuficiente para realizar a transferência!");
        }
    }
}

class ReceberValor implements Operacao {
    @Override
    public void executar(double saldo, Scanner leitura) {
        System.out.println("Insira o valor a ser recebido: ");
        double valorRecebido = leitura.nextDouble();
        saldo += valorRecebido;
        System.out.println("Valor recebido com sucesso! Seu novo saldo é: " + saldo);
    }
}

Espero que essa abordagem seja útil para você e te ajude a deixar o seu código mais organizado e fácil de manter. Se tiver mais alguma dúvida, é só perguntar!

Bons estudos!