Java“求从1到10的阶乘的和”

2022-07-28,

一开始我写的代码是这样的:

public class HelloWorld {
   public static void main(String[] args){
    int i=1,t=1,sum=1,a=0;
    for(i=1;i<=10;i++) {
     for(t=1;t<=i;t++) {
      sum=sum*t;
     }
     a=a+sum;
    }
         System.out.println(a);
     }
}

感觉上自己没什么错误,但是运行的结果就是不正确的。后来问了室友,才找到错误所在。

以下为更正后代码:

public class HelloWorld {
   public static void main(String[] args){
    int i=1,t=1,sum=1,a=0;
    for(i=1;i<=10;i++) {
     for(t=1;t<=i;t++) {
      sum=sum*t;
     }
     a=a+sum;
     sum=1;
    }
         System.out.println(a);
     }
}

所以错误在于,每次 t 的循环之后,sum 没有初始化。导致每次 t 的循环过后,sum 是以越来越大的值代入 i 的循环中的

这个错误给了我很大的启发,以后在循环结构中,要注重“循环变量的初始化”。

哈,在跟正在学软件工程的高中同学说了这件事之后(我俩是高中同学,好朋友,现在都是大二),她说,写成这样也行:

public class HelloWorld {
   public static void main(String[] args){
    int i=1,sum=1,a=0;
    for(i=1;i<=10;i++) {
      sum*=i;
     }
     a+=sum;    
         System.out.println(a);
     }
}

但是运行出来的结果是错误的。

更正后代码如下:

public class HelloWorld {
   public static void main(String[] args){
    int i=1,sum=1,a=0;
    for(i=1;i<=10;i++) {
      sum*=i;
      a+=sum;
     }
     	System.out.println(a);
     }
}

所以问题在于,把"a+=sum"放在循环外,计算的就是10的阶乘。每次 sum*=i 之后,并不会把sum的值传给 a+=sum .

所以需要把"a+=sum"放进循环内,才可以使 i=1时求出 sum=sum* i=1 的值,此时 a=a+sum=1 .然后进行下次循环, sum = sum* i=2 ,此时 a=a+sum=3 .如此才可以使每次 i 的阶乘 sum 都可以被累加得 a .

本文地址:https://blog.csdn.net/m0_47423988/article/details/109274080

《Java“求从1到10的阶乘的和”.doc》

下载本文的Word格式文档,以方便收藏与打印。