[英]Simple java input problem
我是Java新手,在獲取輸入時遇到問題。 這是我的代碼,它似乎可以根據需要獲取第一個輸入,但是隨后跳過接下來的兩個“讀取”函數調用?
有什么建議么?
// open up standard input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int battMax, battMin, numNodes=0;
System.out.print("Enter minimum battery level:");
try {
battMin = br.read();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.print("Enter maximum battery level:");
try {
battMax = br.read();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.print("Enter number of nodes required:");
try {
numNodes = br.read();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
br.read()
將讀取一個字符 。 此外,如果您正在從System.in
讀取,則可能僅在用戶按下回車鍵時才看到某些內容-此時,如果您使用的是Windows,它將需要額外的\\r
和\\n
讀取(或者只是\\n
在Unix上為\\n
)。
我懷疑您會發現第二個和第三個read()
調用read()
的值為\\r
和\\n
。
此外,您實際上並沒有得到想要的值-如果有人輸入“ 1”,那么您將得到49的值,因為那是該字符的Unicode值。
您應該使用readLine()
讀取一行(然后使用Integer.parseInt()
解析該字符串。或者,您可以使用Scanner
類-我不能說我曾經用過它,但是它可能對您有用。
最后,該代碼中有很多重復-我建議您通過創建一個實用方法來重構它。 例如,您可能有:
public static int promptUserForInt(String prompt, int defaultValue,
BufferedReader reader)
throws IOException
{
while (true)
{
System.out.print(prompt);
try
{
String line = reader.readLine();
return Integer.parseInt(line);
}
catch (NumberFormatException e)
{
// Adjust as appropriate...
System.out.println
("Unable to parse input; please enter an integer.");
}
}
}
然后,您可以輕松地使用它:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int battMax = promptUserForInt("Enter minimum battery level:");
int battMin = promptUserForInt("Enter maximum battery level:");
int numNodes = promptUserForInt("Enter number of nodes required:");
您可以通過使用Writer
或BufferedWriter
來進一步重構,以顯示提示-這樣您可以更輕松地對其進行測試。
最后,我建議您不要將每個位都包裝在IOException
的catch塊中; 如果您無法閱讀控制台輸入,我懷疑您還是不想繼續,因此無論第一個輸入生成此異常還是第二個或第三個異常,您都希望以相同的方式進行操作。 聲明您的方法拋出IOException
,或者將所有三行都放在同一try
塊中,由同一catch
塊處理。
br.read()
讀取一個字符。 使用Integer.parseInt(br.readLine())
它將讀取整行並將其轉換為int
。
另外,初始化所有局部變量:
int battMax=0, battMin=0, numNodes=0;
如果您使用的是Java 1.5或更高版本,則可以使用java.util.Scanner
public static getInt(String prompt){
int n = 0;
try {
System.out.print(prompt);
Scanner kb = new Scanner(System.in);
n = kb.nextInt();
}
catch(Exception ex){
ex.printStackTrace();
}
return n;
}
樣品用法:
int battMax = getInt("Enter minimum battery level:");
int battMin = getInt("Enter maximum battery level:");
int numNodes = getInt("Enter number of nodes required:");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.