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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王希军 中级黑马   /  2013-8-2 17:34  /  2330 人查看  /  22 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 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);
        }
}
为什么运行不出结果呢   

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

22 个回复

倒序浏览
你的输出语句在 for循环外面。for循环的控制变量只在for区间内有效。 你要把输出语句放到for循环里
不知道对不。不对请大神指出
回复 使用道具 举报
把你的变量放在,for括号内初始化。。。。。。{:soso_e100:}
回复 使用道具 举报
for循环语句的格式:
for(初始化表达式; boolean表达式; 自增表达式)
我觉得应该要满足规定的格式吧
回复 使用道具 举报
本帖最后由 影响力147753321 于 2013-8-2 18:31 编辑

可以运算出结果呀!
回复 使用道具 举报
一楼的回答是错误的,我验证过了,
把你的x++放到for循环括号里就行
for( x=0;x<5;x++){}
或者是改成
for(x=0;x<5;)
{
x++;
}
结果值为x=5。
当你函数体里是x=x++;的时候;
x会先赋值给x再自加。

点评

正解  发表于 2013-8-2 18:49

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
x=x++,这个式子本身并无任何作用,因为x一直都是把初值赋给x自身,也就是说x一直都是等于0
所以在本题中,
for( x=0;x<5;)
                {
                        x=x++;
                }
是一个死循环,也就是一直循环运行,跳不出循环外,而你的输出语句在循环外,所以没见输出

点评

正解  发表于 2013-8-2 18:49

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
for循环中的都是局部变量。你想变量放在外面还能用就用while循环。
回复 使用道具 举报
为什么运行不出结果呢?你静静的等等,一会儿你的电脑就发热了·······

因为它在执行一个死循环,所以楼主要赶快结束程序,要不电脑真的会冒烟
回复 使用道具 举报
你这个代码的格式其实没有问题,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. }

复制代码
回复 使用道具 举报
jialihong 发表于 2013-8-2 18:26
for循环语句的格式:
for(初始化表达式; boolean表达式; 自增表达式)
我觉得应该要满足规定的格式吧 ...

for循环中的"参数初始化表达式"、"条件表达式"和"更新循环变量表达式"都是选择项, 即可以缺省, 但";"不能缺省。省略了初始化, 表示不对循环控制变量赋初值。 省略了条件表达式, 则不做其它处理时便成为死循环。省略了增量, 则不对循环控制变量进行操作, 这时可在语句体中加入修改循环控制变量的语句。 for循环的三个表达式都是逗号表达式,也就是说每个表达式可以由几个表达式构成,中间用",”隔开。
回复 使用道具 举报
  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, 下载次数: 13)

QQ图片20130802185801.jpg

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

QQ图片20130802185942.jpg
回复 使用道具 举报 1 0
把x=0的初始化动作,放在一开始定义的地方,就可以了
回复 使用道具 举报
把x=0的初始化动作,放在一开始定义的地方,就可以了
回复 使用道具 举报
本帖最后由 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-2 19:05
用eclips测试过了 如果这样格式写的话是死循环 而且x的值不变一直为0

为什么X的值一直是0?
回复 使用道具 举报
局部变量在定义时可以不用赋初值,但如果调用它就必须明确指定它的初始值,改成 int x = 0;即可。
回复 使用道具 举报
黄兴旺 发表于 2013-8-3 13:28
为什么X的值一直是0?

像你那样写的话由于x++会先赋值  所以x永远等于0 所以就在不断的循环
++x就会先自己加1再赋值 最后会打印结果5
回复 使用道具 举报
相信看了这张图片的解释楼主可能会明白滴、

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

Unnamed QQ Screenshot20130803225204.jpg
回复 使用道具 举报
云5的来这里瞅瞅,
x=x++,关键在于这个++,你放在x后面,意思是先用在++,就是先比较后自增,但一比较完后就跳回重新循环了,那么x还是等于0,所以一直在做一个死循环,x=0,x<5,满足,然后x=x,
如果你是先加在比较,就出结果了:x=++x
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马