【问题标题】:How should I convert a list into 2-D int[][] array?我应该如何将列表转换为二维 int[][] 数组?
【发布时间】:2017-11-15 22:48:45
【问题描述】:
private ArrayList<ArrayList<Integer>> list ;
 int size = list.size();

         int[][] iArray = new int[size][size];
for (int i=0; i<size; ++i){
             for (j = 0; j<size; ++j){
                 iArray[i][j] = list.get(j +( list.size() * i)); 
     }
}

我正在使用以下代码,但它给了我错误。请提出建议。

【问题讨论】:

  • 您正在尝试创建大小为 0x0 的二维数组...
  • @RAZ_Muh_Taz 你为什么这么说?
  • 哪个是错误?如果您希望别人帮助您,您应该在提问时提供尽可能多的详细信息。即使您使用适当的值加载列表,也会收到 ArrayIndexOutOfBoundsException。在list.get(j +( list.size() * i)) 中,您超出了列表的范围。例如。如果列表大小为 10,我将从 0 循环到 9。假设 i 为 2。那么 list.size() * i 为 20,即使 j 为 0,您将要求列表中的第 20 个项目,该项目不存在。
  • 你必须在forloop中指定变量类型j for (int j = 0; j

标签: java arrays arraylist


【解决方案1】:

由于您有一个 2D 列表,您只需要两个循环即可将其转换为 2D 数组。

现在,由于 Java 实际上并不支持 2D 列表/数组,它们实际上是列表的列表,要转换为数组的数组,并且子列表/数组不一定都具有相同的大小。

因此,要支持jagged 2D list/array,请从相应的子列表中单独创建每个子数组,如下所示:

int[][] iArray = new int[list.size()][]; // create outer array
for (int i = 0; i < list.size(); i++) {
    ArrayList<Integer> subList = list.get(i);
    iArray[i] = new int[subList.size()]; // create sub-array
    for (int j = 0; j < subList.size(); j++)
        iArray[i][j] = subList.get(j);   // copy value
}

【讨论】:

    【解决方案2】:

    您遇到了什么错误? 问题可能是您的内部 ArrayList 比外部的要小。 其他方式不会导致错误,但您的 2D 数组将不完整。 并且您在内部 for 循环中有语法错误,您的 j 没有变量类型 你必须做这样的事情

        int iOuterSize = list.size();
        int iBiggestInnerSize = -1;
        for (ArrayList<Integer> arrayList : list) {
            int iCurInnerSize = arrayList.size();
            if (iCurInnerSize > iBiggestInnerSize) {
                iBiggestInnerSize = iCurInnerSize;
            }
        }
        int[][] iArray = new int[iOuterSize][iBiggestInnerSize];
        for (int i = 0; i < iOuterSize; i++) {
            for (int j = 0; j < list.get(i).size(); j++) {
                iArray[i][j] = list.get(i).get(j);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 2022-06-17
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多