Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: JDiaz98 en 11 de Agosto 2018, 02:40

Título: Java factorial variable utilizada en el ciclo for no devuelve su nuevo valor.
Publicado por: JDiaz98 en 11 de Agosto 2018, 02:40
Buenas noches chicos, estoy tratando de hacer un algoritmo que ingresado un numero por teclado me calcule una sucesión. Estuve haciendo unas pruebas de escritorio y me sale el resultado correcto, pero en el código no. Verán, me devuelve el valor de la variable como la inicialicé antes de usarla en el ciclo for. Gracias.
 
Código: [Seleccionar]
        Scanner entrada = new Scanner(System.in);
        System.out.println("Ingrese un numero entero para calcular su factorial!");
        int num = entrada.nextInt();
        int factorial = 0;
        for(int i =num; i !=0; i--){
            factorial =+ (num*1);     
        }
        System.out.println("Fatorial del numero "+num+" es: "+factorial); 
    }  // al final me sale 0, es decir esta devolviendo el valor inicial y no el nuevo que
        //obtengo en el ciclo for
Título: Re:Variable utilizada en el ciclo for no devuelve su nuevo valor.
Publicado por: JDiaz98 en 11 de Agosto 2018, 03:01
Ya corregi :D

 public static void main(String[] args) {
       
        Scanner entrada = new Scanner(System.in);
        System.out.println("Ingrese un numero entero para calcular su factorial!");
        int num = entrada.nextInt();
        int factorial = 0;
       
        for(int i=num; i!=0; i--){
           factorial = factorial + (i*1);
        }
        System.out.println("Fatorial del numero "+num+" es: "+factorial);
    }
Título: Re:Variable utilizada en el ciclo for no devuelve su nuevo valor.
Publicado por: Kabuto en 12 de Agosto 2018, 00:45
Exacto.
En el bucle for, la variable num no cambia nunca de valor, es la variable i la que se va modificando en cada iteración y por tanto la que usaremos para el cálculo del factorial.
Dos correciones.
la primera, sin importancia, en esta línea, no es necesario multiplicar la i * 1:
Citar
factorial = factorial + (i*1);

Si lo piensas, multiplicar por 1 nunca sirve para nada.
5 multiplicado por 1, sigue siendo 5.
15 multiplicado por 1, sigue siendo 15.
543 multiplicado por 1, sigue siendo 543.
7236476274627 multiplicado por 1, sigue siendo 7236476274627

En conclusión,
i multiplicado por 1, sigue siendo i

Así que con esto es suficiente:
Citar
factorial = factorial + i;

LA segunda, importante:
Ahora mismo no estás consiguiendo obtener el factorial

Mira, por ejemplo, el factorial de 5, sería:
5 * 4 * 3 * 2 * 1 = 120

Sin embargo, con tu código obtenemos como resultado 15
Porque estás haciendo:
5 + 4 + 3 + 2 + 1 = 15

Revísalo, casi lo tienes, pero no estás haciendo la operacion matemática correcta.
Y enseguida te darás cuenta de que no te va a bastar cambiar la suma por una mutiplicación.
Hay que hacer más modificaciones en el código. La solución tiene la estructura que propones, pero aún faltan un par de detalles.
Título: Re:Variable utilizada en el ciclo for no devuelve su nuevo valor.
Publicado por: JDiaz98 en 12 de Agosto 2018, 15:01
Gracias por tus sugerencias, pude solucionarlo  :D
public static void main(String[] args) {
       
        Scanner entrada = new Scanner(System.in);
        System.out.println("Ingrese un numero entero para calcular su factorial!");
        int num = entrada.nextInt();
        int factorial = 1;
        for(int i = 1; i <num; i++){
           factorial = factorial * (i+1);
        }
        System.out.println("El numero factorial del numero: "+num+" es: "+factorial);
    }
Título: Re:Variable utilizada en el ciclo for no devuelve su nuevo valor.
Publicado por: Kabuto en 12 de Agosto 2018, 17:20
Cool!  ;)