黑马程序员技术交流社区

标题: for循环问题 [打印本页]

作者: 王希军    时间: 2013-8-2 17:34
标题: for循环问题
本帖最后由 杜光 于 2013-8-4 10:09 编辑

class  Demo
{
        public static void main(String[] args)
        {
                int x;
                for( x=0;x<5;)
                {
                        x=x++;
                }
                System.out.println(x);
        }
}
为什么运行不出结果呢   
作者: 倪大叶    时间: 2013-8-2 17:47
你的输出语句在 for循环外面。for循环的控制变量只在for区间内有效。 你要把输出语句放到for循环里
不知道对不。不对请大神指出
作者: 杨兴庭    时间: 2013-8-2 18:08
把你的变量放在,for括号内初始化。。。。。。{:soso_e100:}
作者: jialihong    时间: 2013-8-2 18:26
for循环语句的格式:
for(初始化表达式; boolean表达式; 自增表达式)
我觉得应该要满足规定的格式吧
作者: 影响力147753321    时间: 2013-8-2 18:28
本帖最后由 影响力147753321 于 2013-8-2 18:31 编辑

可以运算出结果呀!
作者: breaveheart    时间: 2013-8-2 18:33
一楼的回答是错误的,我验证过了,
把你的x++放到for循环括号里就行
for( x=0;x<5;x++){}
或者是改成
for(x=0;x<5;)
{
x++;
}
结果值为x=5。
当你函数体里是x=x++;的时候;
x会先赋值给x再自加。
作者: 逆袭的风    时间: 2013-8-2 18:39
x=x++,这个式子本身并无任何作用,因为x一直都是把初值赋给x自身,也就是说x一直都是等于0
所以在本题中,
for( x=0;x<5;)
                {
                        x=x++;
                }
是一个死循环,也就是一直循环运行,跳不出循环外,而你的输出语句在循环外,所以没见输出
作者: 王靖远    时间: 2013-8-2 18:43
for循环中的都是局部变量。你想变量放在外面还能用就用while循环。
作者: 田磊阳    时间: 2013-8-2 18:48
为什么运行不出结果呢?你静静的等等,一会儿你的电脑就发热了·······

因为它在执行一个死循环,所以楼主要赶快结束程序,要不电脑真的会冒烟

作者: xscn    时间: 2013-8-2 18:48
你这个代码的格式其实没有问题,for循环的初始化表达式和循环后表达式可以省略不写,毕姥爷视频day3-05有讲
但是你{}内x=x++;没有任何意义,改成x++;就可以了
  1. class  Demo1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.         int x;
  6.         for( x=0;x<5;)
  7.         {
  8.                   x=x++;//无限循环判断,无限把0赋值给0,下面加个输出语句你可以试一下
  9.                   System.out.println(x);
  10.         }
  11.        
  12.         }
  13. }

复制代码

作者: 田磊阳    时间: 2013-8-2 18:55
jialihong 发表于 2013-8-2 18:26
for循环语句的格式:
for(初始化表达式; boolean表达式; 自增表达式)
我觉得应该要满足规定的格式吧 ...

for循环中的"参数初始化表达式"、"条件表达式"和"更新循环变量表达式"都是选择项, 即可以缺省, 但";"不能缺省。省略了初始化, 表示不对循环控制变量赋初值。 省略了条件表达式, 则不做其它处理时便成为死循环。省略了增量, 则不对循环控制变量进行操作, 这时可在语句体中加入修改循环控制变量的语句。 for循环的三个表达式都是逗号表达式,也就是说每个表达式可以由几个表达式构成,中间用",”隔开。
作者: 黑马王晓明    时间: 2013-8-2 19:05
  1. class  Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x;
  6.                 for( x=0;x<5;)
  7.                 {
  8.                         x=x++;
  9.                         //添加打印语句测试结果
  10.                         System.out.println("此处在不停的循环……………………"+x);
  11.                 }
  12.                 System.out.println("………………此句根本就执行不到"+x);
  13.         }
  14. }
复制代码
用eclips测试过了 如果这样格式写的话是死循环 而且x的值不变一直为0

QQ图片20130802185801.jpg (67.71 KB, 下载次数: 16)

QQ图片20130802185801.jpg

QQ图片20130802185942.jpg (2.98 KB, 下载次数: 76)

QQ图片20130802185942.jpg

作者: 单凯    时间: 2013-8-2 19:32
把x=0的初始化动作,放在一开始定义的地方,就可以了
作者: 单凯    时间: 2013-8-2 19:33
把x=0的初始化动作,放在一开始定义的地方,就可以了
作者: xuaner0719    时间: 2013-8-2 20:54
本帖最后由 xuaner0719 于 2013-8-2 20:55 编辑
  1. class Demo {
  2.         public static void main(String[] args) {
  3.                 int x;
  4.                 for (x = 0; x < 5;) {
  5.                         x = x++;//x先参与运算再x++,所以等于号前面的x还是0,后面的x是1,故for循环中的一直就小于5,造成死循环。
  6.                                 //当然讲x=x++,改写成x=++x,就不会构成是循环,x先加再参与运算。
  7.                 }
  8.                 System.out.println(x);
  9.         }
  10. }
复制代码

作者: 黄兴旺    时间: 2013-8-3 13:28
黑马王晓明 发表于 2013-8-2 19:05
用eclips测试过了 如果这样格式写的话是死循环 而且x的值不变一直为0

为什么X的值一直是0?
作者: masterV    时间: 2013-8-3 13:37
局部变量在定义时可以不用赋初值,但如果调用它就必须明确指定它的初始值,改成 int x = 0;即可。
作者: 黑马王晓明    时间: 2013-8-3 21:33
黄兴旺 发表于 2013-8-3 13:28
为什么X的值一直是0?

像你那样写的话由于x++会先赋值  所以x永远等于0 所以就在不断的循环
++x就会先自己加1再赋值 最后会打印结果5

作者: 李复安    时间: 2013-8-3 22:55
相信看了这张图片的解释楼主可能会明白滴、

Unnamed QQ Screenshot20130803225204.jpg (89.88 KB, 下载次数: 66)

Unnamed QQ Screenshot20130803225204.jpg

作者: 吴光新    时间: 2013-8-3 23:16
云5的来这里瞅瞅,
x=x++,关键在于这个++,你放在x后面,意思是先用在++,就是先比较后自增,但一比较完后就跳回重新循环了,那么x还是等于0,所以一直在做一个死循环,x=0,x<5,满足,然后x=x,
如果你是先加在比较,就出结果了:x=++x
作者: 米中之玉    时间: 2013-8-3 23:27
貌似有一个的帖子和你的问题一样。
他那个是:x = 0;x = x++;然后输出x。他问为什么 x 还是 0.
还是赋值语句的问题。x ++ = 0; 所以 x 还是 0 。





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