Java 二维数组int的数组列表

Java 二维数组int的数组列表,java,arrays,list,arraylist,int,Java,Arrays,List,Arraylist,Int,我想做一个二维数组的数组列表。 它是我添加到ArrayList的同一个2维数组,但每次都有不同的值。 问题是:当我将数组添加到列表中时,它会自动更新列表中数组的其他版本。 在将阵列添加到列表之前,我尝试克隆/复制阵列,但没有效果 import java.util.*; public class Test { static ArrayList<int[][]> list = new ArrayList<int[][]>(); public static vo

我想做一个二维数组的数组列表。 它是我添加到ArrayList的同一个2维数组,但每次都有不同的值。 问题是:当我将数组添加到列表中时,它会自动更新列表中数组的其他版本。 在将阵列添加到列表之前,我尝试克隆/复制阵列,但没有效果

import java.util.*;

public class Test {
   static ArrayList<int[][]> list = new ArrayList<int[][]>();

   public static void main(String[] args) {
      Lister L = new Lister();
   }

   public static void add(int[][] array) {
      list.add(array);
      printArray();
   }

   public static void printArray() {
      for (int i = 0; i < list.size(); i++) {
         System.out.println("Element: " + i);
         printDim(list.get(i));
      }
      System.out.println("--------------------------------");
   }

   public static void printDim(int[][] array) {
      for (int x = 0; x < array.length; x++) {
         for (int y = 0; y < array[0].length; y++) {
            System.out.print(array[y][x]+" ");
         }
         System.out.println();
      }
      System.out.println("-----------");
   }
}

class Lister {
   Lister() {
      int[][] array1 = new int[5][5];
      array1[0][4] = 1;
      Test.add(array1);
      int[][] array2 = array1.clone();
      array2[1][2] = 1;
      Test.add(array2);
   }
}
预期产出:

Element: 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
1 0 0 0 0
--------------------
Element: 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
1 0 0 0 0
-----------
Element: 1
0 0 0 0 0
0 0 0 0 0
0 1 0 0 0
0 0 0 0 0
1 0 0 0 0
---------------------

这是因为您仍在使用类型为
int
的相同“矩阵”。这应该通过在使用第一个后再次声明来修复

import java.util.*;

class Test {
   static ArrayList<int[][]> list = new ArrayList<int[][]>();

   public static void main(String[] args) {
      int[][] array1 = new int[5][5];
      array1[0][4] = 1;
      list.add(array1);

      array1 = new int[5][5];
      array1[1][2] = 1;

      list.add(array1);
      printArray();
   }

   public static void printArray() {
      for (int i = 0; i < list.size(); i++) {
         printDim(list.get(i));
      }
   }

   public static void printDim(int[][] array) {
      for (int x = 0; x < array.length; x++) {
         for (int y = 0; y < array[0].length; y++) {
            System.out.print(array[y][x]+" ");
         }
         System.out.println();
      }
      System.out.println("--------");
   }
}
import java.util.*;
课堂测试{
静态ArrayList=新建ArrayList();
公共静态void main(字符串[]args){
int[][]数组1=新int[5][5];
阵列1[0][4]=1;
列表。添加(第1列);
array1=新整数[5][5];
阵列1[1][2]=1;
列表。添加(第1列);
printArray();
}
公共静态void printary(){
对于(int i=0;i
无法浅复制二维数组。由于它是一个数组数组,浅层副本将为您提供一个新的外部数组,其中包含对与原始数组相同的内部数组的引用

您需要实现深度复制:

int[][] array2 = array1.clone();
for (int i = 0; i < array2.length; i++) {
    array2[i] = array1[i].clone();
}
int[]array2=array1.clone();
for(int i=0;i

请注意,这只适用于基本数组。如果您有对象数组,则还需要复制每个对象(除非您可以引用相同的对象)。

请提供一个演示问题的示例谢谢您的回答,但问题是我希望每个添加的数组都具有上一个数组的值。。谢谢!我知道这是因为奇怪的指针,但不知道如何解决它。再次感谢你
int[][] array2 = array1.clone();
for (int i = 0; i < array2.length; i++) {
    array2[i] = array1[i].clone();
}