就拿以下基本程序:從用戶獲得輸入的衆多方法之間有什麼區別?
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'不被棄用,它也不錯,它不適合這項工作。他們意識到正確的工具丟失了,這就是爲什麼'Scanner'被添加的原因。 – Thomas