【问题标题】:Java 2D arraylists ndexOutOfBoundsException: Index: 0, Size: 0 [duplicate]Java 2D arraylists ndexOutOfBoundsException:索引:0,大小:0 [重复]
【发布时间】:2023-04-08 05:39:02
【问题描述】:

我是 Java 新手。试图创建二维数组列表,但得到这个 indexOutOfBoundsException: Index: 0, Size: 0

ArrayList<ArrayList<Integer>> twoDArrayList = new ArrayList<>();
for (int i = 0; i < 4; i++)
{
    twoDArrayList.add(new ArrayList<>());
    twoDArrayList.get(i).set(0,1); 
}

为什么第二行在 for 循环中失败?当 i = 0 时,已经有一行 使用add(new ArrayList&lt;&gt;())创建

------------------- 感谢您的提示! ---------------------

现在我终于有了打印帕斯卡三角形的解决方案.....它的前 5 行

ArrayList> twoDArrayList = new ArrayList();

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

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

        for (int j = 0; j <= i ; j++)
        {
            row.add(0);
        }

        row.set(0, 1);
        row.set(i, 1);

        twoDArrayList.add(row);


        for (int j=1; j < i; j++)
        {
            twoDArrayList.get(i).set(j, twoDArrayList.get(i-1).get(j-1) + twoDArrayList.get(i-1).get(j));
        }

    }


    for (ArrayList<Integer> row: twoDArrayList)
    {
        for (Integer element: row)
        {
            System.out.printf("%4d",element);
        }
        System.out.println();
    }

【问题讨论】:

  • 标签在你的代码中做了什么? (特别是在操作数和运算符之间...)

标签: java arraylist


【解决方案1】:
ArrayList<ArrayList<Integer>> twoDArrayList = new ArrayList<>();
   for (int i = 0; i < 4; i++)
    {
       ArrayList<Integer> al = new ArrayList<>();
       al.add(i,1);
       twoDArrayList.add(al);
       twoDArrayList.get(i).set(0,1); 
    }

【讨论】:

    【解决方案2】:

    arraylist set 方法不添加对象,而是用指定位置的对象替换。

    在 for 循环的第一行中,实例化了一个空数组列表。 然后在 for 循环的第二行中,您访问新实例化的数组列表并尝试用整数“1”替换第一个位置的元素 - 这会产生索引越界异常,因为第一个位置没有元素/null。

    【讨论】:

      【解决方案3】:
      public <T> List<T> twoDArrayToList(T[][] twoDArray) {
          List<T> list = new ArrayList<T>();
          for (T[] array : twoDArray) {
              list.addAll(Arrays.asList(array));
          }
          return list;
      }
      

      【讨论】:

      • 您能否在您的代码中添加一点解释,说明它在做什么,为什么?
      • 请解释你的答案。
      【解决方案4】:

      您的行是用一个空列表创建的。

      来自 twoDArray.get(i) 的值将是一个大小为 0 的列表。

      【讨论】:

        猜你喜欢
        • 2015-04-15
        • 1970-01-01
        • 1970-01-01
        • 2016-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多