将数据存储到不同的对象但被覆盖

时间:2014-10-24 12:31:50

标签: java arrays nested

我有一个问题,我完全不知道这个,所以我做了一个类似的编码,并在这里发布我的问题希望你们可以帮助我。这是我的主要课程:

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

1 个答案:

答案 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("========================");
    }
}