Autor Tema: Crear serie numérica Java 1,5,3,7,5,9,7,11,9,13 suma 4 en pares resta 2 en impar  (Leído 38503 veces)

Wolf

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Hola compañer@s ! Miren, tengo una duda sobre como programar una serie numérica.

La serie es esta 1,5,3,7,5,9,7,11,9,13. Se va sumando 4 en las posiciones pares y restando 2 a los impares. La solución es está: 

Código: [Seleccionar]
import java.util.*;

public class Ejercicio_Operadores2 {

public static void main(String[] args) {

// TODO Auto-generated method stub

int serie = 1;
boolean sumar=true;
int cont;
String cadena="Serie: ";

System.out.println("Indique cuantos numeros de la serie quiere ver: " );

Scanner sc = new Scanner (System.in);
cont=sc.nextInt();

do{

cadena=cadena.concat(String.valueOf(serie) + "  ");
cont --;
if(sumar==true){
serie+=4;
}else{
serie-=2;
}

sumar=!sumar;
}while(cont>0);

System.out.println(cadena);

}//Fin Main
}//Fin Clase

Me ha costado un poco entenderlo, pero creo que he captado la idea. Mi pregunta es, si hay alguna forma de hacerlo con Arrays. Que es como yo había pensado en un principio hacerlo. Muchas gracias por tu atención. Un saludo.
« Última modificación: 29 de Abril 2015, 08:58 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola Wolf, antes de responder recordar que para pegar código debe hacerse como se explica aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

El programa se puede resolver con arrays, en realidad está mejor resuelto con arrays que con el código que tú has puesto ¿Por qué? Porque si almacenas los resultados en un array tienes la serie en formato numérico y puedes acceder de forma fácil (con el índice del array) a cada elemento de la serie. En cambio si tienes el resultado en un String no resulta  tan fácil de manejar (aunque si lo quieres sólo para mostrarlo por pantalla vale también).

El código con arrays sería este (hay unas líneas comentadas que corresponden a hacerlo con String, si las descomentas puedes ver los resultados de ambas maneras):

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

public class Ejercicio_Operadores2_var {

    public static void main(String[] args) {
        int serie = 1;
        boolean sumar=true;
        int cont;
        //String cadena="Serie: ";

        System.out.println("Indique cuantos numeros de la serie quiere ver: " );
        Scanner sc = new Scanner (System.in);
        cont=sc.nextInt();

        int i=1;
        int elementos [];
        elementos = new int[cont];
        elementos[0]=1;
        //cadena=cadena.concat(String.valueOf(serie) + "  ");
        do{           

            if(sumar==true){
                serie+=4;
                elementos[i]=serie;
            }else{

                serie-=2;
                elementos[i]=serie;
            }
           
            //cadena=cadena.concat(String.valueOf(serie) + "  ");
            sumar=!sumar;
            i++;
        }while(i<cont);

        //System.out.println("Serie a partir de String: "+cadena);
        System.out.print("Serie a partir de array: ");
        for (int j=0; j<elementos.length;j++) {
            System.out.print(elementos[j]+ "  ");
        }

    }//Fin Main
}//Fin Clase

El resultado de este código debería ser el mismo que el del tuyo, si hubiera diferencias sería que hay algún error.

Saludos!!


Responsable de departamento de producción aprenderaprogramar.com

Wolf

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Ahora lo tengo más claro. Lo tenía casi casi igual, me faltaba esto (elementos [ i ] = serie) y el último "for". Lo que más me liaba era el cómo detectar que estaba en la posición par o impar del Array. ¿Hay otra forma de forma hacerlo o es esta la más fácil? Muchísimas gracias por contestar, son de gran ayuda. Un saludo.

PD: Y perdón por lo del código. No me acordaba.
« Última modificación: 29 de Abril 2015, 11:58 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
En programación siempre hay muchas formas de hacer las cosas. Te recomiendo este curso para tener una visión amplia de java y sus posibilidades: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

El código anterior puede formularse de otras maneras para detectar la alternancia, por ejemplo usando el operador módulo:

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

public class Ejercicio_Operadores2_var {

    public static void main(String[] args) {
        int serie = 1;
        int cont;
        System.out.println("Indique cuantos numeros de la serie quiere ver: " );
        Scanner sc = new Scanner (System.in);
        cont=sc.nextInt();
        int i=1;
        int elementos [];
        elementos = new int[cont];
        elementos[0]=1;
        do{           
            if(i%2!=0){
                serie+=4;
                elementos[i]=serie;
            }else{

                serie-=2;
                elementos[i]=serie;
            }
            i++;
        }while(i<cont);
        System.out.print("Serie a partir de array: ");
        for (int j=0; j<elementos.length;j++) {
            System.out.print(elementos[j]+ "  ");
        }
    }//Fin Main
}//Fin Clase

Saludos
Responsable de departamento de producción aprenderaprogramar.com

Wolf

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Eso es lo que había pensado para la alternancia, poner (i%2 !=0) para saber si esta en la posición impar. Muchas gracias por resolverme las dudas. ¡ Un abrazo !

jupertivo

  • Sin experiencia
  • *
  • Mensajes: 29
  • Aprendiendo y más allá
    • Ver Perfil
Hola César y Wolf. Disculpad mi intromisión en este post. Desde que lo vi no he parado de darle vueltas a un código alternativo (que siempre los habrá, por supuesto), ya que siempre vi dos series altenándose. La primera, números impares que empiezan en 1; y la segunda, números impares que empiezan en 5. Después se unen las dos en una sola serie altenando un valor de cada una de ellas. Bueno, ahí os dejo el código como prueba. Muy interesante el problema. Saludos.

Código: [Seleccionar]
import java.util.Scanner;
public class TestSerie{
    public static void main(String[]args){
        int numero;
        int i=0;
        System.out.print("Indique cuántos números de la serie quiere ver: ");
        Scanner entrada=new Scanner(System.in);
        numero=entrada.nextInt();
        int elementos[]=new int[numero];
        do{
           elementos[i]=i+1; //añado números de la serie 1
           i++;
           if(i<numero){
               elementos[i]=i+4; //añado números de la serie 2
               i++;}}
        while(i<numero);
        System.out.println("La serie resultante es:");   
        for (int j=0;j<elementos.length;j++){
               System.out.print(elementos[j]+ "  ");}}}
Descubrir y enmendar los pequeños errores ayuda a no cometer los grandes

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola jupertivo, tu código funciona a la perfección y es interesante ver cómo se pueden hacer otros planteamientos. Tal y como planteas podemos dividir una serie como 1,5,3,7,5,9,7,11,9,13 en dos series.

Por ejemplo

1 - 3 - 5 - 7 - 9

5 - 7 - 9 - 11 -13


Después podemos mezclar ambas series y nos devuelve la serie deseada...

Hay muchas variantes para resolver este problema. Buen aporte!

Saludos
Responsable de departamento de producción aprenderaprogramar.com

inglimay

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Buenas días, estoy empezando en desarrollo. Mi aporte es el siguiente.

Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Scanner;

public class Series {
public static void main(String[] Args) {

int n1=0, n2=0, conta;
ArrayList<String> lista = new ArrayList<String>();
Scanner entrada = new Scanner(System.in);

System.out.println("Ingresar el primer valor:");
n1 = entrada.nextInt();

for (conta=1; conta<=n1; conta++){
if (conta%2!=0){
n2=conta;
lista.add(n2+"");
}
else{
n2=conta+3;
lista.add(n2+"");
}
}
System.out.println(lista);
}
}

--Resultado en consola

Ingresar el primer valor:
10
[1, 5, 3, 7, 5, 9, 7, 11, 9, 13]

Slds desde Perú.
« Última modificación: 28 de Febrero 2017, 19:25 por Ogramar »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".