黑马程序员技术交流社区

标题: do while输出问题 [打印本页]

作者: GGdog    时间: 2014-4-17 16:57
标题: do while输出问题
  1. public static void main(String[] args)
  2.         {
  3.                
  4.                 int k = 1;
  5.                 do
  6.                 {
  7. System.out.println("k="+k);
  8.                         k++;
  9.                 }
  10.                 while(k<3);
  11.                
  12.         }
复制代码
do while语句是先执行循环体,在判断条件,条件满足,再继续执行循环体。当k=1的时候 不论满足条件 输出一次当k=2的时候 不论满足条件 输出一次当k=3的时候 虽然不满足条件,不是应该先执行输出吗?然后判断不满足条件就不输出4那为什么上面的代码只输出k=1;k=2,没有看到k=3啊
新手问题,大牛们别鄙视~

作者: 左拉    时间: 2014-4-17 17:01
第一次k=1; 输出k=1; k++之后k=2;
第二次k=2; 输出k=2;k++之后k=3; k=3不满足k<3条件,退出循环
作者: 呆呆沙师妹    时间: 2014-4-17 17:03
do while语句是先执行循环体,是指先执行do中语句再做循环条件的判断。
你程序中k = 1,所以先输出k的值,然后k自增,while再进行判断若k<3,接着执行循环语句,直到k结果不再小于3为止。
若程序中k = 3或比3大的值,虽然不满足while的循环条件,但还是会打印k=3。
若用while做循环,不满足k<3的话,打印语句根本就不会执行。
作者: Tking    时间: 2014-4-17 17:07
肯定看不到k=3
你到while循环外部去System.outprintln(k);
就可以看到k=3了

首先 main线程刚进do{}while的时候 k=1==》并打印出来,接着,k++,k=2,在对其进行判断
发现符合要求,继续转。
main线程又到do这里,又把k=2打印出来,接着k++,k=3。进行判断,while发现不对头,k已经毕业了。那就把他放出去。这样,k=3,但是没有再次循环,去执行打印语句,所以
解决方案,1.你可以再do{}while后面加一句打印语句
2.你可以把while的条件改成 k<=3
作者: 左拉    时间: 2014-4-17 17:07
呆呆沙师妹 发表于 2014-4-17 17:03
do while语句是先执行循环体,是指先执行do中语句再做循环条件的判断。
你程序中k = 1,所以先输出k的值, ...

怎么拿技术分啊,求入学:L
作者: GGdog    时间: 2014-4-17 17:08
左拉 发表于 2014-4-17 17:01
第一次k=1; 输出k=1; k++之后k=2;
第二次k=2; 输出k=2;k++之后k=3; k=3不满足k

哦,懂了,在k=2的时候自增 然后就判断了

我以为输出k=3之后再判断
作者: GGdog    时间: 2014-4-17 17:09
呆呆沙师妹 发表于 2014-4-17 17:03
do while语句是先执行循环体,是指先执行do中语句再做循环条件的判断。
你程序中k = 1,所以先输出k的值, ...

懂了 谢谢哈 嘿嘿
作者: GGdog    时间: 2014-4-17 17:10
左拉 发表于 2014-4-17 17:07
怎么拿技术分啊,求入学

:dizzy: 也是个问题~ ~ 慢慢来 我基础视频还没看完呢
作者: ⒈心只霸占沵    时间: 2014-4-17 17:10
第一次循环,看第一次的注释          第二次循环  看第二次的注释

  1. public static void main(String[] args){
  2.         int k = 1;
  3.          do
  4.          {    //第一次 k=1         第二次  k=2
  5.            System.out.println("k="+k);//第一次 打印 k=1       第二次  打印k=2

  6.            k++;//第一次  k++ 后k=2       第二次  k++ 后 k=3

  7.           }
  8.           while(k<3);//第一次 k为2<3(继续)      第二次  k为3 ==3 (不符合条件,不再继续)
  9.          }
复制代码

作者: 左拉    时间: 2014-4-17 17:12
GGdog 发表于 2014-4-17 17:10
也是个问题~ ~ 慢慢来 我基础视频还没看完呢

我发了技术博客,说技术分不够,审核不合格,给了个大鸭蛋。
作者: GGdog    时间: 2014-4-17 17:21
左拉 发表于 2014-4-17 17:12
我发了技术博客,说技术分不够,审核不合格,给了个大鸭蛋。

额~~~~!!技术分最低是要25吗
作者: 左拉    时间: 2014-4-17 17:23
GGdog 发表于 2014-4-17 17:21
额~~~~!!技术分最低是要25吗

最低10分才能走入学流程,最低25分才能入学:dizzy:
作者: GGdog    时间: 2014-4-17 17:28
左拉 发表于 2014-4-17 17:23
最低10分才能走入学流程,最低25分才能入学

那先拿10分走完流程 再入学啊~ ~
作者: \(^o^)/    时间: 2014-4-17 17:35
你把while(k<3)改成while(k<4)就会把3打印出来。。
作者: 呆呆沙师妹    时间: 2014-4-17 17:41
左拉 发表于 2014-4-17 17:07
怎么拿技术分啊,求入学

天天逛论坛,有会的问题就写上回答。
回答的多了,获得技术分的机会就大了。
这个事需要坚持,不要轻易灰心。
回答详细些获得技术分的机率也会大一些。
作者: 杨庆雷    时间: 2014-4-17 17:48
呆呆沙师妹 发表于 2014-4-17 17:41
天天逛论坛,有会的问题就写上回答。
回答的多了,获得技术分的机会就大了。
这个事需要坚持,不要轻易灰 ...

。                             

无标题.png (84.62 KB, 下载次数: 99)

无标题.png

作者: 杨庆雷    时间: 2014-4-17 17:52
。                              

无标题.png (84.62 KB, 下载次数: 96)

无标题.png

作者: peku    时间: 2014-4-17 17:56
先执行输出只在循环开始的时候适用,因为没有判断,到后面的所有循环都要先判断再循环,你还可以用假设的方式加深理解,假如k=3会循环,就表示k=3通过了条件判断,这显然与事实不符
作者: 天山    时间: 2014-4-17 18:21
package com.itheima;

public class do_while {
        public static void main(String []args)
        {
                int k=1;
                do{
                        System.out.println("执行时k="+k);
                                k++;
                        System.out.println("自加后K="+k);
                }
                while(k<3);
        }

}
这样就能看到  了,
作者: Doraemon    时间: 2014-4-17 18:38
首先do-while语句是说   代码在开始执行时先执行一次,之后代码的执行就是while语句所控制的了。你K的初始值是1,代码块执行一次,输出k=1,k变为2,while判断为true,代码块再次执行,输出k=2,,k变为3,之后while判断为false,代码块就不执行了。所以你看不到k=3
作者: 四川男人    时间: 2014-4-17 21:55
第二次进入while{}循环后,输出k=2,然后k自加k=3,k=3已经不满足循环的条件了。所以就跳出循环,
作者: 邵景伦    时间: 2014-4-18 15:51
public static void main(String[] args)
        {
               
                int k = 1;
                do
                {
System.out.println("k="+k);先执行后判断,k=1;k=2
                        k++;
                }
                while(k<3);
               
        }




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