O problema ocorre quando você lê um valor double usando nextDouble()
ou int usando nextInt()
e, em seguida, lê uma linha inteira usando nextLine()
.
Para corrigir esse problema, você pode adicionar um leitura.nextLine()
logo após a leitura do valor double para consumir a quebra de linha pendente. Assim, a leitura da próxima linha será realizada corretamente.
public static void main(String[] args) {
Scanner leitura = new Scanner(System.in);
System.out.println("Digite seu nome: ");
String nome = leitura.nextLine();
System.out.println("Digite seu saldo: ");
double novoLimite = leitura.nextDouble();
leitura.nextLine();
Conta conta1 = new Conta(nome,novoLimite);
conta1.mostraInfo();
String menu = "-- Menu de interação -- \n1- Nova compra \n2- Sair";
int sair = 0;
while (sair != 2) {
System.out.println("Novo produto: ");
String novoProduto = leitura.nextLine();
System.out.println("Valor: ");
double novoValor = leitura.nextDouble();
leitura.nextLine();
Compra compra1 = new Compra(novoProduto, novoValor);
boolean compraRealizada = conta1.lancaCompra(compra1);
if (compraRealizada) {
System.out.println("Compra realizada!\n");
System.out.println(menu);
sair = leitura.nextInt();
leitura.nextLine();
} else {
System.out.println("Saldo insuficiente!\n");
sair = 2;
leitura.close();
}
}
System.out.println("*******************************");
if(conta1.getCompras().size() > 0) {
System.out.println("COMPRA FINALIZADA: \n");
Collections.sort(conta1.getCompras());
for (Compra compra : conta1.getCompras()) {
System.out.println(compra);
}
} else {
System.out.println("NENHUMA COMPRA REALIZADA!");
}
System.out.println("*******************************\n");
System.out.printf("Saldo atual: R$%.2f \n",conta1.getSaldo());
}
Para não ter essa necessidade de ter que ficar chamando o método nextLine()
, você deve sempre utilizar o método nextLine()
para ler os valores, fazendo a conversão quando não forem String:
public static void main(String[] args) {
Scanner leitura = new Scanner(System.in);
System.out.println("Digite seu nome: ");
String nome = leitura.nextLine();
System.out.println("Digite seu saldo: ");
double novoLimite = Double.parseDouble(leitura.nextLine());
Conta conta1 = new Conta(nome,novoLimite);
conta1.mostraInfo();
String menu = "-- Menu de interação -- \n1- Nova compra \n2- Sair";
int sair = 0;
while (sair != 2) {
System.out.println("Novo produto: ");
String novoProduto = leitura.nextLine();
System.out.println("Valor: ");
double novoValor = Double.parseDouble(leitura.nextLine());
Compra compra1 = new Compra(novoProduto, novoValor);
boolean compraRealizada = conta1.lancaCompra(compra1);
if (compraRealizada) {
System.out.println("Compra realizada!\n");
System.out.println(menu);
sair = Integer.parseInt(leitura.nextLine());
} else {
System.out.println("Saldo insuficiente!\n");
sair = 2;
leitura.close();
}
}
System.out.println("*******************************");
if(conta1.getCompras().size() > 0) {
System.out.println("COMPRA FINALIZADA: \n");
Collections.sort(conta1.getCompras());
for (Compra compra : conta1.getCompras()) {
System.out.println(compra);
}
} else {
System.out.println("NENHUMA COMPRA REALIZADA!");
}
System.out.println("*******************************\n");
System.out.printf("Saldo atual: R$%.2f \n",conta1.getSaldo());
}
}