Aqui minha versão do desafio. Suiei muito a camisa pra deixar o mais funcional possível mas acredito ter feito um bom trabalho depois de ter lido bastante a documentação do Java.
import java.util.Scanner;
public class Desafio {
static String endingMessage= "O Banco Imaginário Agradece. Tenha um bom dia!";
public static String menu = """
O que deseja fazer hoje?
1 - Verificar Saldo
2 - Fazer Depósito
3 - Fazer Retirada
4 - Sair
""";
static String currentBalanceMessage = "Seu saldo atual é de %.2f";
static Scanner input = new Scanner(System.in);
static int operationNumber = 0;
static float accountBalance = 2500;
static String errorMessage = "Opção inválida. Tente outra vez";
public static boolean continueOperations = true;
public static boolean newOperationCheck(boolean j) {
j = true;
System.out.println(continueOperations);
while (continueOperations) {
System.out.println("""
Deseja realizar mais alguma operação?\n
1 - Sim
2 - Não
""");
int i = input.nextInt();
switch (i) {
case 1:
getOperationNumber();
break;
case 2:
System.out.println(endingMessage);
j = false;
continueOperations = false;
break;
default:
System.out.println(errorMessage);
}
}
return j;
}
public static boolean loop(boolean i) {
i = true;
switch (operationNumber) {
case 1:
System.out.println(currentBalanceMessage.formatted(accountBalance) + "\n");
newOperationCheck(i);
break;
case 2:
System.out.println("Informe o valor a ser depositado:\n");
int addBalance;
addBalance = input.nextInt();
accountBalance += addBalance;
System.out.println(currentBalanceMessage.formatted(accountBalance));
newOperationCheck(i);
break;
case 3:
System.out.println("Informe o valor a ser retirado:\n");
int subBalance;
subBalance = input.nextInt();
while (subBalance > accountBalance) {
System.out.println("Valor não disponível. Tente outro valor");
System.out.println("Informe o valor a ser retirado:\n");
subBalance = input.nextInt();
}
accountBalance -= subBalance;
System.out.println(currentBalanceMessage.formatted(accountBalance));
newOperationCheck(i);
break;
case 4:
System.out.println(endingMessage);
break;
default:
operationNumber = 0;
System.out.println(errorMessage + "\n");
System.out.println(menu);
operationNumber = input.nextInt();
getOperationNumber();
break;
}
return i;
}
public static void getOperationNumber() {
while (continueOperations) {
System.out.println(menu);
operationNumber = input.nextInt();
loop(continueOperations);
break;
}
}
public static void main(String[] args) {
String costumerName = "Clark Kent";
String accountType = "Conta Corrente";
String welcomeMessage = """
*****************************
Bem vindo ao Banco Imaginário
Nome do Cliente: %s
Tipo de Conta: %s
Saldo atual da Conta: %.2f
*****************************
""".formatted(costumerName, accountType, accountBalance);
System.out.println(welcomeMessage);
getOperationNumber();
}
}
Aberto a críticas de como posso deixar o código mais limpo ou enxuto (apesar de que dei meu melhor pra deixá-lo bem enxuto já como está). Agradeço a todos pelos insights desde já!