我有一个问题,我完全不知道这个,所以我做了一个类似的编码,并在这里发布我的问题希望你们可以帮助我。这是我的主要课程:
package test;
public class Test {
public static void main(String[] args) {
newclass [] NC;
NC = new newclass[2];
Object[][] array = new Object[5][5];
int x=5, y=5;
for (int i=0 ; i<2 ; i++){
NC[i]= new newclass(array, x, y);
}
//solve roomHC
for (int i=0 ; i<2 ; i++){
NC[i].storedata();
}
//display solution
for (int i=0 ; i<2 ; i++){
System.out.print("\n");
NC[i].display();
System.out.print("========================");
}
}
}
这是我的新课程:
package test;
import java.util.ArrayList;
import java.util.List;
public class newclass {
private Object[][] array;
private int x, y;
List<Integer> slot = new ArrayList<>();
public newclass(Object[][]array, int x, int y){
this.array = array;
this.x = x;
this.y = y;
}
public void storedata(){
int i=0;
while( i < 2 ){
int a,b;
a=(int) Math.floor(Math.random()*(x));
b=(int) Math.floor(Math.random()*(y));
if(NC[a][b]==null){
slot.add(0);
NC[a][b] = slot;
slot = new ArrayList<>();
}
else{
List templist = (List)NC[a][y];
templist.add(0);
}
i++;
}
}
public void display(){
for(int i=0; i<x ;i++){
for(int j=0; j<y ;j++){
List templist = (List)array[i][j];
if(templist==null){
System.out.print("");
}
else{
for (int k = 0; k < templist.size(); k++) {
System.out.print(templist.get(k));
}
}
System.out.print(",");
}
System.out.print("\n");
}
}
}
我的问题是在主类的第二个循环中覆盖&#34; 0 |&#34;再次在数组NC
答案 0 :(得分:2)
您将同一个对象数组传递给newclass
的两个实例。因此,当您在其中一个中更改它时,对另一个内部指向的相同数组进行更改。
将数组或对象传递给方法时,您传递的是引用,而不是它的新副本。
如果您希望每个newclass
实例都有一个单独的私有,无法从外部访问对象数组,则必须在构造函数中使用new
。例如:
public newclass(int x, int y){
this.NC = new Object[x][y];
this.x = x;
this.y = y;
}
并像这样使用它:
public static void main(String[] args) {
newclass [] NC;
NC = new newclass[2];
int x=5, y=5;
for (int i=0 ; i<2 ; i++){
NC[i]= new newclass(x,y);
}
//solve roomHC
for (int i=0 ; i<2 ; i++){
NC[i].storedata();
}
//display solution
for (int i=0 ; i<2 ; i++){
System.out.print("\n");
NC[i].display();
System.out.print("========================");
}
}