Laço for (Resolvido)

Bom dia Srs.,
Preciso de um help. Estou tentando fazer o exercício abaixo e quero criar uma tabela em que o usuário digita um número e ao lado o aplicativo dê o fatorial do número digitado e dos números anteriores a ele e só estou conseguindo calcular o primeiro número. Algum poderia me dizer aonde estou errando ? segue o código:

/* 5.13 - Fatoriais costuman ser utilizados em problemas de probabilidade. O fatorial de um inteiro positivo
 * n(escrito n! e pronunciado 'n fatorial' é igual ao produto dos inteiros positivos de 1 a n. Escreva um aplica
 * tivo que avalia o fatorial dos inteiros de 1 a 5. Exiba os resultados no formato de tabela. Que dificuldade
 * poderia impedir você de calcular o fatorial de 20 ?
 */

import java.util.Scanner;

public class Fatorial {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        Scanner entrada = new Scanner(System.in);

        int i,j;
        int numero;
        int fat = 1;

        System.out.printf("Digite um numero: ");
        numero = entrada.nextInt();


        
        System.out.printf("NUMERO\tFATORIAL\n");


        for(i = 1; i <= numero ; i++ )
        {

            i--;
            for(j = 1; j <= numero ; j++)
            {

                fat = fat * j;
                //j--;
            }

                        
            System.out.printf("%d\t%d\n", numero,fat);
            numero--;
                                 
        }
  
    
    }

}

Obrigado

Olhando teu código eu vi que tem algumas coisas qu enão são necessárias. Por exemplo:

[code]# for(i = 1; i <= numero ; i++ )
{

         i--;  //Isso aqui não tem sentido. A cada incremento do indice i dentro do laço vc decrementa? Isso gera um for infinito.
         
         //Não entendi esse outro for.
         for(j = 1; j <= numero ; j++)  
         {  

             fat = fat * j;  
             //j--;  
         }  

                       
         System.out.printf("%d\t%d\n", numero,fat);  
         numero--;  
                                
     }  

[/code]

Enxugando seu código ficaria assim:

[code]public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);

    int i;
    int numero;
    int fat = 1;

    System.out.printf("Digite um numero: ");
    numero = entrada.nextInt();
    System.out.printf("NUMERO\tFATORIAL\n");
    for (i = 1; i <= numero; i++) {
        fat = fat * i;
        System.out.printf("%d\t%d\n", i, fat);
    }
}[/code]

Agora existe uma técnica chamada recursividade que vc consegue enxugar bastante esse código. Ficaria assim:

Fatorial.java

[code]public class Fatorial {

public int fatorial(int numero){
    if(numero == 0){
        return 1;
    }
    return numero * fatorial(numero - 1);
}

}[/code]

Ou seja, com 3 linhas resolveu. Rsrsrssr.

Abraços

Meu amigo, entendi. O outro For fiz numa outra tentativa de resolver. O que pude perceber no meu código em relação ao seu foi que coloquei as variáveis na saída como “número e fat” quando na realidade deveriam ser “i e fat” e não deveria colocar o decremento.
Agradeço muitissimo a atenção.
Abs,
Paulo

Beleza cara!

Precisando é só falar.

Abraços!