public class jiecheng
{
   int   n=0;
   long mut=1; 
      
   long factorial(int i)
   { 
        for(n=1;n<=i;n++) 
     {
       mut=mut*n;
     }
     return mut;
   }
                                        
   public static void main(String[] args)
   {
      jiecheng a=new jiecheng(); 
     int b=0;
     for(b=1;b<6;++b)   
      {
       System.out.println(a.factorial(b)) ;
     }
    
   }
}
本来想求一个1~5的阶乘,没想到得出一个错误的结果,谁能帮我改一下?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【JAVA_mentu】截止到2008-07-27 12:04:49的历史汇总数据(不包括此帖):
    发帖的总数量:12                       发帖的总分数:230                      每贴平均分数:19                       
    回帖的总数量:39                       得分贴总数量:15                       回帖的得分率:38%                      
    结贴的总数量:12                       结贴的总分数:230                      
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:8.33  %               无满意结分率:8.70  %                  
    敬礼!
      

  2.   

    public class jiecheng
    {      
       long func(int n){ 
            if(n==1)
                return 1;
            return n*func(n-1);
              
       }
       /*
       long func(int n){
          long num=1;
          for(int i=1;i<=n;i++){
             num*=i;
          }
          return num;
       } 
       */                                
       public static void main(String[] args)
       {
             jiecheng a=new jiecheng(); 
         for(int i=1;i<6;i++)   
             {
              System.out.println(a.factorial(i)) ;    
         }
        
       }
    }
      

  3.   


     long factorial(int i) {
            int mut=1;
            for (int n = 1; n <= i; n++) {
                mut = mut * n;
            }
            return mut;
        }把factorial修改一下
    mut保存结果的时候,运算之后本次的运行结果保存在mut中。这导致的错误。
      

  4.   

    顶楼上的,递归很好你的主要是 long mut=1; 这个声明成类的属性了
      

  5.   

    public class Jiecheng{
       //long mut = 1; 
          
       long factorial(int i){ 
       int mut = 1;
       
       for(int n=1; n<=i; n++){
       mut *= n;
           }
           return mut;
       }
                                            
       public static void main(String[] args){
       Jiecheng a = new Jiecheng();     for(int b=1; b<6; b++){
              System.out.println(a.factorial(b)) ;    
       }
        
       }
    }结果是1
    2
    6
    24
    120楼上说的没错  你不应该吧mut设置成全局变量,如果这样做的话 就算完1的阶乘,mut=1,而计算完2的阶乘后,mut=2,这并不是我们想要的,我们想要的是mut一直保持它的初始值1,这就要把mut定义在你的阶乘方法你了。
      

  6.   

    补充说一句  定义for循环里的控制变量时 最好直接定义在for语句你  没必要定义成整个类的变量  看着挺变扭的  呵呵
      

  7.   

    你这个错误主要是每次运算之后mut的结果都变化了,没有还原为原来的1可以修改为ZangXT : long factorial(int i) {
            int mut=1;
            for (int n = 1; n <= i; n++) {
                mut = mut * n;
            }
            return mut;
        }也可以用递归啊: long factorial(int i) {
          if(i=0){
             return 1;
         }else{        return i*factorial(i-1);
        }
      

  8.   

    public class Test {    public static void main(String[] args) {
            System.out.println(factorial(5));
        }    public static int factorial(int num) {
            int result = 1;
            while(num > 1) {
                result *= num--;
            }
            return result;
        }
    }
      

  9.   

    用递归方式求阶乘可以采用这个方法,效率问题我不考虑。public long factorial(int n){
      if(n == 1){
         return 1;
      }else{
         return  n * factorial(n - 1);
      }
    }
      

  10.   

    每次运算前清空下上次计算的结果!!
    将 mut=1;放到factorial(int i) 一开始!
      

  11.   

    public class Jiecheng {
    int n=0 ; long mut; long factorial(int i) {
    mut = 1;
    for (n = 1; n <= i; n++) {
    mut = mut * n;
    }
    return mut;
    } public static void main(String[] args) {
    Jiecheng a = new Jiecheng();
    int b = 0;
    for ( b = 1; b < 6; b++) {
    System.out.println(a.factorial(b));
    } }}
    将mut改为局部变量就可以了。不改的话也可以,你每次运行fanctorial()方法都建一个新的对象,因为mut为全局变量时,
    会保存她的值,像3!就是前面一个mut的值乘以3!(前面一个mut的值就是2!),所以结果是12,而不是6了。