【问题标题】:adding elements to an ArrayList using a loop and outputting them on console使用循环将元素添加到 ArrayList 并在控制台上输出
【发布时间】:2018-09-25 20:32:47
【问题描述】:

我知道这是一个基本问题,但我一直在努力解决很多天,但找不到解决方案。拜托,任何建议将不胜感激。

我只是想将现有 ArrayList 中包含的元素(节点对象)添加到新的空 ArrayList。这个想法是,如果我可以一次添加一个元素,我可以在 1 个元素的列表上运行堆排序方法,然后在 2 个元素的列表上,然后在 3 个元素的列表上,等等。

但是,当使用 for 循环、while 循环甚至增强的 for 循环时,我无法成功添加元素并输出它们的结果值或它们的顺序。当我按如下方式手动添加它们时,它似乎可以工作:

 ArrayList<Integer> test_list = new ArrayList<Integer>();

test_list.add(0, 5);
test_list.add(1,10);
test_list.add(2, 15);
test_list.add(3, 20);
test_list.add(4, 25);

for (Integer num : test_list){      
System.out.println("output testing output testing" + num);
}

但是,当我尝试使用循环添加它们时:

for (int i = 0; i<test_list.size()-1; i++)
{
    test_list.add(i, i*5);
    System.out.println(test_list.get(i));
}

这行不通!我查看了 ArrayList 的 API 并查看了 stackoverflow 问题,根据我收集的信息,'.set(index, element)' 方法不适用于空列表,但是 '.add(index , element)' 应该可以工作,但我不知道为什么它不工作。

【问题讨论】:

    标签: java loops arraylist


    【解决方案1】:

    问题是您的数组列表在开始添加之前是空的(大小 = 0);所以你的循环是空的。

    增强的 for 循环也不起作用,因为列表一开始就没有项目。

    当您手动添加它们时,您成功地将项目添加到列表中,因为您不依赖于列表的大小。

    利用Mert Ozdal's answer中的替代实现

    【讨论】:

      【解决方案2】:

      test_list.size() 在您的循环中为零。你需要指定for循环的步数

      【讨论】:

        【解决方案3】:

        ArrayList.set(index, data)

        这用于在指定索引处设置项目。但是,如果列表大小小于您尝试访问的索引,它将引发异常,这也是有意义的。 set 方法只能用于替换项,不能用于添加项

        ArrayList.add(index, data)

        此方法用于在列表中插入一些数据。如果您尝试在列表中间插入某些内容,则会调整数据以为新索引腾出空间。如果您尝试在列表末尾添加一些内容,那也可以。但是,如果您尝试添加项的索引大于 arrayList 的大小,则此方法也会 IOB 异常。

        【讨论】:

          【解决方案4】:

          如果您使用空列表运行此代码,您的 for 循环将根本不会运行。如果您在循环外添加超过 2 个项目,则 for 循环将起作用,并且您的代码将导致无限循环,因为您的上限是 test_list ArrayList 的大小,并且您在 for 循环内向该对象添加项目。确定一个静态上限并多次填充 ArrayList 以避免无限循环。

          for (int i = 0; i<5; i++)
          {
              test_list.add(i, i*5);
              System.out.println(test_list.get(i));
          }
          

          【讨论】:

          • 没有无限循环。事实上没有循环。不过,您使用静态上限的其他建议很好
          • 是的,我意识到了这一点并相应地编辑了我的答案,谢谢:)
          • 也没有运行时错误。循环将简单地消失,因为条件从一开始就为假
          猜你喜欢
          • 2022-12-17
          • 1970-01-01
          • 2019-05-19
          • 2016-01-08
          • 2021-03-19
          • 2015-08-16
          • 2021-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多