Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: erikskate1 en 27 Julio 2015, 03:04 AM

Título: [ayuda]Llenar un vector apartir de 2 que cree
Publicado por: erikskate1 en 27 Julio 2015, 03:04 AM
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 =)
Título: Re: [ayuda]Llenar un vector apartir de 2 que cree
Publicado por: Usuario Invitado en 27 Julio 2015, 20:06 PM
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).