예를 들어 다음과 같은 기본 프로그램을 가지고 : 그것은 완벽하게 잘 작동사용자로부터 입력을받는 여러 가지 방법의 차이점은 무엇입니까?
import java.util.Scanner;
public class Practice
{
public static void main(String[] args)
{
char userInput;
String convertString;
do
{
System.out.println("Here are your choices:");
System.out.println("A. \nB. \nC. \nD.");
Scanner kbd = new Scanner(System.in);
convertString = kbd.next();
userInput = convertString.charAt(0);
switch(userInput)
{
case 'A':
System.out.println("You have chosen A!");
break;
case 'B':
System.out.println("You have chosen B!");
break;
case 'C':
System.out.println("You have chosen C!");
break;
case 'D':
System.out.println("You have chosen D! This program will now terminate.");
break;
default:
System.out.println("Sorry, you have to make a selection.");
}
} while (userInput > 'D');
}
}
. 그러나 스캐너 버전을 사용하는 경우 System.in.read() 버전을 사용하면 내 프로그램에서 3 번 반복되어 선택을 허용합니다. 왜 이런 일이 발생하며 어떻게 해결할 수 있습니까?
나는 C/C++ 배경에서 왔기 때문에 입력 스트림에 문자 '\ n'이 남아 있기 때문에 '입력란에 남았습니다.'그리고 프로그램이 원하는 입력을 허용하지 않고 루프를 돌릴 때, 그것은 스트림을 지우고 있습니다. 그러나 이것이 사실이라면 왜 한번 반복하지 않고 3 번 반복하는 것입니까? (\ n 입력 스트림에서 나머지 왼쪽 문자 만 가져와야하기 때문에).
그리고 마지막으로 어떤 방법이 가장 일반적으로 사용됩니까?
감사합니다.
System.in 기반의 방법은 감가 상각, 그것을 사용하지 않는, 그것은 나쁜, 그들은 나쁜 것을 깨달았다, 그들은 우리가 행복 –
System.in.read()는 입력으로부터 단일 바이트를 읽고 있었다, 우리에게 스캐너를 준 흐름. InputStreamReader에서 랩핑하고 전체 라인을 읽으십시오. – Cruncher
@RichardTingle :'System.in'은 더 이상 사용되지 않으며, 나쁘지도 않습니다. 단지이 작업에 적합한 도구가 아닙니다. 그들은 올바른 도구가 빠져 있다는 것을 깨달았습니다. 그래서 스캐너가 추가되었습니다. – Thomas