Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象克隆和了解引用中的底层对象(JAVA)_Java_Object_Reference_Clone - Fatal编程技术网

对象克隆和了解引用中的底层对象(JAVA)

对象克隆和了解引用中的底层对象(JAVA),java,object,reference,clone,Java,Object,Reference,Clone,我试图写源代码的基础上“游戏的生活”的模拟概念。我所做的是创建一个类来表示游戏环境状态,但在另一个类中分离后续函数的逻辑。游戏状态保存在一个简单的多维布尔数组中 后续函数应该做的是将当前状态保存在新数组中,作为原始状态的克隆,并在整个过程中以此为基础。然后,它将游戏的当前状态作为参考,并使用游戏逻辑对此进行修改。我的问题是我将原始变量克隆到了一个新变量中,但即使是这个克隆也会被后续函数修改 我不太确定发生了什么,所以无法正确调试。我更习惯于C#对原始类型克隆的处理 下面是我的后续函数包装类代码:

我试图写源代码的基础上“游戏的生活”的模拟概念。我所做的是创建一个类来表示游戏环境状态,但在另一个类中分离后续函数的逻辑。游戏状态保存在一个简单的多维布尔数组中

后续函数应该做的是将当前状态保存在新数组中,作为原始状态的克隆,并在整个过程中以此为基础。然后,它将游戏的当前状态作为参考,并使用游戏逻辑对此进行修改。我的问题是我将原始变量克隆到了一个新变量中,但即使是这个克隆也会被后续函数修改

我不太确定发生了什么,所以无法正确调试。我更习惯于C#对原始类型克隆的处理

下面是我的后续函数包装类代码:

公共阶级继承人{

boolean[][] current_state;
public void next(WorldPopulation worldState){
    int dim_x = worldState.get_width();
    int dim_y = worldState.get_height();
    boolean[][] nextstate = worldState.get_state();
    current_state = worldState.get_state().clone();
    for(int i=0; i<dim_y; i++){
        for(int j=0; j<dim_x; j++){
            int neighbors = 0;
            neighbors = countThyNeighbors(i, j);
            if((neighbors>3 || neighbors<3) && current_state[i][j]){
                nextstate[i][j] = false;
            } else if(!current_state[i][j] && neighbors>=3) { nextstate[i][j] = true; }
        }
    }
}
private int countThyNeighbors(int y, int x) {
    int[] grid_x = { x-1, x, x+1, x-1, x+1, x-1, x, x+1};
    int[] grid_y = { y-1, y-1, y-1, y, y, y+1, y+1, y+1};
    int neighbors = 0;
    for(int i=0; i<8; i++){
        try{
        if(current_state[grid_y[i]][grid_x[i]])
            neighbors++;
        } catch(Exception e) { continue;}
    }
    return neighbors;
}
boolean[][]当前状态;
下一个公共空间(世界人口世界州){
int dim_x=worldState.get_width();
int dim_y=worldState.get_height();
布尔值[][]nextstate=worldState.get_state();
当前_state=worldState.get_state().clone();

对于(int i=0;i多维数组表示为数组的数组。 Java中的克隆方法是浅层的,这意味着多维数组没有被深度克隆


您可以实现自己的深度复制方法或使用所描述的序列化

多维数组表示为数组的数组。 Java中的克隆方法是浅层的,这意味着多维数组没有被深度克隆


您可以实现自己的深度复制方法或使用所描述的序列化

谢谢。我想我更了解它了!:D谢谢。我想我更了解它了!:D