黑马程序员技术交流社区

标题: 流程控制的三个问题求解,谢谢!!!谢谢!! [打印本页]

作者: 289623337    时间: 2014-10-5 21:02
标题: 流程控制的三个问题求解,谢谢!!!谢谢!!
本帖最后由 289623337 于 2014-10-6 09:14 编辑
  1. public class Test01
  2. {
  3. public static void main (String[]args)
  4. {
  5. /*

  6. 三个问题如果看的话去掉注释,这是我在书上找的练习题,cmd都能运行出来!
  7. //结果是0,这里面的i有什么用吗?


  8. int total=0;
  9. for(int i=0;i>total;i++)
  10. {
  11. System.out.println(i);
  12. }
  13. System.out.println(total);


  14. */


  15. /*

  16. //为什么会得这个结果i=50,我怎么认为是i=10呢?


  17. int i=10;
  18. if(i<5);
  19. i=50;
  20. System.out.println("i="+i);

  21. */

  22. /*
  23. //为什么会i=11,我认为是9啊???
  24. int i=0;
  25. while(i++<10);
  26. System.out.println("i="+i);
  27. */
  28. }
  29. }
复制代码

作者: 鲁行    时间: 2014-10-5 21:22
class Test01
{
public static void main (String[]args)
{
                //三个问题如果看的话去掉注释
                //结果是0,这里面的i有什么用吗?
                //i是for循环里面的一个局部变量,但是循环条件i>total不成立,
                //所以for里面的输出语句没有执行

                int total=0;
                for(int i=0;i>total;i++)
                {
                        System.out.println(i);
                }
                System.out.println(total);

         //为什么会得这个结果i=50,我怎么认为是i=10呢?
                //因为if语句后面加了分号(;),所以i被重新赋值为了50;
                int i=10;
                if(i<5);
                i=50;
                System.out.println("i="+i);

        //为什么会i=11,我认为是9啊???
        //后自增(++)是说,先参与运算,再本身加1;也就是说先判断i<10是否成立,再计算i=i+1结果为11;
        //你认为是9,那个是--这个运算符.
        //你这个while循环只要循环条件,没有循环体.
                int i=0;
                while(i++<10);
                System.out.println("i="+i);

        }
        //PS : 你怎么在if()和while()后面都加了分号,加了分号就结束了.
}
作者: hacker◊紫猫    时间: 2014-10-5 21:23
我懂,但我得想想
作者: hacker◊紫猫    时间: 2014-10-5 21:26
完全看不懂
作者: zuochbd    时间: 2014-10-5 21:33
2楼正确

作者: 289623337    时间: 2014-10-5 21:42
本帖最后由 289623337 于 2014-10-5 21:56 编辑
鲁行 发表于 2014-10-5 21:22
class Test01
{
public static void main (String[]args)

这是三道练习题,书上面就是加了;我也感觉不用加,也是读它们后面的那一句

所以第一个有没有i都无所谓?
第二个if()加;就被重新赋值了?在基础视频里没有吧,今天算是又学习了一个新的知识点。
第三个的意思是 先判断i与10的关系后再进行++运算?  我开始算的是先给i赋值在用i++与10进行比较了!while的结构就是while(条件表达式)不用循环体,cmd自己就运行了!   多谢了,现在学到了两个知识点!
作者: 289623337    时间: 2014-10-5 21:44
hacker◊紫猫 发表于 2014-10-5 21:26
完全看不懂

慢慢来,加油!
作者: 鲁行    时间: 2014-10-5 21:51
第二个if()加了分号,就表示这句话已经结束,如果你去掉分号,会执行下面一句.其实在if()后面加分号,没有实际意义,
而这个程序中又写了一句i=50;当然是重新赋值.如果你这样写就没有问题了
if(i<5)
i=50;

这样就因为不满足判断条件,就没有重新赋值.i还是10;

自增(++)和自减(--)建议做几道题就了解了.
作者: MR.Sun    时间: 2014-10-5 22:13
2楼正解。。。不知道楼主为什么这么喜欢在if跟for语句后面加分号,加了分号就结束!
作者: 289623337    时间: 2014-10-5 22:47
MR.Sun 发表于 2014-10-5 22:13
2楼正解。。。不知道楼主为什么这么喜欢在if跟for语句后面加分号,加了分号就结束! ...

6楼有解,这是我在书上找的联系题他就是这么写的!!!
作者: mengzi987    时间: 2014-10-5 23:38
谢谢分享!:handshake
作者: 油油油菜花    时间: 2014-10-5 23:44
这个代码太多错的了……
作者: wtjohn    时间: 2014-10-6 00:10
2楼都说出来了嘛...
作者: 289623337    时间: 2014-10-6 09:15
MR.Sun 发表于 2014-10-5 22:13
2楼正解。。。不知道楼主为什么这么喜欢在if跟for语句后面加分号,加了分号就结束! ...

这是我在书上找的练习题,cmd都能运行出来!
作者: 289623337    时间: 2014-10-6 09:16
油油油菜花 发表于 2014-10-5 23:44
这个代码太多错的了……

这个是我在书上找的练习题,cmd都能运行出来!
作者: 289623337    时间: 2014-10-6 09:18
mengzi987 发表于 2014-10-5 23:38
谢谢分享!

一起努力加油!!!
作者: 嘿~~    时间: 2014-10-6 14:33
第一个:i>total;这个条件怎么在i=0时就不成立了,循环就挂掉了,i还有什么用啊
第二个:if()判断语句后跟的是;那么i= 50等于重新给i赋值,自然打印结果就是50
第三个:和第二个类似。while后跟的也是;
在i=10时,进行判断while括弧里的条件,10<10不成立。然后10自加后打印出来是11
作者: yangzhong1991    时间: 2014-10-6 15:16
还是论坛好啊,这些让我自己看我只能知道第一个,第二第三都是看前面回答才懂的
作者: 289623337    时间: 2014-10-6 23:37
嘿~~ 发表于 2014-10-6 14:33
第一个:i>total;这个条件怎么在i=0时就不成立了,循环就挂掉了,i还有什么用啊
第二个:if()判断语句后跟 ...

探讨下,技术交流,while后面加了;没错,但是这条语句继续运行吧,没有重新赋值,也没有结束,请问他的意思???
作者: 289623337    时间: 2014-10-6 23:38
yangzhong1991 发表于 2014-10-6 15:16
还是论坛好啊,这些让我自己看我只能知道第一个,第二第三都是看前面回答才懂的 ...

嗯有什么问题都发出来,大家一起交流交流,我这是从书上找的题和大家一起分享,还好。大家有收获就好!!!
作者: 289623337    时间: 2014-10-6 23:40
鲁行 发表于 2014-10-5 21:22
class Test01
{
public static void main (String[]args)

行?第三个的while后面是加;了,但是没有结束是不???后面还是继续运行了!!!
作者: 鲁行    时间: 2014-10-6 23:53
289623337 发表于 2014-10-6 23:40
行?第三个的while后面是加;了,但是没有结束是不???后面还是继续运行了!!! ...

加了分号就结束了,运行不了.
作者: 高泳    时间: 2014-10-7 00:29
2L 正解。
作者: 踏云    时间: 2014-10-7 00:29
int total=0;//for的int是从开始的,0不大于total,所以for循环不会进行,第一次循环的时候的条件就已经不满足了,
//所以只运行了System.out.println(total);
for(int i=0;i>total;i++)
{
System.out.println(i);
}
System.out.println(total);



    int i=10;
//if后面是分号,所以就没有执行了相当于if(i<5){} i=50;
//所以i=50还是会运行的
    if(i<5);
    i=50;
   System.out.println("i="+i);





int i=0;
//当运行到9的时候while还是满足条件的所以会加1变10,
//因为i++的调用是首先将i的值存入一个temp变量中,然后i++,最后将temp返回(返回temp时已经将i加1了)。
//所以当i=10时,调用i++与10比较i会先加1,然后返回temp的值10,而条件不满足,此时while循环结束。i==11;
while(i++<10);
System.out.println("i="+i);

作者: 289623337    时间: 2014-10-7 06:39
本帖最后由 289623337 于 2014-10-7 06:44 编辑
鲁行 发表于 2014-10-6 23:53
加了分号就结束了,运行不了.

嗯 谢了   你学java多长时间啦???
作者: 嘿~~    时间: 2014-10-7 08:29
289623337 发表于 2014-10-6 23:37
探讨下,技术交流,while后面加了;没错,但是这条语句继续运行吧,没有重新赋值,也没有结束,请问他的意 ...

一直执行while括弧里的判断条件,直到这个条件不成立为止。
作者: 289623337    时间: 2014-10-7 13:22
嘿~~ 发表于 2014-10-7 08:29
一直执行while括弧里的判断条件,直到这个条件不成立为止。

嗯谢谢 就是这道题里while后面加;没有实际的意义!!!
作者: mengzi987    时间: 2014-10-8 00:06
289623337 发表于 2014-10-6 09:18
一起努力加油!!!

楼主,学的怎么样了?感觉学完后面的,前面又忘得差不多耶!:'(
作者: 289623337    时间: 2014-10-12 16:53
做纸质笔记,没事的时候看看,多总结,加油,至少我是这么做的……
作者: jtshawn    时间: 2014-10-13 09:56
来晚了,答案都说完了
作者: zd12345    时间: 2014-10-13 17:40
第一个程序里i为for循环里的局部变量,程序先判断for里面中间的条件i>total,发现不满足于是结束循环。所以最后结果为0.      第二个程序里if语句后面加了分号,结束了判断语句,后面i被重新赋值为50.        第三个程序i++为后自增,运行时先取i的值,然后i再加1.   while()后面加分后没有错,这样会一直判断条件,直到条件为false时结束本句。当i=9时,执行while语句,条件满足,i变为10,再执行while语句,条件不满足,i同时变为11,结束循环。
作者: (づ ̄_3 ̄)づ    时间: 2014-10-13 18:05
同二楼,+1




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