Java - Arreglos y mezclas

 
Vista:
Imágen de perfil de Gabriel
Val: 16
Ha disminuido su posición en 32 puestos en Java (en relación al último mes)
Gráfica de Java

Arreglos y mezclas

Publicado por Gabriel (8 intervenciones) el 16/05/2020 19:21:21
Buenas,

tengo un problema, uno de los ejercicios que me toca hacer apartir de arreglos es el siguiente:

Hacer dos arreglos de 12 puestos, luego hacer un tercer arreglo y rellenarlo con los arreglos anteriores de la siguiete forma, 3 componentes del primer arreglo y luego 3 del segundo, otra vez tres del primero y asi sucesivamente, ya intente hacer un for anidado pero no logro dar con la solucion.

Gracias de antemano por la ayuda
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.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Arreglos y mezclas

Publicado por Kabuto (1381 intervenciones) el 16/05/2020 20:05:49
Hola.

Pues se me ha ocurrido una solución, no se si es la mejor, pero al menos no es complicada.

Sería usar un único for, y su indice recorrerá el array donde se mezclan los otros dos.
Para los otros dos, se usarían dos variables separadas, que se incrementarán cada vez leamos de un array o de otro.

¿Y cómo decidimos de que array leer en cada momento?
Bien, podemos usar un boolean que vaya cambiando de true a false, y viceversa, cada tres lecturas.
Cuando sea true, leemos del primer array por ejemplo.
A las tres lecturas, pasa a valor false, y así el código sabrá que ahora hay que coger valores del segundo array.
Otras tres lecturas después, recupera el valor true y volvemos a coger valores del primer array.
Y así hasta llenar el array de mezclas.

Para controlar cuantas lecturas llevamos, se puede usar una variable contador que se reinicie cada tres lecturas.
Pero se me ha ocurrido que es más rápido simplemente preguntar si el indice del bucle for que recorre el array de mezclas, es múltiplo de 3.
Cada vez que sea múltiplo de 3, es porque llevamos tres lecturas, así que es será la condición para cambiar el booleano.

No se si me he explicado bien. Seguramente leyendo el código se entiende mejor.
He creado dos arrays, uno con valores pares y otro con valores impares, todos consecutivos.
Lo he hecho así porque luego en pantalla al mostrar el array de mezclas, es más fácil comprobar a simple vista si ha funcionado correctamente

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
public class Mezclar {
 
	public static void main(String[] args) {
 
		int[] array1 = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23};
		int[] array2 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24};
		int[] mezcla = new int[24];
 
		int indice1 = 0, indice2 = 0;
		boolean leerDe1 = true; //Cambiará de true a false y viceversa cada tres lecturas
 
		for (int i = 0; i < mezcla.length; i++) {
 
			if (i % 3 == 0) //Si la i es multiplo de 3, es que ya llevamos tres lecturas
				leerDe1 = !leerDe1; //Cambiamos boolean para continuar con otro array
 
			if (leerDe1) {
				mezcla[i] = array1[indice1];
				indice1++;
			}
			else {
				mezcla[i] = array2[indice2];
				indice2++;
			}
		}
 
		System.out.println("Array mezclado:");
		System.out.println(Arrays.toString(mezcla));
 
	}
 
}

En pantalla tenemos este resultado, así que parece que funciona bien

1
2
Array mezclado:
[2, 4, 6, 1, 3, 5, 8, 10, 12, 7, 9, 11, 14, 16, 18, 13, 15, 17, 20, 22, 24, 19, 21, 23]
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Arreglos y mezclas

Publicado por Rodrigo (623 intervenciones) el 17/05/2020 03:18:33
Imposible superar la legilibilidad del codigo mostrado, al reves, facil hacerlo complicado,
aqui un esfuerzo por hacerlo complicado, eliminando todos los if;s del codigo anterior:

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
import java.util.*;
 
public class Mezclar {
 
   public static void main(String[] args) {
       int[] array1 = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23};
	   int[] array2 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24};
 
	   System.out.println("Array mezclado:");
	   System.out.println(Arrays.toString( mezcla(array1, array2) ));
   }
 
   private static int[] mezcla(int[] array1, int[] array2 ) {
      int[][] arrays = { array1, array2 };
      int[] indices = { 0, 0 };
      int[] mezcla = new int[array1.length + array2.length];
 
      for (int i = 0; i < mezcla.length; i++) {
          int cual = (i / 3) % 2;
          mezcla[i] = arrays[cual][indices[cual]++];
      }
 
      return mezcla;
   }
}

Igual podria complicarse aun mas eliminando la variable "cual" y poniendo la expresion que calcula su valor en vez.
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 Gabriel
Val: 16
Ha disminuido su posición en 32 puestos en Java (en relación al último mes)
Gráfica de Java

Arreglos y mezclas

Publicado por Gabriel (8 intervenciones) el 19/05/2020 19:15:47
Todavia soy nuevo y no entiendo como convinaste en el doble array:

1
2
3
4
for (int i = 0; i < mezcla.length; i++) {
    int cual = (i / 3) % 2;
    mezcla[i] = arrays[cual][indices[cual]++];
}
Esta parte no la entiendo
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