Java - Como acceder a un objeto dependiendo de sus atributos

 
Vista:

Como acceder a un objeto dependiendo de sus atributos

Publicado por Cata (7 intervenciones) el 17/11/2020 23:24:00
Tengo que crear un tablero, y que cada posición del tablero sea una celda.
Que debería añadir para acceder por ejemplo, a la celda de la posición [1][1] para cambiar su estado?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Tablero {
 
	private static final int FILAS = 8;
	private static final int COLUMNAS = 8;
 
	private String[][] tablero;
	Celda celda;
 
	/**
	 * Constructor de tablero
	 */
	public Tablero() {
		tablero = new String[FILAS][COLUMNAS];
			for(int i = 0; i < FILAS; i++) {
				for(int j = 0; j< COLUMNAS; i++) {
					celda = new Celda(i,j);
				}
			}
	}
 
       public class Celda {
 
        //Estado es un enum con los diferentes estados posibles
        private Estado estado;
	private int fila;
	private int columna;
 
		public Celda(int fila, int columna) {
			this.fila = fila;
			this.columna = columna;
			estado = Estado.OCULTO;
		}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como acceder a un objeto dependiendo de sus atributos

Publicado por Billy Joel (876 intervenciones) el 18/11/2020 00:11:34
Podrías subir la clase Estado para tener un panorama mas completo;

Creo que entendí la pregunta.
En tu clase Celda tiene propiedades que deben ser inmutables como lo son los atributos fila y columna. También tienes un tercer atributo que se llama estado y que puede tener varios valores.
Lo que debes hacer es añadir sus get y set
1
2
3
4
5
6
7
public void setEstado(Estado estado){
    this.estado = estado;
}
 
public Estado getEstado(){
    return estado;
}

Creo que eso debe responder a tu pregunta.

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como acceder a un objeto dependiendo de sus atributos

Publicado por Cata (7 intervenciones) el 18/11/2020 00:19:54
Aquí esta la clase Estado
También he puesto un método de la clase celda, me gustaría saber como usar ese método desde la clase tablero y solo para una celda en concreto de fila x y columna y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public enum Estado {
	DESCUBIERTA('0'),
	MARCADA('P'),
	OCULTA('-');
 
	private char caracter;
 
	private Estado(char x){
		caracter = x;
	}
 
	public char getCaracter(){
		return caracter;
	}
 
}
 
void establecerSiguienteEstadoMarcar() {
			if(estado == Estado.OCULTA) {
				estado = Estado.MARCADA;
			}
			else if(estado == Estado.MARCADA) {
				estado = Estado.OCULTA;
			}
		}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como acceder a un objeto dependiendo de sus atributos

Publicado por Rodrigo (623 intervenciones) el 18/11/2020 00:33:08
Creo que el tablero deberia ser un arreglo de Celdas, no un arreglo de Strings.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como acceder a un objeto dependiendo de sus atributos

Publicado por Billy Joel (876 intervenciones) el 18/11/2020 04:59:25
Ok con el panorama completo tu tablero lo manejaría así.
Vamos primero con lo mas básico el enum Estado
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public enum Estado {
    DESCUBIERTA('0'),
    MARCADA('P'),
    OCULTA('-');
 
    private final char caracter;
 
    private Estado(char x) {
        caracter = x;
    }
 
    public char getCaracter() {
        return caracter;
    }
}

Entonces la clase Celda la dejo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class Celda {
 
    //Estado es un enum con los diferentes estados posibles
    private Estado estado;
    private int fila;
    private int columna;
 
    public Celda(int fila, int columna) {
        this.fila = fila;
        this.columna = columna;
        estado = Estado.OCULTA;
    }
 
    void establecerSiguienteEstadoMarcar() {
        if (estado == Estado.OCULTA) {
            estado = Estado.MARCADA;
        } else if (estado == Estado.MARCADA) {
            estado = Estado.OCULTA;
        }
    }
 
    public void setFila(int fila) {
        this.fila = fila;
    }
 
    public int getFila() {
        return fila;
    }
 
    public void setColumna(int columna) {
        this.columna = columna;
    }
 
    public int getColumna() {
        return columna;
    }
 
    public void setEstado(Estado estado) {
        this.estado = estado;
    }
 
    public Estado getEstado() {
        return estado;
    }
}

Y ahora así la clase principal Tablero
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class Tablero {
 
    private static final int FILAS = 8;
    private static final int COLUMNAS = 8;
    private final Celda[][] tablero;
 
    /**
     *
     * Constructor de tablero
     *
     */
    public Tablero() {
        tablero = new Celda[FILAS][COLUMNAS];
        for (int i = 0; i < FILAS; i++) {
            for (int j = 0; j < COLUMNAS; j++) {
                tablero[i][j] = new Celda(i, j);
            }
        }
    }
 
    public Celda[][] getTablero() {
        return tablero;
    }
 
    public static void main(String[] args) {
        Tablero t = new Tablero();
        //Mostramos el tablero
        for (int i = 0; i < Tablero.FILAS; i++) {
            for (int j = 0; j < Tablero.COLUMNAS; j++) {
                System.out.print("[" + t.getTablero()[i][j].getEstado().getCaracter() + "]\t");
            }
            System.out.println();
        }
        System.out.println("\n");
 
        //Ahora marcamos la diagonal principal
        for (int i = 0; i < Tablero.FILAS; i++) {
            t.getTablero()[i][i].setEstado(Estado.MARCADA);
        }
 
        //Nuevamente mostramos el tablero para ver el resultado
        for (int i = 0; i < Tablero.FILAS; i++) {
            for (int j = 0; j < Tablero.COLUMNAS; j++) {
                System.out.print("[" + t.getTablero()[i][j].getEstado().getCaracter() + "]\t");
            }
            System.out.println();
        }
    }
}

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como acceder a un objeto dependiendo de sus atributos

Publicado por Cata (7 intervenciones) el 18/11/2020 12:02:52
Muchas gracias, ha sido de gran ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar