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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Akm 黑马帝   /  2013-3-24 11:44  /  4249 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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 14:00

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

18 个回复

正序浏览
Akm 发表于 2013-3-24 17:38
是这个原因吗? cpu运行这么快,每次都从304164左右开始,我怀疑没有这么简单,可能还有其他原因 。 ...

循环一次就break  你看看是不是0
回复 使用道具 举报
Akm 黑马帝 2013-3-24 17:38:53
18#
朱盛文 发表于 2013-3-24 16:02
好吧,被你打败了。那是因为控制台能显示的数据有限,当输出的数据过多,超过它显示的范围时,它会把前面 ...

是这个原因吗? cpu运行这么快,每次都从304164左右开始,我怀疑没有这么简单,可能还有其他原因 。
回复 使用道具 举报
Akm 发表于 2013-3-24 15:30
i 应该从?? 开始循环判断, 那么控制台第一次应该输出???

:L:L:L:L:L:L:L:L
回复 使用道具 举报
Akm 发表于 2013-3-24 15:12
楼上说的都对,可问题是?   都答非所问~

从0开始,内存溢出时结束
回复 使用道具 举报
Akm 发表于 2013-3-24 15:34
是啊,不用断点,为什么控制台显示的不是从0开始呢

好吧,被你打败了。那是因为控制台能显示的数据有限,当输出的数据过多,超过它显示的范围时,它会把前面的数据截掉,只留下后面的数据。而且程序一运行,速度相当的快,你还没来得及看就已经运行了好多遍了,所以你在控制台上是看不到第一个输出的数据的,除非你的电脑是以前那种老式本,CPU和内存都超低,运行速度超慢,加上你的动作够敏捷,一运行就强制停止,那你就能看到0了。你可以试试
回复 使用道具 举报
       首先我们来看看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, 下载次数: 278)

1-1

1-1

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
Akm 黑马帝 2013-3-24 15:34:22
13#
朱盛文 发表于 2013-3-24 15:29
程序我运行了呀,我用eclipse断点调试,看到了第一个是输出0

是啊,不用断点,为什么控制台显示的不是从0开始呢
回复 使用道具 举报
Akm 黑马帝 2013-3-24 15:30:20
12#
胡志超 发表于 2013-3-24 15:11
都是死循环了,除非内存溢出,不然怎么结束啊

i 应该从?? 开始循环判断, 那么控制台第一次应该输出???:loveliness:
回复 使用道具 举报
Akm 发表于 2013-3-24 15:21
不知道大神 有木有运行 此段代码?Java虚拟机是不是 输出了0?  不过最后一个问题, 什么时候结束你应该 ...

程序我运行了呀,我用eclipse断点调试,看到了第一个是输出0
回复 使用道具 举报
Akm 黑马帝 2013-3-24 15:21:27
10#
朱盛文 发表于 2013-3-24 12:05

不知道大神 有木有运行 此段代码?Java虚拟机是不是 输出了0?  不过最后一个问题, 什么时候结束你应该说对了,既然是死循环,必然是一直循环,直到i++ 超出范围,报错。
回复 使用道具 举报
Akm 黑马帝 2013-3-24 15:12:52
9#
刘凯 发表于 2013-3-24 12:14
死循环,楼上都对 不做赘述

楼上说的都对,可问题是?   都答非所问~{:3_60:}
回复 使用道具 举报
Akm 发表于 2013-3-24 15:09
对 你说的很对 就是一个死循环。 好好看看我的问题问的是什么。

都是死循环了,除非内存溢出,不然怎么结束啊
回复 使用道具 举报
Akm 黑马帝 2013-3-24 15:09:08
7#
胡志超 发表于 2013-3-24 11:48
这不是一个死循环么???

对 你说的很对 就是一个死循环。 好好看看我的问题问的是什么。
回复 使用道具 举报
死循环,楼上都对 不做赘述
回复 使用道具 举报
  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.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 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 故死循环,不断执行

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
这不是一个死循环么???
回复 使用道具 举报
for(int i =0;i<i+1;i++){                        

                        System.out.println(i);

                }   
循环中每循环一次,i都加1,i<i+1,这句是用真的,所以会一直循环下去,不会结束

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马