Codigo ficou muito bom, fizeste um excelente trabalho utilizando o while para ter multiplas intercalacoes entre escolhas para o usuario. Contudo, ha algumas possiveis melhorias de implementacao para sua aplicacao que a deixaria mais enxuta e legivel.
Uma possivel melhoria, trocar a parte do seu codigo:
System.out.println("**********************************************************");
System.out.println("Nome do ciente: " + nome + "\n" +
"Tipo de conta: " + tipoConta + "\n" +
"Saldo atual: " + saldo);
System.out.println("**********************************************************");
por um multiple line como voce fez na variavel menu
, ficando assim:
System.out.printf("""
**********************************************************
Nome do ciente: %s
Tipo de conta: %s
Saldo atual: %.2f
**********************************************************
""".formatted(nome, tipoConta, saldo));
Outra coisa, seria remover esse encadeamento de if else do codigo, passando apenas ifs o chamado Early return
ou Guard clauses
. Isso facilita a leitura, ja que remove todo aquele encadeamento e identacao forcada, o que prejudica outras pessoas lerem o codigo. O seu codigo esta assim:
if(opcao == 1){
System.out.println("Seu saldo atual é: R$ " + saldo + "\n");
}else if(opcao == 2){
System.out.println("Digite o valor do depósito: ");
valor = leitura.nextDouble();
saldo += valor;
System.out.println("Você depositou: R$ " + valor +
"\nSaldo atualizado: " + saldo);
} else if (opcao == 3) {
System.out.println("Digite o valor da transferência: ");
valor = leitura.nextDouble();
saldo -= valor;
if (valor > saldo){
System.out.println("Saldo insuficiente!");
}else{
System.out.println("Você transferiu: R$ " + valor +
"\nSaldo atualizado: " + saldo);
}
} else if (opcao != 1) {
System.out.println("Opção Invalida!\n"); //Retorna erro para opção inválida
}
isso e muito ruim de ler, nao que esteja errado, mas ha como melhorar como eu disse, fazendo assim:
if(opcao == 1) IO.printf("Seu saldo atual é: R$ %.2f%n",saldo);
if(opcao == 2){
IO.println("Digite o valor do depósito: ");
valor = leitura.readDouble();
saldo += valor;
IO.printf("Você depositou: R$ %.2f %nSaldo atualizado: %.2f%n", valor, saldo);
}
if (opcao == 3) {
IO.println("Digite o valor da transferência: ");
valor = leitura.readDouble();
if (valor <= saldo){
saldo -= valor;
IO.printf("Você transferiu: R$ %.2f %nSaldo atualizado: %.2f", valor, saldo);
continue;
}
IO.println("Saldo insuficiente!");
}
System.out.println("Opção Invalida!\n");
ou entao, voce pode trocar por um switch, evitando assim usar if else encadeado:
switch (opcao) {
case 1 -> IO.printf("Seu saldo atual é: R$ %.2f%n", saldo);
case 2 -> {
IO.println("Digite o valor do depósito: ");
valor = leitura.readDouble();
saldo += valor;
IO.printf("Você depositou: R$ %.2f %nSaldo atualizado: %.2f%n", valor, saldo);
}
case 3 -> {
IO.println("Digite o valor da transferência: ");
valor = leitura.readDouble();
if (valor <= saldo) {
saldo -= valor;
IO.printf("Você transferiu: R$ %.2f%nSaldo atualizado: %.2f%n", valor, saldo);
continue;
}
IO.println("Saldo insuficiente!");
}
case 4 -> IO.println("Saindo...");
default -> System.out.println("Opção inválida!\n");
}