2012-07-23 95 views
0

任何人都可以請幫助我的代碼,如何從控制檯讀取多行並將其存儲在數組列表中? 例子,從控制檯我的輸入是:從控制檯讀取多行並將其存儲在Java中的數組列表中?

12  abc  place1 
13  xyz  place2 

,我需要在ArrayList中這個數據。

到目前爲止,我嘗試這種代碼:

Scanner scanner = new Scanner(System.in); 
ArrayList informationList = new ArrayList<ArrayList>(); 
String information = ""; 
int blockSize = 0, count = 1; 
System.out.println("Enter block size"); 
blockSize = scanner.nextInt(); 
System.out.println("Enter the Information "); 
while (scanner.hasNext() && blockSize >= count) { 
    scanner.useDelimiter("\t"); 
    information = scanner.nextLine(); 
    informationList.add(information); 
    count++; 
} 

任何幫助是極大的讚賞。

控制檯的輸入行是字符串和整數的混合

+0

掃描儀掃描=新的掃描儀(System.in); ArrayList informationList = new ArrayList (); String information =「」; nt blockSize = 0,count = 1; System.out.println(「輸入塊大小」); blockSize = scanner.nextInt(); System.out.println(「輸入信息」); (scanner.hasNext()&& blockSize> = count){ \t scanner.useDelimiter(「\ t」); \t information = scanner.nextLine(); \t informationList.add(information); \t count ++; \t} – user1547054 2012-07-23 22:20:58

+0

ArrayList的元素應該是什麼類型?你只是存儲原始字符串或解析每一行到一個強類型的數據結構?如果是後者,請提供您正在使用的數據對象的代碼。 – 2012-07-23 22:21:14

+0

來自控制檯的輸入行是字符串和整數的混合 – user1547054 2012-07-23 22:25:04

回答

2

您遇到了一些問題。

首先,ArrayList的初始化行是錯誤的。如果你想要一個Object的列表,所以你可以同時存放整數和字符串,你需要在角括號內放置Object。另外,最好將泛型類型參數添加到變量定義中,而不僅僅是在對象實例化上。

接下來,你的計數會因爲你將它初始化爲1而不是0而被搞亂。我假設「塊大小」實際上意味着這裏的行數。如果這是錯誤的發表評論。

接下來,您不想重置掃描儀正在使用的分隔符,並且您肯定不希望在循環中執行該分隔符。默認情況下,掃描程序會基於任何空白符分割令牌,我認爲這是您想要的,因爲您的數據由製表符和換行符分隔。

另外,您不需要在while條件中檢查hasNext()。所有下一個*()方法都會阻止等待輸入,因此不需要調用hasNext()。

最後,你並沒有真正利用掃描儀做它最擅長的功能,它可以將令牌解析成任何你想要的類型。我在這裏假定每條數據行都將以一個整數開始,然後是兩個字符串。如果是這樣的話,只需要調用nextInt(),然後在循環中對next()進行兩次調用,就可以將所有數據解析爲您需要的數據類型。

總之,這裏是你的代碼用我所有的建議,以及一些其他位更新,使之運行:

import java.util.ArrayList; 
import java.util.Scanner; 

public class Example { 
    public static void main(String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     ArrayList<Object> list = new ArrayList<>(); 
     System.out.println("Enter block size"); 
     int blockSize = scanner.nextInt(); 
     System.out.println("Enter data rows:"); 
     int count = 0; 
     while (count < blockSize) { 
      list.add(scanner.nextInt()); 
      list.add(scanner.next()); 
      list.add(scanner.next()); 
      count++; 
     } 
     System.out.println("\nThe data you entered is:"); 
     System.out.println(list); 
    } 
} 
+0

非常感謝。我感謝您的幫助。並感謝所有的投入。我會把它們留在我的腦海裏。 – user1547054 2012-07-23 23:06:13

相關問題