2014-09-02 41 views
3

我是新來的Java和我正在製作一個程序,可以採取一些名稱,並把它們放入一個ArrayList,然後打印出名稱。我希望用戶按ctrl-Z來指示列表的結尾。到目前爲止,我有這個:JAVA:如何使用掃描儀輸入未定義數量的值到一個字符串?

ArrayList<String> name = new ArrayList<>(); 
    System.out.print("Enter a name: "); 
    Scanner in = new Scanner(System.in); 
    name.add(in.next()); 
    in.nextLine().equals(""); 

    for(String naam: name){ 
     System.out.println(naam); 
    } 

但我想我需要做更多的for循環。

如果有人能給我一個很棒的解決方案!但是,如果你還可以解釋你修改了什麼以使其工作起來,甚至會更好。

+7

如何將'in.nextLine()'獲得超過1行,如果它不是一個循環內? – Stewart 2014-09-02 14:20:35

+0

你應該調用你的列表名字,這樣你可以使用'name'作爲for-each變量。使用複數作爲收藏通常更清楚。 – 2014-09-02 14:45:08

+0

感謝您的提示!我已經重新命名了我的變量 – seriallchiller 2014-09-02 15:56:12

回答

0

以下是執行迴路的示例。

public class Scan { 
    public static void main(String[] args) { 

     ArrayList<String> arrayList = new ArrayList<String>(); 

     Scanner sc = new Scanner(System.in); 
     boolean testContinue = true; 

     while (testContinue) { 

      System.out.println("Input a string :"); 
      String str = sc.next(); 

      if (str.equals("quit")) 
       testContinue = false; 
      else { 
       /* 
       * add to arrayList 
       */ 
       arrayList.add(str); 
       testContinue = sc.hasNextLine(); 
      } 
     } 

     /* 
     * Display arrayList 
     */ 
     for(int i = 0; i<arrayList.size(); i++) { 
      System.out.println(arrayList.get(i)); 
     } 

    } 
} 
0

這裏是一個例子。在Unix系統上,Control-z在後臺放置了一些東西。你的意思是控制 - 通常意味着輸入結束?如果是這樣,下面的例子將工作。關鍵是控制字符不會發送給您的應用程序,而是由終端解釋。但是,如果將System.in包裝到BufferedReader中,則BufferedReader將在EOF上返回null,這將停止掃描器。

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class ReadNames { 

    public static void main(String args[]) throws Exception { 
     List<String> names = new ArrayList<String>(); 

     System.out.print("Enter a name: "); 
     Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in))); 

     while(in.hasNext()){ 
      String n = in.next(); 
      if(n.isEmpty()){ 
       break; 
      } 
      names.add(n); 
     } 

     for(String name: names){ 
      System.out.println("Name: " + name); 
     } 
    } 
} 

運行示例:

$ java ReadNames 
Enter a name: dave 
john 
bill 
<control-d here> 
Name: dave 
Name: john 
Name: bill