Clones de objetos y conocimiento de objetos subyacentes en referencia (JAVA)

Estoy tratando de escribir una fuente basada en el concepto de simulación "Juego de la vida". Lo que hice fue crear una clase para representar el estado del entorno del juego, pero separó la lógica de la función sucesora en una clase diferente. El estado del juego se guarda en una simple matriz multidimensional de booleanos.

Lo que se supone que debe hacer la función sucesora es guardar el estado actual en una nueva matriz como un clon del original y usarlo como base durante todo el proceso. Luego toma el estado actual del juego como referencia y lo modifica utilizando la lógica del juego. Mi problema es que cloné el original en una nueva variable, pero incluso este clon se modifica por la función sucesora.

No estoy tan seguro de lo que está sucediendo, así que no puedo depurar correctamente. Estoy más acostumbrado al manejo de C # de clones de tipos primitivos.

Aquí está mi código para la clase de envoltura de función sucesora:

Sucesora de clase pública {

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;
}

}

Las funciones get () y set () en la clase WorldPopulation son meramente operaciones de asignación y devolución.

Sé un poco sobre los matices de la clonación (clones profundos y poco profundos) de un fondo de C #, pero soy totalmente nuevo en los paradigmas de Java.

Cualquier sugerencia para mejorar mi código es muy apreciada, pero quiero saber qué está pasando y qué estoy haciendo mal. ¡Muchas gracias! :RE

Respuesta 1

¿Debo importar una clase Java si la clase que estoy importando está en el mismo paquete que la clase a la que estoy importando? (Estoy tratando de extender la clase anterior, tanto SavingsAccount como SpecialSavings están en ...

Hola, así que soy bastante horrible en Java y quiero agregar un ImageIcon ahora que he hecho esto antes e incluso tengo las imágenes para trabajar, el único problema es que el programa que estoy haciendo es para el trabajo universitario y ...

Tengo este código en la clase principal: IOUtil.readWrite (telnet.getInputStream (), telnet.getOutputStream (), System.in, System.out); Esto funciona muy bien, ya que System.in obtiene las entradas del ...

He escrito un programa en Java que crea una conexión de socket para un juego en línea simple. El servidor es multicliente y tiene una lista de usuarios registrados. Cuando cierro el cliente, envía al servidor un ...