Laço for (Resolvido)

3 respostas
Paulo_Mour

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

3 Respostas

pvrsouza

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

# 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--;  
                                    
         }

Enxugando seu código ficaria assim:

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);
        }
    }

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

Fatorial.java

public class Fatorial {

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

Ou seja, com 3 linhas resolveu. Rsrsrssr.

Abraços

Paulo_Mour

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

pvrsouza

Beleza cara!

Precisando é só falar.

Abraços!

Criado 7 de março de 2010
Ultima resposta 7 de mar. de 2010
Respostas 3
Participantes 2