System.in.read() dentro do While não é executado

2 respostas
FightSurf_George_Mai

Bom dia amigos. Vejam este pedaço de código:

int choice = 2;
		try 
		{
			while (choice != 0)
			{
				screenMainMenu();
				choice = System.in.read() - 48;
				switch(choice)
				{
				case 1 : method(); break;  
				}//end of switch
			}//end of while

A primeira vez que entra no laço while, eu consigo através do console atribuir um valor (diferente de 0) ao INT choice. Depois vai pro switch e executa corretamente. Na segunda vez, repetindo o while, o fluxo do programa passa pela linha 'choice = System.in.read() - 48; ’ direto sem esperar a entrada do teclado, vai pro switch, não executa nada e depois volta para o início do while, desta vez esperando a entrada do teclado.

Porque da outra vez não consegui fazer com que o programa parasse para ler a entrada?

Obrigado a todos.

2 Respostas

FightSurf_George_Mai

Consegui corrigir o problema no programa trocando a instrução System.in por

Scanner sc = new Scanner(System.in);  
				choice = sc.nextInt();

Mas ainda ficou a dúvida na pergunta anterior. Alguém sabe o que aconteceu?

Um forte abraço a todos.

Lucas_Cavalcanti

o que acontece é que quando vc usa o System.in.read() vc está lendo 1 byte da entrada…

ou seja, se vc digitar:

1

o primeiro read vai te dar o caractere ‘1’ e o segundo vai dar o ‘\n’…

se vc tivesse digitado
12

o primeiro ia ser ‘1’, o 2o ‘2’ e o terceiro o ‘\n’

nunca faça leituras assim na mão…
a classe Scanner está ai pra isso…

Criado 24 de maio de 2008
Ultima resposta 24 de mai. de 2008
Respostas 2
Participantes 2