Porque o loop é lido em vazio antes?

Eu estou tentando fazer um certo loop com métodos a madrugada inteira… é um programa simples ( e sei que existem maneiras mais fáceis de se fazer o mesmo), mas é justamente pra eu treinar a logica dos métodos. Enfim, criei esse código que tem um método que pergunta para o usuário 2 números, e faz a soma entre eles. Logo após tem um método perguntando se o usuário quer fazer outra soma, até ai tudo bem. Mas por algum motivo, logo depois de fazer a primeira soma, ele corre o método que serve para perguntar se o usuária quer fazer outra soma como se não tivesse “break” no “switch” que tem lá. Alguém sabe me dizer o que tá acontecendo???

Código:

package Exemplo;

import java.util.Scanner;

public class Codigo {
	
	static Scanner scanner = new Scanner (System.in);
	
	public static void somar() {
		
		System.out.println("Digite o primeiro numero: ");
		double a = scanner.nextDouble();
		
		System.out.println("Digite o segundo numero: ");
		double b = scanner.nextDouble();
		
		double soma = a + b;
		System.out.println("\nO resultado da soma é: "+ soma);
	}
	
	public static void somarNovamente() {
		
		System.out.println("\nDeseja fazer outra soma?\nDigite 's' para sim\nDigite 'n' para não");
		String resposta = scanner.nextLine();
		
		switch(resposta) {
		case "s": somar();
		somarNovamente();
		break;
		
		case "n": System.out.println("Codigo encerrado.");
		scanner.close();
		break;
		
		default: System.out.println("Opção não reconhecida.");
		somarNovamente();
		break;
		}
		
	}
	
public static void main(String[] args) {
	 
	System.out.println("Bem vindo ao codigo de soma.");
	somar();
	somarNovamente();
	
 }
}

Exemplo de como seria se tudo estivesse OK, no console:

Bem vindo ao código de soma.
Digite o primeiro numero
usuário coloca o primeiro numero
Digite o segundo numero:
usuário coloca o primeiro numero


A soma dos números é: (soma dos números inseridos)
Deseja fazer outra soma?
Usuário responde “n”
Código encerrado.

O que realmente acontece:

Bem vindo ao código de soma.
Digite o primeiro numero
*usuário coloca o primeiro numero*
Digite o segundo numero:
*usuário coloca o primeiro numero*

A soma dos números é: (soma dos números inseridos)

Deseja fazer outra soma?
Digite ‘s’ para sim
Digite ‘n’ para não
Opção não reconhecida. Isso não deveria aparecer (Como resolver???)


Deseja fazer outra soma?
*Usuário responde "n"*
Código encerrado.

Há centenas de posts com o mesmo problema no forum.
Para ler do teclado com a classe Scanner deves usar somente o nextLine() ou garantir que consomes o enter que fica “perdido” do nextDouble()

O nextDouble lê apenas o número, deixando o enter no buffer. O nextLine que fazes depois, vê que há conteúdo no buffer e lê, sem pedir ao utilizador.

1 curtida