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 =)
Es sencillo, solo hay que pensar un poco.
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).