Eclipse - Como recorrer una matriz

 
Vista:
sin imagen de perfil

Como recorrer una matriz

Publicado por Dante (3 intervenciones) el 16/10/2021 06:07:00
Hola que tal soy nuevo en esto de programación, necesitaba alguna orientación con un problema que no puedo resolver.

Encontrar el elemento mas cercano en x posicion de una matriz.
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 Kabuto
Val: 3
Ha mantenido su posición en Eclipse (en relación al último mes)
Gráfica de Eclipse

Como recorrer una matriz

Publicado por Kabuto (14 intervenciones) el 16/10/2021 13:04:34
Entiendo que el ejercicio consiste en que el usuario introduce un valor, y debemos el buscar más cercano (o igual) entre los valores de una matriz.

Para ello podemos recorrer la matriz y calcular la diferencia entre cada elemento de la matriz y el valor a buscar.
La diferencia la iremos guardando para poder comparar en cada iteración del bucle. Si detectamos una diferencia menor a la de la comparación anterior, guardamos esa diferencia como la menor actual, así como la fila y columna del elemento que nos ha dado esa diferencia, y seguimos comparando con el resto por si encontramos otra que sea aún menor.

Hay que tener en cuenta que al comparar valores, nos pueden dar diferencias positivas y negativas.

Si el número a buscar es el 10 y comparamos con el 8, la diferencia es --> 10 - 8 = 2
Pero si luego comparamos con el 14, la diferencia es --> 10 - 14 = -4

Y si comparamos esas diferencias, el sistema dirá que -4 es menor que 2 (lo cuál es cierto) y entonces considerará que el 14 está más cercano al 10, cuando en realidad el más cercano sería el 8.

Para evitar esto, al calcular las diferencias debemos tomar el valor "absoluto" del resultado, es decir, ignorar el signo negativo si lo tuviera.
Esto lo hacemos fácil con el método Math.abs()

Ejemplo de como resolverlo:
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
public class MasCercano {
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
		int[][] matriz = generaMatriz();
 
		System.out.print("Indica valor a buscar entre 0 y 100: ");
		int buscar = teclado.nextInt();
 
		//Tomamos primer valor de la matriz como referencia para poder comparar
		int fila= 0, columna = 0;
		/*
		 * La diferencia entre el "cercano" y el número a buscar
		 * puede resultar positiva o negativa según si el cercano
		 * es mayor o menor que el número a buscar.
		 * Para facilitar las siguientes comparaciones, tomaremos
		 * el valor absoluto de la diferencia, es decir, siempre
		 * será positiva
		 */
		int diferenciaMenor = Math.abs(buscar - matriz[0][0]);
 
		//Ahora recorremos la matriz buscando un cercano con una diferencia menor a la actual
		for (int f = 0; f < matriz.length; f++)
			for (int c = 0; c < matriz[f].length; c++) {
				int diferencia = Math.abs(buscar - matriz[f][c]);
				//Si encontramos una diferencia menor ...
				if (diferencia < diferenciaMenor) {
					//...es que este valor es el más cercano, de momento.
					diferenciaMenor = diferencia;
					fila = f;
					columna = c;
				}
			}
 
		//Finalizada la búsqueda, ya tenemos el valor más cercano
		System.out.println("\nValor más cercano: " + matriz[fila][columna]);
		System.out.println("Encontrado en fila: " + fila + " , columna: " + columna);
		//Mostramos matriz
		System.out.println("\nMatriz donde se ha buscado:");
		for (int f = 0; f < matriz.length; f++)
			System.out.println(Arrays.toString(matriz[f]));
 
		teclado.close();
	}
 
	private static int[][] generaMatriz() {
 
		Random azar = new Random();
		int[][] matriz = new int[10][10];
		for (int f = 0; f < 10; f++)
			for (int c = 0; c < 10; c++)
				matriz[f][c] = azar.nextInt(100);
 
		return matriz;
	}
 
}


En pantalla vemos que efectivamente, nos encuentra el valor más cercano al introducido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Indica valor a buscar entre 0 y 100: 5
 
Valor más cercano: 6
Encontrado en fila: 3 , columna: 5
 
Matriz donde se ha buscado:
[0, 89, 59, 99, 98, 36, 59, 10, 43, 93]
[75, 93, 45, 43, 16, 31, 85, 90, 87, 43]
[2, 9, 10, 89, 28, 30, 10, 41, 87, 32]
[60, 7, 14, 67, 40, 6, 59, 99, 17, 97]
[27, 43, 76, 84, 43, 50, 53, 31, 58, 49]
[40, 62, 96, 49, 34, 61, 73, 78, 39, 87]
[11, 1, 40, 71, 44, 95, 45, 66, 18, 72]
[93, 32, 30, 80, 71, 1, 53, 44, 1, 48]
[43, 16, 8, 20, 38, 0, 86, 63, 94, 13]
[24, 89, 27, 76, 96, 45, 0, 54, 76, 31]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar