请教个小问题

昵称很不好取 2009-08-10 05:01:35
int i = 30;
int j = 1;
while(i > 0)
{
j *= i;
i--;
}
此程序用来求30阶乘,为什么while循环里面不可以写成while(i-- > 0)呢?
...全文
91 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovecj6185 2009-08-10
  • 打赏
  • 举报
回复
楼主可以写
while(--i > 0)

因为 i--是先赋值后运算
而--i是先运算后赋值

但是,无论是用楼主的方法,还是用
while(--i > 0)
都会造成数据溢出
即便你把 j 定义成long型
bigbug9002 2009-08-10
  • 打赏
  • 举报
回复
(i-->0)中i--表达式的值,做--之前的i值.
当循环到i的值是1时,i--的值 是1,i的值是0.循环还要断续,结果把0乘到j里去了。

--i不一样,--i表达的值是做--这后i的值 。
昵称很不好取 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 islandrabbit 的回复:]
while(i > 0) 意味着当i=0时,就不循环了。而while(i-- > 0)意味着,当i=1时可以执行循环,但到循环里时 i 就等于零了。

[/Quote]
啊,对,糊涂了,这样最后i就是0了,谢谢大家!
alpha_423 2009-08-10
  • 打赏
  • 举报
回复
当你i遍历到1时,i-- > 0这个值为true,执行完i-- > 0这个比较后i=0,再执行j *= i,不等于0就出问题了。。。呵呵
islandrabbit 2009-08-10
  • 打赏
  • 举报
回复
while(i > 0) 意味着当i=0时,就不循环了。而while(i-- > 0)意味着,当i=1时可以执行循环,但到循环里时 i 就等于零了。
bigbug9002 2009-08-10
  • 打赏
  • 举报
回复
int i = 31;
int j = 1;
while(--i > 0)
{
j *= i;
}
bigbug9002 2009-08-10
  • 打赏
  • 举报
回复
哦,那得用--i
昵称很不好取 2009-08-10
  • 打赏
  • 举报
回复
啊,这个是,但是结果是0.这是为什么?
bigbug9002 2009-08-10
  • 打赏
  • 举报
回复
那不是就少乘了30这个数了吗?

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧