У меня есть следующий фрагмент кода:Почему значения не совпадают?
public int[][][] arrMethod1(){
for (int idx=0;idx< x;idx++){
arr[idx]=arrMethod2();
System.out.println("arr "+idx+" is "+Arrays.toString(arr[idx][0]));
}
System.out.println("arr0 are "+Arrays.toString(arr[0][0]));
System.out.println("arr1 are "+Arrays.toString(arr[1][0]));
return arr;
}
Когда эта часть кода выполняется, отличный результат, полученный в течение для цикла и отличается снаружи. Похоже, что arr[0][0]
совпадает с arr[1][0]
, что неверно в цикле for. myMethod() - это метод, который инициализирует arr[idx]
с 2D-массивом. Для моего тестирования для простоты я использовал массив 1D и x=2
. Цель состоит в том, чтобы иметь x
разные arr
, которые представляют собой 3D-массивы. Остальная часть кода:
private final int[][] arrMethod2(){
final int[] otherArr=arrMethod3();
for (int idz=0;idz< z;idz++){
int[] toBe=new int[otherArr.length];
System.arraycopy(otherArr, 0, toBe, 0, otherArr.length);
newArr2[idz]=change(toBe);
}
return newArr2;
}
public int[] arrMethod3(){
for (int idy = 0; idy < y; idy++){
double randomInt = randomGenerator.nextDouble();
newArr3[idy]=(int) Math.round(randomInt);
}
return newArr3;
public MyClass(int x,int y, int z){
this.x=x;
this.y=y;
this.z=z;
this.newArr3 = new int[y];
this.newArr2 = new int[z][y];
this.arr = new int[x][z][y];
}
Мы не знаем, что 'MyMethod()' делает, что делает его очень трудно, чтобы помочь вам. Пожалуйста, предоставьте краткую, но * полную * программу, которая демонстрирует проблему. –
Ваша программа очень расплывчата. что такое X? ваш arr является 2-мерным массивом, похоже, вы понимаете, что arr [0] является массивом с 1-D? – tejas
Также 'arr' представляет собой переменную экземпляра класса, которая знает, что с ней происходит, вы касаетесь ее в myMethod или в каком-либо другом месте? –