2010-11-15 109 views
1

Java問題:Java - 如何從用戶輸入未確定數量的輸入

我想從用戶處獲取未確定數量的輸入。例如,我希望用戶繼續以字符串形式輸入人名,直到用戶沒有其他名字進入。我想用一種用戶友好的方式來輕鬆地表明用戶沒有更多的輸入。循環可能如下所示。任何好主意?有關改進代碼片段的任何提示也會受到讚賞。

BufferedReader read = new BufferedReader(new InputStreamReader(System.in));  

while(<user still has more input>) { 
     System.out.println("Enter name: "); 
     String s = read.readLine(); 
     ... 
     <do something with s>; 
     ... 
} 

謝謝!

回答

0

您可以有一個布爾變量,如finished,並檢查用戶是否輸入'Q'或另一個項目來指示它們已完成。如果是這樣,請將finished設置爲true,然後在下一次迭代中退出循環。

下面是一個簡單的例子,

boolean finished = false; 
String name = null; // initialized to a default value. 

System.out.println("Enter 'Q' to quit"); 
while(!finished) { 
System.out.println("Enter name: "); 
name = read.readLine(); // moved declaration outside of loop 
if(name.equals("Q")) { 
    finished = true; 
} 
    // do work with name 
} 

我還修改了代碼中的位,

  • 我添加了一個信息給用戶,以指示什麼終止輸入。
  • 我已將您的變量s更名爲更有意義的內容,因爲您正在存儲用戶的名稱將它更改爲name似乎是合理的。
  • 作爲習慣的力量,我也用默認值初始化了我的變量,所以我將name變量分配給了null。不是完全必要的,但我認爲這是很好的做法。
  • 由於我已將name指定爲默認值,因此我已將它移至循環之外。
0

一個簡單的方法是讓用戶在完成後輸入空行。你只要檢查是否line.equals("")或者可能修剪它之前。

2

您需要一個不是名稱的值,而是指示不再有數據。一條空行會很好。你也想詢問他們是否真的想退出,所以如果他們不小心打回來,他們並沒有丟失所有的數據。

name = read.readLine(); 
Pattern p = Pattern.compile("^\\s$"); //empty line or one of just space chareacters 
if (p.matcher(name).matches()) { 
     System.out.println("Are you done?[y/n]"); 
     if (Pattern.matches("[yY]", read.readLine()) { 
      //quit your loop 
     } 
}