Mezclar dos arrays en uno. Java – java array

Pregunta:


soy nuevo en el mundo de la programacion, estoy intentando mezclar dos arrays en uno, cada uno con la dimension que nosotros elijamos, y se rellena con randoms. Pero a la hora de mezlarlos, imprimiendo el primero del primer array, primero del segundo array, segundo del primer array, segundo del segundo array.. etc, me da una excepción cuando se imprime.

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 5
at arrays.Ej_5.main(Ej_5.java:34).

¿Alguna ayuda?

package arrays;
import java.util.*;

public class Ej_5 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner input = new Scanner (System.in);
        System.out.println("Introduce la dimension del primer array");
        int n=input.nextInt();
        System.out.println("Introduce la dimension del segundo array");
        int d=input.nextInt();

        int[] p_array= new int[n];
        int[] s_array= new int[d];

        for (int i=0;i<p_array.length;i++){
            p_array[i]= (int)(Math.random()*10);
            System.out.print(p_array[i] + " ");
        }

        System.out.println();

        for (int j=0;j<s_array.length;j++){
            s_array[j]=(int)(Math.random()*10);
            System.out.print(s_array[j] + " ");
        }

        System.out.println();

        int[] mezcla = new int [(n+d)-1];
        for (int k=0;k<mezcla.length;k++){
            System.out.print(p_array[k] + " ");
            System.out.print(s_array[k] + " ");
        }


    }

}

Preguntado por: Javi

diegoveloper

Claro, porque estás tratando de leer un indice del array que no existe, mira:

p_array = longitud = n
s_array = longitud = d
mezcla  = longitud = n + d - 1 

  int[] mezcla = new int [(n+d)-1];  
    for (int k=0;k<mezcla.length;k++){
        //aquí el error, va a llegar un momento que k > n y cae
        // también k > d y cae
        System.out.print(p_array[k] + " ");
        System.out.print(s_array[k] + " ");
    }

Lo que deberías hacer sería algo como esto:

int[] mezcla = new int [(n+d)-1];

//llena tu array mezcla con p_array (n) y s_array (d) 
int indice = 0;
int indiceParray = 0;
int indiceSarray= 0 ;
for (int x=0;x<mezcla.length;x++){
   //si es elemento par
   if (x%2 == 0 && indiceParray < p_array.length -1){
     mezcla[x] =  p_array[indiceParray];
     indiceParray++;
   } else if(indiceSarray < s_array.length -1){
     mezcla[x] =  s_array[indiceSarray];
     indiceSarray++;
   }
}


for (int x=0 ;x<mezcla.length;x++){
    System.out.print(mezcla[x] + " ");
}

Como bien mencionan supongamos que n introduces 5 y d = 10 cuando k llegue a 5, el indice en el arreglo p_array[5] no existe y te marcará el error.
Para solucionarlo puedes hacer esto

int mayor = n > d ? n : d; //verificamos que número es mayor
int[] mezcla = new int [mayor];
for (int k=0;k<mezcla.length;k++){
   if(n < k){
      System.out.print(p_array[k] + " ");
   }
   if(p < k){
      System.out.print(s_array[k] + " ");
   }
}

Fuente

Tags:,

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *