[ayuda]Llenar un vector apartir de 2 que cree

Iniciado por erikskate1, 27 Julio 2015, 03:04 AM

0 Miembros y 1 Visitante están viendo este tema.

erikskate1

Hola amigos estoy estudiando vectores para tratar de entenderles mejor pero me he atorado mi problema es (Imprimir la serie 1,5,3,7,5,9,7,11 ) ya se que este problema se puede hacer sin vectores pero quiero hacerlo con vectores =). ya tengo practicamente todo tengo tengo 3 vectores 1 donde se guardara la serie, 1 donde me imprime los numeros (1,3,5,..,n) y 1 vector donde imprime los num (5,7,9,..,n) y aqui viene mi problema quiero juntar esos 2 vectores para que los imprima en 1 solo pero que imprima en este orden
EJEMPLO
VEC1 = 1 3 5 7
VEC2 = 5 7 9 11
SERIE = 1 5 3 7 5 9 7 11  // ocea que me imprima primero la pos 0 del vec1 y luego la pos 0 del vec2 y asi sucesivamente, he intentado varias cosas pero ninguna me funciona. me pueden ayudar porfavor.
Mi codigo es este:

public class Serie {
   public static void main(String[] args) {
    Scanner en = new Scanner(System.in);
    System.out.print("Ingresa el valor de la serie: ");
    int n = en.nextInt();
   
   int veco[] = new int[n];
   int conPar =0,conImp=0;

//FUNCION QUE ME DICE SI ES PAR O NO
      public static boolean pi(int n ){
       if(n %2 == 0){
           return true;
       }else {
           return false;
       }
   }
 
//SE IMPRIME EL PRIMER ARREGLO SIN LA SERIE

   System.out.println("Arreglo primario");
   for (int i=0; i<n ; i++){
       veco [ i ]=i;
        System.out.print("\t"+veco [ i ]);
//SI ES PAR EL SE INCREMENTA UN CONTADOR PARA LOS PARES
       if(pi(i)){
           conPar++;
       }else {
//SI ES IMPAR EL SE INCREMENTA UN CONTADOR PARA LOS IMPARES
           conImp++;
       }
   }
// ARREGLOS VEC1, VEC2
    int par[] = new int[conPar];
    int imp[] = new int[conImp];
    //llenado arreglos auxiliares
   System.out.println("\ntArreglo pares");
  int aux1=1;
   for(int i = 0; i< conPar;i++){
        par [ i ] = aux1;
        aux1 +=2;
          System.out.println(par [ i ]);
//este arreglo contiene los valores 1,3,5,7,..,n
    }
   System.out.println("Arreglo imp");
   int aux=5;
   for(int i = 0; i< conImp;i++){
       
       imp [ i ] = aux;
       aux+=2;
       
         System.out.println(imp [ i ]);

//este arreglo contiene los valores 5,7,9,11,..,n
    }

//aqui es donde mi programa truena :S que es donde trato de juntar los 2 arreglos //y que me imprima la pos0 del arreglo 1 y despues la pos0 del arreglo 2   y asi //susesivamente
 
 //llenado del arreglo final

   for (int i =0 ; i< veco.length;i++){
               if(pi(veco [ i ])){
               veco [ i ] = par [ i ];
              } else{
               veco [ i ] = imp [ i ];
              }
      //lo que intento hacer es mientras la posicion del vector veco sea par  me //imprima lo que esta en el arreglo de par[] y si la pos del vector veco es impar //que me imprima lo que esta en el arreglo de imp[]  a si lo pense ya que la pos 0 //es par entonces imp el valor 1 del vector par, despues es impar ahora imprimira //el valor 5 del vector impar, y asi se seguia la pos2 es par entonces imprimira 3, //la pos3 es impar entonces imprimira 7 :S pero me da error    
    }
// aqui ya se imprime la serie :S pero no imprimira nada por que estoy mal en el llenado del arreglo final :C  
         
      //Mostrando el arreglo final
    for (int i = 0; i < n; i++){
           System.out.println("vector("+i +")="+veco[ i ]);
       }
   }
       
}

Porfavor, porfavor :S no entiendo como llenar ese arreglo y solo me falta eso :S de antemano muchisismas gracias cualquier comentario , critica constructiva es aceptada contal de mejorar =)

Usuario Invitado

#1
Es sencillo, solo hay que pensar un poco.

Código (java) [Seleccionar]
import java.util.Scanner;

public class SerieUtil {
public static void main(String[] args) {
Integer[] serie;
Integer[] even;
Integer[] odd;
final Scanner READER = new Scanner(System.in);

System.out.print("Ingrese el límite de la serie impar: ");
byte limit = READER.nextByte();

serie = new Integer[Math.round((float) limit/2)];
even = new Integer[serie.length/2];
odd = new Integer[Math.round((float) serie.length/2)];

// llena los arreglos
int serieValue = 1;
for(byte i=0; i<serie.length; i++) {
serie[i] = serieValue;

// empieza a contar en el indice 1, no 0:
// 1, 3, 5, 7, 9, 11, 13 -> 1 es indice 1,
// 3 es indice 2, 5 es indice 3, etc...
int aux = i+1;
if(aux % 2 == 0) {
int evenIndex = getIndexToFill(even);
even[evenIndex] = serieValue;
}
else {
int oddIndex = getIndexToFill(odd);
odd[oddIndex] = serieValue;
}

serieValue += 2; // va de 2 en 2, 1-3-5-7...
}

for(byte i=0; i<serie.length; i++) {
if(i < even.length)
System.out.println(even[i]);
// si i es mayor quel tamaño de even
// entonces, se debe empezar a imprimir
// el arreglo odd, por lo tanto, la forma
// de acceder al valor actual de odd
// es restando i (indice de serie) - el
// tamaño de even. Por ejemplo, even tiene
// un  tamaño de 3 y odd de 4. Cuando i
// vale 3 (supera el tamaño de even), se de
// be entonces empezar a imprimir odd. Entonces,
// i(3) - even.length(3) = 0 -> odd[0],
// i(4) - even.length(3) = 1 -> odd[1],
// i(5) - even.length(3) = 2 -> odd[2],
// i(6) - even.length(3) = 2 -> odd[3]
else {
System.out.println(odd[i - even.length]);
}
}

}

// Obtiene el primer índice null para establecer un
  // número de la serie
public static int getIndexToFill(Integer[] array) {
// if array is fill, the last index fill is the last index
int indexToFill = array.length - 1;

for(int i=0; i<array.length; i++) {
if(array[i] == null) {
indexToFill = i;
break;
}
}

return indexToFill;
}

}


PD: Los códigos deben ir entre etiquetas GeSHi (leer reglas del foro).
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein