A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏日蓝雪 中级黑马   /  2014-6-9 10:57  /  1510 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏日蓝雪 于 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运行不正确呢?求指点。

11 个回复

倒序浏览
jiecheng1中,循环条件i>1是固定的,而jiecheng2中的循环条件i<n中n的值不固定,一直在循环,所以出错
回复 使用道具 举报
分析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.         }
复制代码


评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报 3 0
123_yaya 发表于 2014-6-9 11:23
分析jieCheng2方法。
1. n=3 跳到 else中,i=2,i

厉害                     
回复 使用道具 举报
123_yaya 发表于 2014-6-9 11:23
分析jieCheng2方法。
1. n=3 跳到 else中,i=2,i

原来如此,还是小伙伴的力量大!谢谢!
回复 使用道具 举报
496080891 发表于 2014-6-9 11:09
jiecheng1中,循环条件i>1是固定的,而jiecheng2中的循环条件i

也说出问了题的关键,赞一个!
回复 使用道具 举报
第二个的循环条件n一直变化的!!!
回复 使用道具 举报
技术不行还得继续磨练啊。
回复 使用道具 举报
楼上说的很明白了
回复 使用道具 举报
二楼分析的很好,厉害。这都是小错误,应该更细心一些。
回复 使用道具 举报
int 范围越界了

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

捕获.PNG
回复 使用道具 举报

辛苦了,虽然不是根本原因,但却指出了这种方法存在的弊端:越界问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马