黑马程序员技术交流社区

标题: while循环语句隐藏的问题?求解。 [打印本页]

作者: 崔瑞龙    时间: 2012-4-23 23:07
标题: while循环语句隐藏的问题?求解。
class WhileDome
{
public static void main(String[] args)
{
  /*
  定义初始化表达式:
  while(条件表达式)
  {
   循环体(执行语句);
  }
  */
  int x = 1;
  while (x<3)
  x++;//为什么x++放在这运行出结果为x=3,放在下面输出语句的时候运行结果为x=1,x=2。
  
  System.out.println("x="+x);
  

  int x1 = 1;
  do
  {
   System.out.println("do:x="+x1);
  }
  while (x1<0);
}
/*
while:先判断条件,只有条件满足才执行循环体。
do while:先执行循环体,在判断条件,条件满足,再继续执行循环体。
简单一句话:do while 无论条件是否满足,条件体至少执行一次。
*/
}
while循环语句,为什么编译运行完得出结果x=3,我本来以为会是x=1,x=2;求指点。
作者: 真真姐    时间: 2012-4-23 23:13
本帖最后由 杨国祯 于 2012-4-23 23:16 编辑

这就是代码不规范
  1.                                int x = 1;
  2.                                 while (x < 3)
  3.                                         {
  4.                                                 x++;
  5.                                         }
  6.                                 // x=3 ,跳出

  7.                                 System.out.println("x=" + x);
复制代码
给你分解了下,你的while为什么不加上括号,加上括号的话一定等于3,才会跳出,然后执行了打印就是这样

作者: 应佳锋    时间: 2012-4-23 23:14
WHILE 语句 i使用了++ 就是x=x+1 但是你上面有一个条件是X<3 也就是说当X<3的时候不会执行这循环 当然打印出3了
你搞错了吧肯定是按照书上来打的  你代码规范点 把括号什么的都括起来 自己就懂了
                 int x = 1;
                  while (x<3)
                  {
                          System.out.println(x);
                          x++;//为什么x++放在这运行出结果为x=3,放在下面输出语句的时候运行结果为x=1,x=2。          
                  }
               
                  
                  System.out.println("x="+x);

作者: 栗学魁    时间: 2012-4-23 23:34
第二个程序是先先执行循环体,在判断条件,条件满足,再继续执行循环体。
x1=1先输出,不满足循环条件,就停了
所以结果是x1=1

第一个就是x=3
作者: 蒋亮    时间: 2012-4-24 00:09
System.out.println("x="+x)这句代码你都放到循环外面去了,肯定是3了啊,你把代码改成
while(x<3){
System.out.println("x"+x);
x++;
}
作者: 王怡然    时间: 2012-4-24 00:23
应为你吧x++放在了循环体里打印语句的前面, jvm会先做完循环然后再输出x的值,
而当你把x++放在了打印语句的下面,就是循环体的最后一行的时候打印出来的值就是你想要的了,
希望能能对你有帮助.
作者: 付左军    时间: 2012-4-24 23:26
while语句只有在条件不成立时,才停止循环
执行情况是这样
JVM读到while时,该循环了,判断x<3不?小于,则x++,X=2,继续判断x=2小于3吗?小于,则X++得3,3<3不成立,while循环结束

作者: 高彰谦    时间: 2012-4-25 06:05
while (x<3)
  x++;//为什么x++放在这运行出结果为x=3,放在下面输出语句的时候运行结果为x=1,x=2。
  System.out.println("x="+x);
这个while并没有代码块,所以只影响下一句。 当前情况:直到x=3时不满足条件退出循环,转而执行输出,所以得到x=3;
两句调换位置,则应该是死循环,因为没有达到退出条件。且总是输出x=1;
如果要输出x=1,x=2
则必须
  1. while(x<3){
  2. System.out.println("x="+x);
  3. x++
  4. }
复制代码
do while循环体,你说的没错
作者: 马浩    时间: 2012-4-25 08:48
楼主 也写了while循环的格式,为啥不在while下用大括号把循环体括起来呢?
如果这样
int x = 1;
  while (x<3)
{ System.out.println("x="+x);
    x++;//为什么x++放在这运行出结果为x=3,放在下面输出语句的时候运行结果为x=1,x=2。
  }
不就是楼主想要的结果啦
像楼主那种表达方式,while下有两个语句,没有括号,系统会只把第一句作为循环体运行,循环两次结束后,才执行最后一句打印X值,x++两次当然是3啦
你如果只把while下两语句换下位置,依然不加括号,你会发现,循环只执行System.out.println("x="+x);没有x++的事,屏幕会不停的打1,形成了死循环,以后写循环语句
不管语句多少,还是加括号安全些。



作者: xiwangliujiao    时间: 2012-4-25 08:57
while语句执行到x=3时,已经不满足条件表达式x<3的要求,此时,循环就结束了,此时的x是等于3的,于是打印出来的结果也就是3了,你要是把输出语句写在while语句和x++中间的话,用一对大括号括起来,输出就是x=1和x=2了,




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