【问题标题】:Add array list to a list inside for loop in java在java中的for循环内将数组列表添加到列表中
【发布时间】:2015-11-28 06:11:00
【问题描述】:

我正在尝试将数组列表添加到 for 循环内的列表中。在我的代码中,场景 是数组列表,假设在每个 i 中都有一个新值。对于每个 i 我想将 scenario 保存在列表 list_of_scenarios 但我有这个错误。

 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 

关于如何修复它的任何想法?

    int[] ActionArrayTest = new int[25];
    int[] test27Augest = new int[75];
    ArrayList<Hour> scenario = new ArrayList<Hour>();
    List<ArrayList<Hour>> list_of_scenarios = new  ArrayList<ArrayList<Hour>>();

            for (int i = 1; i <= 100; i++) {

        ActionArrayTest = FunctionA (); 

        test27Augest = Fill_the_prefrences(ActionArrayTest);
        scenario = FunctionB(test27Augest);


    list_of_scenarios.add(i, scenario);


    }

【问题讨论】:

  • 至少阅读引发异常的方法的文档。
  • 您在位置 1 开始循环 .. 并且您的数组列表当时为空 .. 从位置 0 开始
  • 只需使用list_of_scenarios.add(scenario); 或以0 而不是1 开头的i

标签: java arrays list for-loop arraylist


【解决方案1】:

在循环的第一次迭代中,list_of_scenarios.add(i, scenario); 要求将scenario 添加到 ArrayList 中的索引 1。但是,此时您的 ArrayList 为空。

建议的修复:

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

    ActionArrayTest = FunctionA (); 

    test27Augest = Fill_the_prefrences(ActionArrayTest);
    scenario = FunctionB(test27Augest);


    list_of_scenarios.add(i, scenario);

}

注意:documentation 声明此方法在该索引处添加元素,但将其他所有内容向右移动。

如果您想构造 ArrayList 以便将索引 0 处的元素添加到索引 1 处的元素之前,请使用普通的 add() 方法:

list_of_scenarios.add(scenario);

This method 只是将元素添加到列表的“末尾”。

【讨论】:

    【解决方案2】:

    您是否正在尝试创建一个由数组列表组成的数组列表……听起来不像是一种好的编程方法。如果您想在该列表列表中找到一个元素,这将花费大量时间。考虑在最后一个数组列表中查找最后一个元素的代码复杂性。您必须遍历列表列表,获取每个列表,再次遍历每个列表以找到该元素。

    如果所有这些数组列表都具有相同的类型,为什么不能将所有这些元素添加到顶部数组列表中。因此,您只维护一个数组列表,并且在执行 for 循环时,将 Scenario 的元素添加到数组列表中。

    像这样..

    List<Hour> list_of_scenarios = new  ArrayList<Hour>();
     for (int i = 1; i <= 100; i++) {
        ActionArrayTest = FunctionA (); 
        test27Augest = Fill_the_prefrences(ActionArrayTest);
        scenario = FunctionB(test27Augest);
        //add all the elements of 'scenario' to the list.
        list_of_scenarios.addAll(scenario); 
    }
    

    祝你好运..编程愉快.. :)

    【讨论】:

    • 您应该排除您的代码改进建议,并解释为什么 OP 会收到他们遇到的错误,因为这将是这个问题的实际答案。
    • 我只能给出我所知道的。看到人们把嫉妒或一些令人讨厌的东西带到这里,真是令人惊讶。它应该是知识共享平台。我没有说我的答案是正确的。我只给出了我所知道的,由用户决定是否使用它。期待与聪明和优秀的开发者合作。
    猜你喜欢
    • 2020-03-23
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2019-11-05
    • 2018-10-08
    相关资源
    最近更新 更多