elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [ayuda]Llenar un vector apartir de 2 que cree
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [ayuda]Llenar un vector apartir de 2 que cree  (Leído 2,184 veces)
erikskate1

Desconectado Desconectado

Mensajes: 7


Ver Perfil
[ayuda]Llenar un vector apartir de 2 que cree
« 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 =)


« Última modificación: 27 Julio 2015, 03:25 am por erikskate1 » En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: [ayuda]Llenar un vector apartir de 2 que cree
« Respuesta #1 en: 27 Julio 2015, 20:06 pm »

Es sencillo, solo hay que pensar un poco.

Código
  1. import java.util.Scanner;
  2.  
  3. public class SerieUtil {
  4. public static void main(String[] args) {
  5. Integer[] serie;
  6. Integer[] even;
  7. Integer[] odd;
  8. final Scanner READER = new Scanner(System.in);
  9.  
  10. System.out.print("Ingrese el límite de la serie impar: ");
  11. byte limit = READER.nextByte();
  12.  
  13. serie = new Integer[Math.round((float) limit/2)];
  14. even = new Integer[serie.length/2];
  15. odd = new Integer[Math.round((float) serie.length/2)];
  16.  
  17. // llena los arreglos
  18. int serieValue = 1;
  19. for(byte i=0; i<serie.length; i++) {
  20. serie[i] = serieValue;
  21.  
  22. // empieza a contar en el indice 1, no 0:
  23. // 1, 3, 5, 7, 9, 11, 13 -> 1 es indice 1,
  24. // 3 es indice 2, 5 es indice 3, etc...
  25. int aux = i+1;
  26. if(aux % 2 == 0) {
  27. int evenIndex = getIndexToFill(even);
  28. even[evenIndex] = serieValue;
  29. }
  30. else {
  31. int oddIndex = getIndexToFill(odd);
  32. odd[oddIndex] = serieValue;
  33. }
  34.  
  35. serieValue += 2; // va de 2 en 2, 1-3-5-7...
  36. }
  37.  
  38. for(byte i=0; i<serie.length; i++) {
  39. if(i < even.length)
  40. System.out.println(even[i]);
  41. // si i es mayor quel tamaño de even
  42. // entonces, se debe empezar a imprimir
  43. // el arreglo odd, por lo tanto, la forma
  44. // de acceder al valor actual de odd
  45. // es restando i (indice de serie) - el
  46. // tamaño de even. Por ejemplo, even tiene
  47. // un  tamaño de 3 y odd de 4. Cuando i
  48. // vale 3 (supera el tamaño de even), se de
  49. // be entonces empezar a imprimir odd. Entonces,
  50. // i(3) - even.length(3) = 0 -> odd[0],
  51. // i(4) - even.length(3) = 1 -> odd[1],
  52. // i(5) - even.length(3) = 2 -> odd[2],
  53. // i(6) - even.length(3) = 2 -> odd[3]
  54. else {
  55. System.out.println(odd[i - even.length]);
  56. }
  57. }
  58.  
  59. }
  60.  
  61. // Obtiene el primer índice null para establecer un
  62.  // número de la serie
  63. public static int getIndexToFill(Integer[] array) {
  64. // if array is fill, the last index fill is the last index
  65. int indexToFill = array.length - 1;
  66.  
  67. for(int i=0; i<array.length; i++) {
  68. if(array[i] == null) {
  69. indexToFill = i;
  70. break;
  71. }
  72. }
  73.  
  74. return indexToFill;
  75. }
  76.  
  77. }
  78.  

PD: Los códigos deben ir entre etiquetas GeSHi (leer reglas del foro).


« Última modificación: 27 Julio 2015, 20:09 pm por Gus Garsaky » En línea

"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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines