Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Wolf en 28 de Abril 2015, 16:53
-
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á:
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.
-
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):
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!!
-
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.
-
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:
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
-
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 !
-
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.
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]+ " ");}}}
-
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
-
Buenas días, estoy empezando en desarrollo. Mi aporte es el siguiente.
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ú.