Olá, Edmilson! Tudo bem?
Poderia enviar o seu código aqui no post do fórum para eu dar uma olhada? Esse erro pode acontecer quando o valor digitado pelo usuário não é do tipo esperado pelo programa.
public class BytebankApplication {
private static ContaService service = new ContaService();
private static Scanner teclado = new Scanner(System.in).useDelimiter("\n");
public static void main(String[] args) {
var opcao = exibirMenu();
while (opcao != 7) {
try {
switch (opcao) {
case 1:
listarContas();
break;
case 2:
abrirConta();
break;
case 3:
encerrarConta();
break;
case 4:
consultarSaldo();
break;
case 5:
realizarSaque();
break;
case 6:
realizarDeposito();
break;
}
} catch (RegraDeNegocioException e) {
System.out.println("Erro: " +e.getMessage());
System.out.println("Pressione qualquer tecla e de ENTER para voltar ao menu");
teclado.next();
}
opcao = exibirMenu();
}
System.out.println("Finalizando a aplicação.");
}
private static int exibirMenu() {
System.out.println("""
BYTEBANK - ESCOLHA UMA OPÇÃO:
1 - Listar contas abertas
2 - Abertura de conta
3 - Encerramento de conta
4 - Consultar saldo de uma conta
5 - Realizar saque em uma conta
6 - Realizar depósito em uma conta
7 - Sair
""");
return teclado.nextInt();
}
private static void listarContas() {
System.out.println("Contas cadastradas:");
var contas = service.listarContasAbertas();
contas.stream().forEach(System.out::println);
System.out.println("Pressione qualquer tecla e de ENTER para voltar ao menu principal");
teclado.next();
}
private static void abrirConta() {
System.out.println("Digite o número da conta:");
var numeroDaConta = teclado.nextInt();
System.out.println("Digite o nome do cliente:");
var nome = teclado.next();
System.out.println("Digite o cpf do cliente:");
var cpf = teclado.next();
System.out.println("Digite o email do cliente:");
var email = teclado.next();
service.abrir(new DadosAberturaConta(numeroDaConta, new DadosCadastroCliente(nome, cpf, email)));
System.out.println("Conta aberta com sucesso!");
System.out.println("Pressione ENTER para voltar ao menu principal");
teclado.next();
}
private static void encerrarConta() {
System.out.println("Digite o número da conta:");
var numeroDaConta = teclado.nextInt();
service.encerrar(numeroDaConta);
System.out.println("Conta encerrada com sucesso!");
System.out.println("Pressione qualquer tecla e de ENTER para voltar ao menu principal");
teclado.next();
}
private static void consultarSaldo() {
System.out.println("Digite o número da conta:");
var numeroDaConta = teclado.nextInt();
var saldo = service.consultarSaldo(numeroDaConta);
System.out.println("Saldo da conta: " +saldo);
System.out.println("Pressione qualquer tecla e de ENTER para voltar ao menu principal");
teclado.next();
}
private static void realizarSaque() {
System.out.println("Digite o número da conta:");
var numeroDaConta = teclado.nextInt();
System.out.println("Digite o valor do saque:");
var valor = teclado.nextBigDecimal();
service.realizarSaque(numeroDaConta, valor);
System.out.println("Saque realizado com sucesso!");
System.out.println("Pressione qualquer tecla e de ENTER para voltar ao menu principal");
teclado.next();
}
private static void realizarDeposito() {
System.out.println("Digite o número da conta:");
var numeroDaConta = teclado.nextInt();
System.out.println("Digite o valor do depósito:");
var valor = teclado.nextBigDecimal();
service.realizarDeposito(numeroDaConta, valor);
System.out.println("Depósito realizado com sucesso!");
System.out.println("Pressione qualquer tecla e de ENTER para voltar ao menu principal");
teclado.next();
}
}
Edmilson, copiei seu código e consegui rodar sem problemas aqui na minha máquina
Você consegue colocar um break point ou log na linha 63?
var numeroDaConta = teclado.nextInt();
está dando o mesmo problema comigo, BYTEBANK - ESCOLHA UMA OP��O: 1 - Listar contas abertas 2 - Abertura de conta 3 - Encerramento de conta 4 - Consultar saldo de uma conta 5 - Realizar saque em uma conta 6 - Realizar dep�sito em uma conta 7 - Sair
2 Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor(Scanner.java:943) at java.base/java.util.Scanner.next(Scanner.java:1598) at java.base/java.util.Scanner.nextInt(Scanner.java:2263) at java.base/java.util.Scanner.nextInt(Scanner.java:2217) at br.com.alura.bytebank.BytebankApplication.exibirMenu(BytebankApplication.java:61) at br.com.alura.bytebank.BytebankApplication.main(BytebankApplication.java:16)
No IntelliJ IDEA 2023.1 (Community Edition) não apresenta esse erro, o erro é apenas no Eclipse.
Estou baixando já obrigado!
Estou começando a ficar desanimado com esses cursos da Alura.
Não alterei nada, então nem precisa pedir meu código (simplesmente baixei a versão passada). A outra versão desse mesmo curso é horrível, agora essa nova versão já é assim??? O cara ao invés de usar a IDE mais utilizada pelos alunos (certeza que é o eclipse), usa logo uma paga? Ah...
BYTEBANK - ESCOLHA UMA OPÇÃO: 1 - Listar contas abertas 2 - Abertura de conta 3 - Encerramento de conta 4 - Consultar saldo de uma conta 5 - Realizar saque em uma conta 6 - Realizar depósito em uma conta 7 - Sair
1 Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor(Scanner.java:939) at java.base/java.util.Scanner.next(Scanner.java:1594) at java.base/java.util.Scanner.nextInt(Scanner.java:2258) at java.base/java.util.Scanner.nextInt(Scanner.java:2212) at br.com.alura.bytebank.BytebankApplication.exibirMenu(BytebankApplication.java:61) at br.com.alura.bytebank.BytebankApplication.main(BytebankApplication.java:16)
rodei no intelliJ e deu certo
Boa noite Eu estou usando a IDE eclipse.. Apresentou esse mesmo problema! Na linha 14, esta assim: private static Scanner teclado = new Scanner(System.in).useDelimiter("\n"); Então retirei o useDelimiter("\n") e funcionou.
No meu resolveu trocando
private static Scanner teclado = new Scanner(System.in).useDelimiter("\n");
Por
private static Scanner teclado = new Scanner(System.in).useDelimiter("\r\n");
Sergio se você gosta de coisas prontas você está no ramo errado, está dando erro corra atras pra descobrir como concertar se vc quer seguir nessa função de dev, vai ter que se acostumar a isso.
private static Scanner teclado = new Scanner(System.in).useDelimiter("\n");
A minha IDE é o eclipse e resolveu tirando o .useDelimiter("\n") Alguém sabe explicar o por que que no intelliJ funcionar com o .useDelimiter("\n") e no eclipse não ? Estranho funcionar em uma IDE e na outra não, não faz muito sentido isso