黑马程序员技术交流社区

标题: for循环代码找错 [打印本页]

作者: 夏日蓝雪    时间: 2014-6-9 10:57
标题: for循环代码找错
本帖最后由 夏日蓝雪 于 2014-6-10 16:14 编辑

代码如下:
/**
需求:for循环实现n的阶乘。
*/
public class Practice {
public static void main(String[] args)
{
        System.out.println(jieCheng1(3));
        System.out.println(jieCheng2(3));
        
}
static int jieCheng1(int n)
{
        if(n==0)
                return 1;
        else
                for(int i=n-1;i>1;i--)
                        n=n*i;
        return n;
}
static int jieCheng2(int n)
{
        if(n==0)
                return 1;
        else
                for(int i=2;i<n;i++)
                        n=n*i;
        return n;
}
}
问题:两个for循环表达的意思一样,为什么jieCheng1方法运行结果正确,而jieCheng2运行不正确呢?求指点。
作者: 496080891    时间: 2014-6-9 11:09
jiecheng1中,循环条件i>1是固定的,而jiecheng2中的循环条件i<n中n的值不固定,一直在循环,所以出错

作者: 123_yaya    时间: 2014-6-9 11:23
分析jieCheng2方法。
1. n=3 跳到 else中,i=2,i<n(即i<3),执行n=3*2,这时候n=6了
2 i++ 后 i=3, i<n (即n<6),执行 n=6*3=18  ,这时候n=18了。
3. 。。。
如此循环,你在复制给n的时候,再回到for循环判断时,你的n已经不是原来的值3了,n也在随之改变
如果要这样子做的话,你应该改为你求n的阶层,n的实际数字就写死在for中。
例如:不过不提倡这样的做法
  1.         static int jieCheng2(int n) {
  2.                 if (n == 0)
  3.                         return 1;
  4.                 else
  5.                         for (int i = 2; i <3; i++)
  6.                                 n = n * i;
  7.                 return n;
  8.         }
复制代码



作者: 杨胜男    时间: 2014-6-9 12:16
123_yaya 发表于 2014-6-9 11:23
分析jieCheng2方法。
1. n=3 跳到 else中,i=2,i

厉害                     
作者: 夏日蓝雪    时间: 2014-6-9 12:55
123_yaya 发表于 2014-6-9 11:23
分析jieCheng2方法。
1. n=3 跳到 else中,i=2,i

原来如此,还是小伙伴的力量大!谢谢!
作者: 夏日蓝雪    时间: 2014-6-9 12:58
496080891 发表于 2014-6-9 11:09
jiecheng1中,循环条件i>1是固定的,而jiecheng2中的循环条件i

也说出问了题的关键,赞一个!
作者: wyqs92    时间: 2014-6-9 15:11
第二个的循环条件n一直变化的!!!
作者: zhohao    时间: 2014-6-9 15:24
技术不行还得继续磨练啊。
作者: 七弦    时间: 2014-6-9 15:45
楼上说的很明白了
作者: 酸奶小哥    时间: 2014-6-9 16:13
二楼分析的很好,厉害。这都是小错误,应该更细心一些。
作者: axuan    时间: 2014-6-9 16:27
int 范围越界了

捕获.PNG (158.06 KB, 下载次数: 158)

捕获.PNG

作者: 夏日蓝雪    时间: 2014-6-9 18:05
axuan 发表于 2014-6-9 16:27
int 范围越界了

辛苦了,虽然不是根本原因,但却指出了这种方法存在的弊端:越界问题。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2