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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© GGdog 中级黑马   /  2014-4-17 16:57  /  1857 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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啊
新手问题,大牛们别鄙视~

21 个回复

倒序浏览
第一次k=1; 输出k=1; k++之后k=2;
第二次k=2; 输出k=2;k++之后k=3; k=3不满足k<3条件,退出循环
回复 使用道具 举报
do while语句是先执行循环体,是指先执行do中语句再做循环条件的判断。
你程序中k = 1,所以先输出k的值,然后k自增,while再进行判断若k<3,接着执行循环语句,直到k结果不再小于3为止。
若程序中k = 3或比3大的值,虽然不满足while的循环条件,但还是会打印k=3。
若用while做循环,不满足k<3的话,打印语句根本就不会执行。
回复 使用道具 举报
肯定看不到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

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
呆呆沙师妹 发表于 2014-4-17 17:03
do while语句是先执行循环体,是指先执行do中语句再做循环条件的判断。
你程序中k = 1,所以先输出k的值, ...

怎么拿技术分啊,求入学:L
回复 使用道具 举报
左拉 发表于 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:13
7#
呆呆沙师妹 发表于 2014-4-17 17:03
do while语句是先执行循环体,是指先执行do中语句再做循环条件的判断。
你程序中k = 1,所以先输出k的值, ...

懂了 谢谢哈 嘿嘿
回复 使用道具 举报
GGdog 中级黑马 2014-4-17 17:10:41
8#
左拉 发表于 2014-4-17 17:07
怎么拿技术分啊,求入学

:dizzy: 也是个问题~ ~ 慢慢来 我基础视频还没看完呢
回复 使用道具 举报
第一次循环,看第一次的注释          第二次循环  看第二次的注释

  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.          }
复制代码
回复 使用道具 举报
GGdog 发表于 2014-4-17 17:10
也是个问题~ ~ 慢慢来 我基础视频还没看完呢

我发了技术博客,说技术分不够,审核不合格,给了个大鸭蛋。
回复 使用道具 举报
GGdog 中级黑马 2014-4-17 17:21:13
11#
左拉 发表于 2014-4-17 17:12
我发了技术博客,说技术分不够,审核不合格,给了个大鸭蛋。

额~~~~!!技术分最低是要25吗
回复 使用道具 举报
GGdog 发表于 2014-4-17 17:21
额~~~~!!技术分最低是要25吗

最低10分才能走入学流程,最低25分才能入学:dizzy:
回复 使用道具 举报
GGdog 中级黑马 2014-4-17 17:28:47
13#
左拉 发表于 2014-4-17 17:23
最低10分才能走入学流程,最低25分才能入学

那先拿10分走完流程 再入学啊~ ~
回复 使用道具 举报
你把while(k<3)改成while(k<4)就会把3打印出来。。
回复 使用道具 举报
左拉 发表于 2014-4-17 17:07
怎么拿技术分啊,求入学

天天逛论坛,有会的问题就写上回答。
回答的多了,获得技术分的机会就大了。
这个事需要坚持,不要轻易灰心。
回答详细些获得技术分的机率也会大一些。
回复 使用道具 举报
呆呆沙师妹 发表于 2014-4-17 17:41
天天逛论坛,有会的问题就写上回答。
回答的多了,获得技术分的机会就大了。
这个事需要坚持,不要轻易灰 ...

。                             

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

无标题.png
回复 使用道具 举报
。                              

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

无标题.png
回复 使用道具 举报
peku 中级黑马 2014-4-17 17:56:10
18#
先执行输出只在循环开始的时候适用,因为没有判断,到后面的所有循环都要先判断再循环,你还可以用假设的方式加深理解,假如k=3会循环,就表示k=3通过了条件判断,这显然与事实不符
回复 使用道具 举报
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);
        }

}
这样就能看到  了,
回复 使用道具 举报
首先do-while语句是说   代码在开始执行时先执行一次,之后代码的执行就是while语句所控制的了。你K的初始值是1,代码块执行一次,输出k=1,k变为2,while判断为true,代码块再次执行,输出k=2,,k变为3,之后while判断为false,代码块就不执行了。所以你看不到k=3
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马