Do While passa direto

Bom dia/Boa tarde/ Boa noite. Eu estou com um probleminha no meu código, pois assim que o compilo o do while simplesmente não permite que eu escreva a opção se quero ou não continuar.
Dessa forma assim que eu digito o numero ele logo segue para o sout abaixo.

MEU CODIGO:

Scanner t = new Scanner(System.in);
int n, s = 0;
String resp;

do {
	System.out.println("Insira um número");
	n = t.nextInt();
	s += n;
	System.out.println("Quer continuar? [S/N] ");
	resp = t.nextLine();
} while(resp.equals("S"));

System.out.println("A Soma dos números é: "+s);

QUANDO COMPILO:

Insira um número 
3
Quer continuar? [S/N] 
A Soma dos números é: 3

Vocês sabem o que acontece e como consertar?

Para entender como o scanner funciona, veja: Diferença entre next() e nextLine() (tem uma resposta minha e outra do @staroski.

No seu código, ao executar nextInt e entrar com a informação, o scanner leu o número informado + o caractere de nova linha (do enter que vc apertou para enviar o número). Em seguida, quando o nextLine é executado, ele vai ler a quebra de linha que restou da última entrada e, por isso, já vai sair do while (pois quebra de linha é diferente de S).

Para resolver, vc pode mudar a leitura do número para ficar assim:

n = Integer.parseInt(t.nextLine());

Isso fará com que a quebra de linha já seja lida pelo scanner deixando o buffer vazio para a próxima leitura (se vc ler o link que passei, tem um bom exemplo explicando lah). Flws!

2 curtidas

Muito obrigada, eu vou dar uma olhada na diferença e vou tentar seu método, dei uma olhada e apenas modificando o nextLine() para next() resolveu, mas vou tentar assim também. Novos métodos de resolver problemas nunca e demais

Mudar para next funciona pois ele não espera uma quebra de linha para prosseguir, já o nextLine sim (que é a quebra de linha que sobrou da leitura anterior)

1 curtida