Java - matrices y arreglos

 
Vista:
Imágen de perfil de rocio
Val: 39
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

matrices y arreglos

Publicado por rocio (15 intervenciones) el 13/09/2020 02:53:13
Hola buenas noches, una pregunta

tengo esta actividad que no sabria como se hace y ya me rendi la verdad xd, es hacer una funcion boolean que recibe como parametro una matriz y un arreglo
la idea es q el arreglo este en una columna de la matriz en el orden del arreglo
por ejemplo si la matriz es

1234
2357
1236
2345

ejemplo
si el arreglo es 4765 y alguna columna de la matriz es igual al arreglo retorna true (4ta columna)
si la columna es 6574 retorna false por q no es igual al arreglo pasado por parametro

para recorrer la matriz recorro la columna primero y luego las filas... lo que no me sale es verificar q una columna sea como el arreglo
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

matrices y arreglos

Publicado por Rodrigo (623 intervenciones) el 13/09/2020 03:13:30
Sugiero copiar y pegar aqui, para poder ver el programa sin bajar archivo alguno.
Usa el boton Codigo </> para que aparezca mejor presentado.
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 rocio
Val: 39
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

matrices y arreglos

Publicado por rocio (15 intervenciones) el 13/09/2020 06:31:22
el archivo solo es uan imagen de un ejemplo como el que di
osea
el arreglo que yo ponga tiene q ser una columna de la matriz para retornar true sino false
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

matrices y arreglos

Publicado por Kabuto (1381 intervenciones) el 13/09/2020 14:01:05
El procedimiento sería recorrer los primeros elementos de cada columna de la matriz, y compararlo con el primer elemento del arreglo.

Si alguno de estos elementos coincide, entonces es posible que hayamos encontrado el arreglo dentro de la matriz, pero hay que comparar el resto de elementos de ESA COLUMNA con el resto de elementos del arreglo.

Con distintos bucles y una variable boolean se puede controlar si encontramos o no lo que buscamos.

El boolean por defecto comenzaría con valor false.

Cuando al comprobar primeros elementos de cada columna encontramos coincidencia con primer elemento del array, el boolean lo ponemos en true.
Pero es algo temporal, hay que confirmar si mantiene ese valor comprobando el resto de elementos con otro bucle que recorrar el arreglo y esa columna.
Si este bucle encuentra algún valor de la columna que NO coincide con su correspondiente elemento del arreglo, entonces el boolean vuelve a ser false.

Pero si encuentra que todos los valores coinciden bien, al terminar este bucle el boolean conserva el valor true y esto pondría fin a la búsqueda, pues se ha encontrado lo que buscábamos.

Te dejo un código, que quizás se entienda mejor viendo el código que explicándolo.
Cualquier duda pregunta e intentamos explicarlo de otro modo.

Un saludo.

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
public class ArrayEnMatriz {
 
 
	public static void main(String[] args) {
 
		int[][] matriz = {
				{1, 2, 3, 4},
				{2, 3, 5, 7},
				{1, 2, 3, 6},
				{2, 3, 4, 5},
		};
 
		int[] arreglo1 = {4,7,6,5};
		int[] arreglo2 = {6,5,7,4};
 
		System.out.println("MATRIZ");
		for (int i = 0; i < matriz[0].length; i++)
			System.out.println(Arrays.toString(matriz[i]));
 
		//Comprobamos arreglo1
		System.out.println("\nArreglo 1");
		System.out.println(Arrays.toString(arreglo1));
 
		System.out.println(arrEnMatriz(matriz, arreglo1)?"Sí está en Matriz":"No está en Matriz");
 
		//Comprobamos arreglo2
		System.out.println("\nArreglo 2");
		System.out.println(Arrays.toString(arreglo2));
 
		System.out.println(arrEnMatriz(matriz, arreglo2)?"Sí está en Matriz":"No está en Matriz");
	}
 
	private static boolean arrEnMatriz(int[][] matriz, int[] arreglo) {
 
		boolean encontrado = false; //Aquí controlamos si encontramos o no el arreglo en matriz
 
		//Buscamos primer elemento del arreglo, en los primeros
		//elementos de las columnas de la matriz
 
		for (int col = 0; col < matriz[0].length && !encontrado; col++) {
 
			if ( matriz[0][col] == arreglo[0]) {
				encontrado = true; //De momento, lo consideramos "encontrado"
				//Hay una coincidencia, pero no es definitivo
				//debemos revisar el resto de la columna para confirmar
				for (int elem = 1; elem < arreglo.length; elem++) {
					if (matriz[elem][col] != arreglo[elem]) //Si se encuentra valor no coincidente..
						encontrado = false; //...pues ya no se considera "encontrado"
				}
			}
		}
 
		return encontrado;
	}
 
}


En pantalla da este resultado:
1
2
3
4
5
6
7
8
9
10
11
12
13
MATRIZ
[1, 2, 3, 4]
[2, 3, 5, 7]
[1, 2, 3, 6]
[2, 3, 4, 5]
 
Arreglo 1
[4, 7, 6, 5]
Sí está en Matriz
 
Arreglo 2
[6, 5, 7, 4]
No está en Matriz
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

matrices y arreglos

Publicado por Rodrigo (623 intervenciones) el 13/09/2020 15:34:09
La solucion mostrada hay que corregirla pues al parecer tiene un error.
Para el ejemplo, basta que 2 columnas comiencen con 4, que una primera columna calce y otra segunda no para que esa funcion retorne false aunque haya habido una coincidencia inicialmente.

Parece mejor retornar inmediatamente una vez encontrado 1 columna que calce.

Se pueden simplificar el codigo y evitar algunos if() tambien si se decide retornar asi.
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

matrices y arreglos

Publicado por Rodrigo (623 intervenciones) el 13/09/2020 16:09:49
Mmmm, me parece que si funciona por el !encontrado del primer ciclo.
Me pego en las manos por escribir de mas :(

Como compensacion de esta falsa acusacion, aqui una version distinta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ....
for (int col = 0; col < matriz[0].length; col++) {
   encontrado = true;
   for (int elem = 0; elem < arreglo.length; elem++) {
      if (matriz[elem][col] != arreglo[elem]) {
         encontrado = false; // salir del 2do ciclo si no hay calce
         break;
      }
   }
   if(encontrado) {  // calce, tiempo de salir de la funcion
      return true;
   }
}
 
return false;  // nunca hubo calce antes
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

matrices y arreglos

Publicado por Rodrigo (623 intervenciones) el 13/09/2020 16:45:58
Tambien podria reducirse el codigo del segundo ciclo asi:

1
2
3
4
5
6
7
8
9
10
11
for (int col = 0; col < matriz[0].length; col++) {
   encontrado = true;
   for (int elem = 0; encontrado && elem < arreglo.length; elem++) {
      encontrado = (matriz[elem][col] == arreglo[elem]);
   }
   if(encontrado) {  // calce, tiempo de salir de la funcion
      return true;
   }
}
 
return false;

Aunque prefiero un cambio de nombre de variable:

1
2
3
4
5
6
7
8
9
10
11
for (int col = 0; col < matriz[0].length; col++) {
   boolean calce = true;
   for (int elem = 0; calce && elem < arreglo.length; elem++) {
      calce = (matriz[elem][col] == arreglo[elem]);
   }
   if(calce) {  // calce, tiempo de salir de la funcion
      return true;
   }
}
 
return false;

y parece mejor usar la variable para salir del ciclo, asi que combinando las 2 ideas queda:

1
2
3
4
5
6
7
8
9
10
11
private static boolean arrEnMatriz(int[][] matriz, int[] arreglo) {
   boolean calce = false;
   for (int col = 0; !calce && col < matriz[0].length; col++) {
      calce = true;
      for (int elem = 0; calce && elem < arreglo.length; elem++) {
         calce = (matriz[elem][col] == arreglo[elem]);
      }
   }
 
   return calce;
}
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

matrices y arreglos

Publicado por Kabuto (1381 intervenciones) el 13/09/2020 22:33:10
Genial, distintas formas de resolverlo
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