2014-12-04 203 views
0

我想創建一個父ArrayList,其中包含每個索引的子ArrayList。我的代碼涉及使用掃描儀輸入填充子列表。見下面的輸入示例。如何在一個ArrayList中放置多個ArrayList Java

輸入說明:輸入的第一個整數(int T)告訴我們將要製作多少個子ArrayList,這也可以看作是父ArrayList的大小或多少行輸入。此點之後的所有行將是我們要存儲在每個子數組列表中的整數。

示例輸入

2 
5 4 2 9 
1 3 3 7 

期望輸出

SubString 0 contains 5 4 2 9 
SubString 1 contains 1 3 3 7 

問題描述:我得到以下行parentList.add(i, subList.add(q.nextInt()));錯誤。我相信我沒有遵循語法。我曾嘗試使用.addAll,但這也不起作用。誰能告訴我我做錯了什麼?提前感謝您的幫助。

import java.util.*; 
import java.io.*; 

public class Serials { 


    public static void main(String[] args) { 

     int T = 0; //First Integer to be inputed 
     //tells me how many sub ArrayLists I will have 

     List<List<Integer>> parentList =new ArrayList(); //parentList 
     List<Integer> subList = new ArrayList();   //subList 

     Scanner q=new Scanner(System.in); 
     System.out.println("How many substrings do we need"); 
     T = q.nextInt(); //Scanning in T Value 

     for(int i=0; i<T; i++) { 

    subList = new ArrayList<Integer>(); 
    subList.add(q.nextInt()); 
    parentList.add(i, subList); 


    } 


    System.out.println("SubString 0 contains" + parentList.get(0)); 
    System.out.println("SubString 1 contains" + parentList.get(1)); 


    } 
} 
+0

你的錯誤是什麼?附上你的堆棧跟蹤。 – mkobit 2014-12-04 01:46:21

回答

0
import java.util.*; 
import java.io.*; 

public class Serials { 


public static void main(String[] args) {   
    int T = 0; //First Integer to be inputed 
    //tells me how many sub ArrayLists I will have 

    List<List<Integer>> parentList =new ArrayList(); //parentList 
    List<Integer> subList = new ArrayList();   //subList 

    Scanner q=new Scanner(System.in); 
    System.out.println("How many substrings do we need"); 
    T = Integer.parseInt(q.nextLine()); //Scanning in T Value 

    for(int i=0; i<T; i++) { 
    String x = q.nextLine(); 
    String[] arr= x.split(" "); 
    subList = new ArrayList<Integer>(); 
    for(int j=0;j<arr.length;j++) 
    { 

    subList.add(Integer.parseInt(arr[j])); 

    } 
    parentList.add(i, subList); 
    } 


    System.out.println("SubString 0 contains" + parentList.get(0)); 
    System.out.println("SubString 1 contains" + parentList.get(1)); 
    } 
} 

這將允許在你想要的確切格式輸入和輸出。希望它有幫助:)

0

java.util.List boolean add(E e)add方法返回boolean,而不是一個列表,所以你不能添加它。你這樣做:

parentList.add(i, true/false) 

類型的parentListList<List<Integer>>。您只能添加List<Integer>類型的物品。例如(至少讓它編譯),你可以這樣做:

subList.add(q.nextInt()); 
parentList.add(i, subList); 
+0

@CBredlow我使用你的建議更新了代碼,但是我遇到的問題是輸入被空格分隔,導致編譯爲'SubString 0'包含[5] SubString 1包含[4]'而不是SubString 0包含[5 4 2 9]' SubString 1包含[1 3 3 7]' – f6e9a 2014-12-04 02:35:43

0

如前所述,添加列表不返回列表,而是一個布爾值。

最好先修改內部數組列表,然後在添加完所有條目後再添加它。

像這樣:

List<Integer> subList; 
for(int i=0; i < T; i++) { 
    subList = new ArrayList<Integer>(); 
    //logic for adding things to subList 
    parentList.add(i, subList); 
} 
0

的第一件事情,同時宣告他爲你再次在初始化它的循環不初始化子列表。所以,new ArrayList()對象從不使用。

對於你的問題,你爲什麼要在循環中做q.nextInt()一次。這意味着你不希望每個子列表有多個數字。

正如其他人所提到的那樣,您不能像完成一樣將子列表添加到parentList中。

我也改變了分隔符,而不是空格。

我修改了代碼,並牢記這些事情。

import java.util.*; 

public class Serials { 


public static void main(String[] args) { 

    int T = 0; //First Integer to be inputed 
    //tells me how many sub ArrayLists I will have 

    List<List<Integer>> parentList =new ArrayList(); //parentList 
    List<Integer> subList = null;   //subList 
    String[] strArr = null; 

    Scanner q=new Scanner(System.in); 
    System.out.println("How many substrings do we need"); 
    T = q.nextInt(); //Scanning in T Value 

    for(int i=0; i<T; i++) { 
     System.out.println("Enter comma seperated integer values for list "+(i+1)); 
     strArr = q.next().split(","); 
     subList = new ArrayList<>(); 
     for(String str : strArr){ 
      try{ 
      subList.add(Integer.parseInt(str)); 
      }catch(NumberFormatException e){ 
       System.out.println("Are you share that was an integer?"); 
       System.exit(0); 
      } 
     } 
     parentList.add(i, subList); 
     } 
     parentList.add(i, subList); 
    } 


    System.out.println("SubString 0 contains" + parentList.get(0)); 
System.out.println("SubString 1 contains" + parentList.get(1)); 


    } 
} 
相關問題