黑马程序员技术交流社区

标题: 自减符,谁给我解释一下这个循环为什么停不了? [打印本页]

作者: Diors    时间: 2015-6-29 20:43
标题: 自减符,谁给我解释一下这个循环为什么停不了?
  1. while (steps != 0 ) {
  2.   ...
  3.   steps--;  // steps原本等于5的
  4. }
复制代码

作者: Diors    时间: 2015-6-29 20:48
Exception in thread "main" java.lang.StackOverflowError
        at com.itheima.SpiralNumber.turn(Test9.java:54)
        at com.itheima.SpiralNumber.setArray(Test9.java:115)
更多的就不贴了, 循环体中有调用另一个方法,而那个方法也调用包含循环体这个方法。所以形成了递归,造成了上面贴的这个错误,但是我认为错的地方是,为什么这个循环体在steps==0时候还继续,测试过把条件变成steps > 0,能够正常运行
作者: 燃烧的灵魂    时间: 2015-6-29 21:34
循环体在steps==0时候还继续,编译没错,测试过把条件变成steps > 0,能够正常运行,首先看看steps表示的是什么,如果是数组下标的话就可以从0开始,如果是相关计数的话,然后在运行循环体就没有意义,新人见解……共同进步!
作者: 如初见    时间: 2015-6-29 21:41
首先你这个while循环的判断条件是steps !=0;  也就是说 括号内只要 不等于0就为true 。然后你说steps 原来等于5.也就是说 每次循环都在--  ,除了等于5的时候为flase 不循环,其他都在一直循环。然后 steps 直接就到负数了,以后在也不可能到5.然后循环就一直执行下去了,然后内存溢出。
作者: 如初见    时间: 2015-6-29 21:43
如初见 发表于 2015-6-29 21:41
首先你这个while循环的判断条件是steps !=0;  也就是说 括号内只要 不等于0就为true 。然后你说steps 原 ...

说错了, 是等于0的时候才不循环。  
作者: zlpiano    时间: 2015-6-29 21:46
你再检查一下吧,是不是有些细节没注意到,我按你说的编写运行了一下,没有问题呀
作者: qxc1281    时间: 2015-6-30 08:13
我也感觉没有问题啊,写的时候正常通过了啊
作者: 导航    时间: 2015-6-30 08:39
steps=o是不是不太对啊




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