Java - Cómo recorrer una matriz hasta encontrar lo deseado

 
Vista:
sin imagen de perfil

Cómo recorrer una matriz hasta encontrar lo deseado

Publicado por Dante (2 intervenciones) el 17/10/2021 22:15:10
Hola buenas, soy nuevo en esto de programación y no entiendo cómo resolver este problema.
Resulta que debo una matriz hasta encontrar el elemento deseado desde posición[x][y] .
Por cierto esa posición la debe dar el usuario. Una vez que encuentre el elemento debe devolver la posición del elemento.
Gracias
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

Cómo recorrer una matriz hasta encontrar lo deseado

Publicado por Santiago (25 intervenciones) el 18/10/2021 10:28:59
Hola, Dante:

¿Puedes enviarnos el código que tengas hecho?
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
sin imagen de perfil

Cómo recorrer una matriz hasta encontrar lo deseado

Publicado por Dante (2 intervenciones) el 19/10/2021 00:19:05
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
public class Mapa {
 
 
	private Cosas[][] cosas;
 
 
	public Mapa(int filas, int columnas) {
		this.cosas = new Cosas[filas][columnas];
		for (int i = 0; i < this.cosas.length; i++)
			for (int j = 0; j < this.cosas[i].length; j++)
				cosas[i][j] = Cosas.NADA;
 
	}
 
 
	/**
	 * Coloca la cosa en una posición del mapa. Sirve para
	 * preparar los mapas
	 * @param cosa, la cosa a colocar
	 * @param x, la posición donde colocar la cosa en x
	 * @param y, la posición donde colocar la cosa en y
	 */
	public void colocar(Cosas cosa, int x, int y) {
	 if(x > cosas.length - 1 || y > cosas[x].length || x < 0 || y < 0){
			Error posicionErronea = new Error("Intenta colocar una cosa por fuera del mapa");
			throw posicionErronea;
		}
		this.cosas [x][y] = cosa;
 
	}
 
	/**
	 * Buscará la cosa más cercana desde la posición suministrada
	 * @param cosa, la cosa a buscar. No debe ser Cosas.NADA
	 * @param x, la posición de origen en x
	 * @param y, la posición de origen en y
	 * @return la posicion de la cosa más cercana a x, y
	 */
	public Posicion buscarCosaMasCercana(Cosas cosa, int x, int y) {
		// completar, evitando utilizar "fuerza bruta"
		Posicion unaPosicion = new Posicion();
		Cosas objetoABuscar = Cosas.NADA;
		int vueltasX = x ;
		int vueltasY = y ;
 
		int cont = 1;
 
 
		if (x > cosas.length - 1 || y > cosas[x].length - 1|| x < 0 || y < 0){
			Error estasFuera = new Error("Estas fuera del mapa");
			throw estasFuera;
		}
		else if (cosa == Cosas.NADA){
			Error noSeBuscaNada = new Error("No puede buscar este objeto");
			throw noSeBuscaNada;
		}
 
		while(objetoABuscar != cosa){
			if (cosas[x][y] == cosa){
				objetoABuscar = cosa;
			}
 
			else {
 
				if(x + cont < cosas.length - 1){
 
					for(int a = x;a < vueltasX + cont;a++){
						if(cosas[a][y] == cosa){
					objetoABuscar = cosa;
						}
						x++;
						}
 
 
					vueltasX = x;
					}
				if(y - cont > 0){
 
						for(int i = y ;i > vueltasY - cont ; i--){
							if(cosas[x][i] == cosa ){
								objetoABuscar = cosa;
							}
							y--;
						}}
 
						vueltasY = y;
						cont++;
 
				if(x - cont > 0){
 
						for(int ar = x ; ar > vueltasX - cont ; ar--){
							if(cosas[ar][y] == cosa){
							objetoABuscar = cosa;
						}
						x--;
						}}
 
						vueltasX = x;
 
				if(y + cont < cosas [x].length - 1){
 
						for(int d = y ; d < vueltasY + cont ; d++){
						if(cosas[x][d] == cosa){
							objetoABuscar = cosa;
						}
						y++;
						}}
 
						vueltasY = y;
						cont++;
 
						}
 
						}
 
		if(objetoABuscar != cosa){
			Error noEsta = new Error("El objeto no esta en el mapa");
			throw noEsta;
 
		}else {
			unaPosicion.x = x;
			unaPosicion.y = y;
 
			System.out.print(x+","+y);
		}
 
		return unaPosicion;
 
 
 
 
 
	}
 
	/**
	 * Buscará la cosa más lejana desde la posición suministrada
	 * @param cosa, la cosa a buscar. Puede ser Cosas.NADA
	 * @param x, la posición de origen en x
	 * @param y, la posición de origen en y
	 * @return la posicion de la cosa más lejana a x, y
	 */
	public Posicion buscarCosaMasLejana(Cosas cosa, int x, int y) {
		Posicion unaPosicion = new Posicion ();
		Cosas cosaABuscar = Cosas.NADA;
		int cont = 1;
		int vueltasX = 0;
		int vueltasY = 0;
 
 
 
 
		if (x > cosas.length - 1 || y > cosas[x].length - 1|| x < 0 || y < 0){
			Error estasFuera = new Error("Estas fuera del mapa");
			throw estasFuera;
		}
		else if (cosa == Cosas.NADA){
			Error noSeBuscaNada = new Error("No puede buscar este objeto");
			throw noSeBuscaNada;
		}
 
 
 
		if (cosas[x][y] == cosa){
			cosaABuscar = cosa;
		}
 
		else {
 
			if(x + cont < cosas.length - 1){
 
				for(int a = x;a < vueltasX + cont;a++){
					if(cosas[a][y] == cosa){
				cosaABuscar = cosa;
					}
					x++;
					}
 
 
				vueltasX = x;
				}
			if(y - cont > 0){
 
					for(int i = y ;i > vueltasY - cont ; i--){
						if(cosas[x][i] == cosa ){
							cosaABuscar = cosa;
						}
						y--;
					}}
 
					vueltasY = y;
					cont++;
 
			if(x - cont > 0){
 
					for(int ar = x ; ar > vueltasX - cont ; ar--){
						if(cosas[ar][y] == cosa){
						cosaABuscar = cosa;
					}
					x--;
					}}
 
					vueltasX = x;
 
			if(y + cont < cosas [x].length - 1){
 
					for(int d = y ; d < vueltasY + cont ; d++){
					if(cosas[x][d] == cosa){
						cosaABuscar = cosa;
					}
					y++;
					}}
 
					vueltasY = y;
					cont++;
 
					}
 
 
		if (){
 
		}
 
 
 
 
					}
 
 
 
 
 
 
	}
 
 
 
 
 
 
 
class Posicion {
	int x, y;
	}
 
enum Cosas {
	ENEMIGO, FRUTA, NADA, PARED
}
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

Cómo recorrer una matriz hasta encontrar lo deseado

Publicado por Santiago (25 intervenciones) el 20/10/2021 12:00:44
Hola, Dante.

Creo que no estoy entendiendo bien la pregunta.

Tienes una matriz bidimensional de "Cosas".
- Si quieres buscar por contenido (por ejemplo, buscar el primer elemento que tenga "Cosas.FRUTA", haces el bucle que ya tienes en el código y buscas esa "FRUTA".
- Si quieres buscar la "Cosa" por posición (x,y), devuelves ese elemento:cosa[x][y].

Adjunto algo de código por si fuera esto lo que quieres. Si no, trata de concretar mejor, por favor,

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
public class RecorrerMatriz {
 
	public static void main(String[] args) {
 
		// Esto para hacer un ejemplo pequeño y fácil de entender
		int filas = 4;
		int columnas = 4;
		Cosas[][] cosas = new Cosas[filas][columnas];
 
		// Cargamos todos los elementos de la matriz con "NADA"
		for (int i = 0; i < cosas.length; i++)
			for (int j = 0; j < cosas[i].length; j++)
				cosas[i][j] = Cosas.NADA;
 
		// Cargamos el elemento que queremos encontrar
		cosas[2][3]=Cosas.FRUTA;
 
		// Buscamos por contenido
		for (int i = 0; i < cosas.length; i++) {
			for (int j = 0; j < cosas[i].length; j++) {
				if(cosas[i][j] == Cosas.FRUTA) {
					System.out.println("Posición: i= " + Integer.toString(i) + " ; j = " + Integer.toString(j));
				}
			}
		}
 
		// Buscamos por posición
		int posicionI=3;
		int posicionJ=1;
		System.out.println("Posición: " + cosas[posicionI][posicionJ]);
 
 
	}
 
 
}
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