【问题标题】:Can I initialize a array/arraylist<int> of 2D array in Java?我可以在 Java 中初始化二维数组的数组/arraylist<int> 吗?
【发布时间】:2015-03-16 09:54:19
【问题描述】:

我可以初始化二维数组的 ArrayList,这是一回事吗?

所以当我尝试初始化它时,下面是我的代码

ArrayList<int>[][] suffle = new ArrayList<int>[row][col]; 

我收到这样的错误:

错误:语法错误,插入“维度”以完成 ReferenceType

我该如何解决这个问题?

【问题讨论】:

  • 虽然我下面的回答确实满足语法错误,但我不禁想知道为什么你认为你需要一个二维数组 ArrayLists。
  • 这是我必须为 AP CS 图片实验室做的一个项目,我的老师要求我们将一张图片分成 N 行和 M 列,然后随机(随机)打乱所有矩形并显示新的图片。用户应该输入N和M,所以我正在考虑使用一个二维数组来存储(startrow,endrow,startcol,endcol)(所以一个整数的arraylist)来解决这个问题。
  • 那么你可能想要坚持使用数组。

标签: java arrays arraylist multidimensional-array


【解决方案1】:

这是一个东西,但你必须使用一个对象,而不是一个原始的。这适用于所有泛型类型。

ArrayList<Integer>[][] suffle = new ArrayList[row][col];

你会收到一些关于上述声明的编译器警告,但这是完全有可能的。

根据您在做什么,最好使用列表列表,这将确保类型安全,而不是您从上面得到的未经检查的警告...

List<List<Integer>> suffle = new ArrayList<>();

...或标准的二维数组:

int[][] suffle = new int[row][col];

【讨论】:

  • 为什么使用原始的ArrayList 而不是写new ArrayList&lt;Integer&gt;[row][col]
  • 因为该声明不合法。
【解决方案2】:

您也可以完全坚持使用原语,即

 int[][] i = new int[row][col]; 

或者混搭一个int[]列表

ArrayList<int[]> al = new ArrayList<>();

几乎是一个列表数组:

/* writing new ArrayList<Integer>[1], which is what 
you'd want to do, is not allowed for array creation.*/
ArrayList<Integer>[] a = new ArrayList[1]; 

【讨论】:

    【解决方案3】:

    是的,您可以创建一个 Object 类型的二维数组(在本例中为 ArrayList)。

    但你需要写成:

    ArrayList<Integer>[][] suffle = new ArrayList[row][col];
    

    在初始化数组列表之前,还要确保将 row 和 col 初始化为整数值。

    suffle 的各个元素将被声明为 ArrayList 类型,但不会被初始化。您需要单独初始化它们。

    【讨论】:

      【解决方案4】:

      当您需要在菱形括号内使用泛型类型时,不应使用原始类型,例如 int、double 等。而应使用相应的包装类型,例如 Integer 和 Double 等。

      在看到很多论坛上有人问这个问题后,我也在我的博客上用例子解释了这个问题 - http://www.javabrahman.com/corejava/how-to-resolve-syntax-error-insert-dimensions-to-complete-referencetype/

      (注意/披露 - 以上链接来自我拥有的博客)

      【讨论】:

        猜你喜欢
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        • 2013-12-15
        • 2013-11-21
        • 2012-11-29
        相关资源
        最近更新 更多