黑马程序员技术交流社区

标题: 关于for语句 死循环的test 问题 [打印本页]

作者: Akm    时间: 2013-3-24 11:44
标题: 关于for语句 死循环的test 问题
本帖最后由 Akm 于 2013-3-25 00:23 编辑
  1. public class test {
  2.         public static void main(String[] args)  {
  3.                for(int i =0;i<i+1;i++){                        
  4.                         System.out.println(i);
  5.                 }        
  6.         }
复制代码
问题:i 应该从多少开始循环,输出的i 值从几开始。什么时候结束。分别解释下为什么。
作者: 魏福伟    时间: 2013-3-24 11:47
for(int i =0;i<i+1;i++){                        

                        System.out.println(i);

                }   
循环中每循环一次,i都加1,i<i+1,这句是用真的,所以会一直循环下去,不会结束
作者: 胡志超    时间: 2013-3-24 11:48
这不是一个死循环么???
作者: strawberry2013    时间: 2013-3-24 11:59
本帖最后由 strawberry2013 于 2013-3-24 12:02 编辑

这属于for循环问题, 形如for(A; B; D) {C}
A语句进行初始化,如果B语句为true,分别执行C语句,及D语句 如果B语句为false,则跳出循环
对于该for(int i =0;i<i+1;i++)循环由于 i<i+1始终为true 故死循环,不断执行
作者: 朱盛文    时间: 2013-3-24 12:05
  1. public class test {
  2.         public static void main(String[] args)  {
  3.                for(int i =0;i<i+1;i++){                        //初始条件i=0,满足条件i<i+1,所以输出0,然后i++。此时i=1,还是满足条件i<i+1,输出1,继续i++……
  4.                         System.out.println(i);                   //如此循环下去,这就是一个死循环。没办法结束。只有内存溢出时才会异常停止。
  5.                 }        
  6.         }
复制代码

作者: 刘凯    时间: 2013-3-24 12:14
死循环,楼上都对 不做赘述
作者: Akm    时间: 2013-3-24 15:09
胡志超 发表于 2013-3-24 11:48
这不是一个死循环么???

对 你说的很对 就是一个死循环。 好好看看我的问题问的是什么。
作者: 胡志超    时间: 2013-3-24 15:11
Akm 发表于 2013-3-24 15:09
对 你说的很对 就是一个死循环。 好好看看我的问题问的是什么。

都是死循环了,除非内存溢出,不然怎么结束啊
作者: Akm    时间: 2013-3-24 15:12
刘凯 发表于 2013-3-24 12:14
死循环,楼上都对 不做赘述

楼上说的都对,可问题是?   都答非所问~{:3_60:}
作者: Akm    时间: 2013-3-24 15:21
朱盛文 发表于 2013-3-24 12:05

不知道大神 有木有运行 此段代码?Java虚拟机是不是 输出了0?  不过最后一个问题, 什么时候结束你应该说对了,既然是死循环,必然是一直循环,直到i++ 超出范围,报错。
作者: 朱盛文    时间: 2013-3-24 15:29
Akm 发表于 2013-3-24 15:21
不知道大神 有木有运行 此段代码?Java虚拟机是不是 输出了0?  不过最后一个问题, 什么时候结束你应该 ...

程序我运行了呀,我用eclipse断点调试,看到了第一个是输出0
作者: Akm    时间: 2013-3-24 15:30
胡志超 发表于 2013-3-24 15:11
都是死循环了,除非内存溢出,不然怎么结束啊

i 应该从?? 开始循环判断, 那么控制台第一次应该输出???:loveliness:
作者: Akm    时间: 2013-3-24 15:34
朱盛文 发表于 2013-3-24 15:29
程序我运行了呀,我用eclipse断点调试,看到了第一个是输出0

是啊,不用断点,为什么控制台显示的不是从0开始呢
作者: 曾祥旭    时间: 2013-3-24 15:59
       首先我们来看看for循环执行的顺序是:
                             
       在图1-1中,(1)表示初始化i,到判断条件表示式(2)i<i+1;也就相对于0<1条件为true,执行(3)打印出i,此时第一次循环结束。之后循环i++也就是到(4),将i在原有的基础上加1后到判断i的条件表达式(5),所得结果为true,执行(6),然后再到(7)。如此反复循环。
    我们知道i<i+1这个条件始终是成立的,所以就会一直执行下去,也可以说是死循环。
   还有一点楼主需要注意:类名首字母需要大写。如果是由多个单词组成每一个单词的首字母都要大写。

1.png (21.34 KB, 下载次数: 272)

1-1

1-1

作者: 朱盛文    时间: 2013-3-24 16:02
Akm 发表于 2013-3-24 15:34
是啊,不用断点,为什么控制台显示的不是从0开始呢

好吧,被你打败了。那是因为控制台能显示的数据有限,当输出的数据过多,超过它显示的范围时,它会把前面的数据截掉,只留下后面的数据。而且程序一运行,速度相当的快,你还没来得及看就已经运行了好多遍了,所以你在控制台上是看不到第一个输出的数据的,除非你的电脑是以前那种老式本,CPU和内存都超低,运行速度超慢,加上你的动作够敏捷,一运行就强制停止,那你就能看到0了。你可以试试
作者: 刘凯    时间: 2013-3-24 16:14
Akm 发表于 2013-3-24 15:12
楼上说的都对,可问题是?   都答非所问~

从0开始,内存溢出时结束
作者: 胡志超    时间: 2013-3-24 17:08
Akm 发表于 2013-3-24 15:30
i 应该从?? 开始循环判断, 那么控制台第一次应该输出???

:L:L:L:L:L:L:L:L
作者: Akm    时间: 2013-3-24 17:38
朱盛文 发表于 2013-3-24 16:02
好吧,被你打败了。那是因为控制台能显示的数据有限,当输出的数据过多,超过它显示的范围时,它会把前面 ...

是这个原因吗? cpu运行这么快,每次都从304164左右开始,我怀疑没有这么简单,可能还有其他原因 。
作者: 刘凯    时间: 2013-3-24 20:02
Akm 发表于 2013-3-24 17:38
是这个原因吗? cpu运行这么快,每次都从304164左右开始,我怀疑没有这么简单,可能还有其他原因 。 ...

循环一次就break  你看看是不是0




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