【问题标题】:How to put Multiple ArrayLists inside an ArrayList Java如何将多个 ArrayLists 放入 ArrayList Java
【发布时间】:2014-12-04 01:42:37
【问题描述】:

我正在尝试创建一个父 ArrayList,其中包含每个索引的子 ArrayList。我的代码涉及使用扫描仪输入填充子列表。请参阅下面的输入示例。

输入说明:输入的第一个整数 (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));


    }
}

【问题讨论】:

  • 你的错误是什么?附上你的堆栈跟踪。

标签: java arraylist


【解决方案1】:
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));
    }
}

这将允许以您想要的确切格式输入和输出。希望对你有帮助:)

【讨论】:

    【解决方案2】:

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

    最好先修改内部数组列表,然后在添加完所有条目后将其添加。

    像这样:

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

    【讨论】:

      【解决方案3】:

      java.util.List boolean add(E e)add 方法返回 boolean,而不是列表,因此您无法添加它。你正在这样做:

      parentList.add(i, true/false)
      

      parentList 的类型是List&lt;List&lt;Integer&gt;&gt;。您只能添加List&lt;Integer&gt; 类型的项目。例如(至少让它编译)你可以这样做:

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

      【讨论】:

      • @CBredlow 我使用您的建议更新了代码,但我遇到的问题是输入由空格分隔,导致编译为SubString 0 contains[5] SubString 1 contains[4] 而不是SubString 0 contains[5 4 2 9] SubString 1 contains[1 3 3 7]`
      【解决方案4】:

      首先,不要在声明时初始化您的 subList,因为您将再次在 for 循环中对其进行初始化。所以,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));
      
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-13
        • 2015-04-27
        • 2020-07-27
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 2017-07-15
        • 2012-05-03
        相关资源
        最近更新 更多