2017-09-23 2 views
-1
public static void main (String args[]){ 

    int num=5; 
    int i=num-1; 
    int factorial=0; 

    while(i>0){ 

     factorial=num*i; 
     i--; 
    } 
    System.out.println(""+factorial); 
} 

Il continue juste à me rendre 5. Désolé, si cela ressemble à une question kiddish, je suis nouveau dans le monde de la programmation.Qu'est-ce que je fais de mal avec ce programme factoriel? Il ne cesse de revenir à la valeur d'origine

+2

Cole Pfeiffer, ou T-Bag? –

+3

haha ​​.... Je suis dans une prison codant sur les murs –

+1

Bienvenue sur Stack Overflow! Il semble que vous ayez besoin d'apprendre à utiliser un débogueur. S'il vous plaît aidez-vous à quelques [techniques de débogage complémentaires] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Si vous avez encore des problèmes après, n'hésitez pas à revenir avec une question plus spécifique. –

Répondre

3

Remplacer

factorial=num*i;

avec

num=num*i;

Et

System.out.println(""+factorial);

avec

System.out.println(""+num);

Raison

Vous exécutez correctement votre boucle while. Dans chaque itération, vous multipliez deux nombres successifs. Mais vous stockez le résultat dans factorial qui est écrasé à chaque itération. Donc, à la fin, vous finissez par obtenir le numéro d'origine. Donc, comme indiqué ci-dessus, se débarrasser de factorial varialble.

+0

Pourquoi ne puis-je pas le faire de cette façon? Quel est le problème que je fais? –

+0

@ColePfeiffer, j'ai ajouté une raison dans ma réponse pour expliquer ce qui ne va pas avec votre approche. Voir si cela a du sens. – VHS

+0

@ColePfeiffer Cela fonctionne la première fois, mais après cela, vous ne multipliez plus par la valeur précédente de num –

2

Je ne vais pas vous donner la solution, mais il est normal qu'il est le stockage 5, parce que votre dernière exécution est:

factorial = 5 * 1; 

penser maintenant deux fois ce que vous avez à faire.

+0

vous auriez pu dire que comme un commentaire ... –

+2

Eh bien, je ne pouvais pas, j'ai besoin de 50 rep pour répondre à un commentaire :) –

+0

Désolé, je n'ai pas remarqué, mais je vais vous aider à y arriver;) –

1

Vous êtes quelque chose de mal, car il exécutera comme

num is 5 and i is 4 // result will be 20 
    then num is 5 and i is 3 // result will be 15 
    then num is 5 and i is 2 // result will be 10 
    then num is 5 and i is 1 // result will be 5 
    while loop break 

vous devez stocker votre résultat précédent afin d'utiliser cette

 int num=5; 
     int factorial=1; 

     while(num>0){ 

      factorial=num*factorial; // previous result will be store in factorial  
      num--; 
     } 
     System.out.println(""+factorial); 

Maintenant, comment ce programme fonctionne

 num is 5 and fact is 1 // fact will be 5 
     then num is 4 and fact is 5 // fact will be 20 
     then num is 3 and fact is 20 // fact will be 60 
     then num is 2 and fact is 60 // fact will be 120 
     then num is 1 and fact is 120 // fact will be 120 
     while loop break 
0

Dans chaque boucle, vous multipliez le nombre par i, donc à la fin vous j Vous devez obtenir num*1. Vous pouvez initialiser la variable de résultat factorial avec la valeur de num et dans chaque boucle, lui attribuer la valeur multipliée par i, qui se traduira par la multiplication de tous les nombres de 1 à num (factoriel):

public static void main (String args[]){ 

    int num=5; 
    int i=num-1; 
    int factorial=num; 

    while(i>0){ 

     factorial=factorial*i; 
     i--; 
    } 

    System.out.println(""+factorial); 
}