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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏的四季 中级黑马   /  2014-3-19 13:04  /  2677 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏的四季 于 2014-3-19 13:26 编辑
  1. public static void WhileDemo1()
  2.         {
  3.                 int count = 0;int y = 1;
  4.                 while(y<=100)
  5.                 {
  6.                         if(y%7==0)
  7.                                 count++;
  8.                         else//如果去了它就可以,这是为什么呀?
  9.                                 y++;
  10.                         
  11.                 }
  12.                 System.out.println("1到100里面7的倍数的个数="+count);
  13.         }
复制代码
上边代码中的if     else中 为什么非要把它去掉才可以,,求解释,

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

13 个回复

倒序浏览
你格式不对啊
if(){
执行语句;
}else{
执行语句;
}

点评

单句可以省略{}  发表于 2014-3-19 21:12
回复 使用道具 举报
                              if(y%7==0)
                                count++;
                        else//如果去了它就可以,这是为什么呀?
                                y++;
去掉else格式发上了变化,,等于
if(y%7==0)
{
count++;
}
  y++;
回复 使用道具 举报
菜小徐 发表于 2014-3-19 13:09
你格式不对啊
if(){
执行语句;

执行一行语句,大括号可以去掉的吧?
回复 使用道具 举报
                while(y<=100)
                {
                        if(y%7==0)
                                count++;
                       else//如果去了它就可以,这是为什么呀?
                        y++;
                }
有else的话,执行到y=7时,因为y%7条件成立,所以else语句就没有执行,从而y没有自增,还是7,然后再执行while循环时,y也还是7,y%7条件成立,else语句又没执行,如此反复下去就是死循环,y一直保持为7,循环没法终止。

所以y++这个操作应该是无条件执行,放在else下面是不行的。
if ... else语句后面没有{ }的话,默认是将下面的第一行语句作为执行体。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报 1 0
刘先斌 发表于 2014-3-19 13:15
if(y%7==0)
                                count++;
                   ...

if   else不是判断语句吗?
if不满足时,要执行else;这是一种格式
if不满足时,没有else,也要执行下面的代码,
这两种有什么区别?

回复 使用道具 举报

恩恩,豁然开朗:lol
回复 使用道具 举报
夏的四季 发表于 2014-3-19 13:22
if   else不是判断语句吗?
if不满足时,要执行else;这是一种格式
if不满足时,没有else,也要执行下面 ...

  while(y<=100)
                {
                        if(y%7==0)
                                count++;
                        else//如果去了它就可以,这是为什么呀?
                                y++;
                        
                }
那if满足的时候呢。。。y++在else里面不就不执行了么!
回复 使用道具 举报
if  else 格式不对啊  if{}else{}是两个命令的吧 。第一个满足会执行第一个,不满足直接执行第二个。不用else也可以
回复 使用道具 举报
出现了死循环。count一直在++;
还有格式,
if(条件)
   如果操作只是一行代码,括号{}不用加
  如果是多行,则必须要加。建议 都加上,防止遗忘,如果编码熟练可加可不加,凭个人爱好
else 同上一样。
回复 使用道具 举报
不管y被7整除与否,都要y++。y++不能成为else语句执行。
建议:
  1. public static void main(String[] args)
  2. {
  3.         int count = 0;
  4.         int y = 1;
  5.         for(y = 1;y <=100;y++)
  6.         {
  7.                 if(y%7 == 0)
  8.                         count++;
  9.         }
  10.         System.out.println("1到100里面7的倍数的个数:"+count");
  11. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
这里考察的是if else的格式问题。
完整格式在我们不必说了,说说你代码所体现的问题吧
当if下面只有单条执行语句的时候,我们可以将大括号省略不写
  1. public static void WhileDemo1()
  2. {
  3.         int count = 0;int y = 1;
  4.     while(y<=100)
  5.     {
  6.                 if(y%7==0)
  7.                         count++;//这句才是if内的执行语句
  8.         y++;//注意这里的对齐方式,对你阅读代码有好处
  9.                 /*
  10.                 上面也就等价于
  11.                 if(y%7==0)
  12.                 {
  13.                         count++;
  14.                 }
  15.                 y++;
  16.                 这个程序中你并没有用到else结构
  17.                 */                                 
  18.     }
  19.     System.out.println("1到100里面7的倍数的个数="+count);
  20. }        
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
楼主,我恨你,我就说我这破电脑怎么今天用eclipse这么卡,
你的程序整一个死循环,我运行后还没有停止,
先去逛了论坛其他贴,卡死了。



  1. public class WhileDemo {

  2.     /*
  3.      题目:求1到100里面7的倍数的个数
  4.      思路:
  5.      1.设符合条件的个数有count个,初始化count=0;
  6.      2. 初始化用于遍历的变量y=1,从1遍历到 100,并且符合"y%7"的条件,则count加1;
  7.      3.输出count的个数。
  8.      */
  9.     public static void main(String[] args) {
  10.         int count = 0;
  11.         int y = 1;
  12.         while (y <= 100) {
  13.             if (y % 7 == 0) {
  14.                 count++;
  15.                 System.out.println(count);
  16.                 System.out.println(y);
  17.             } else {
  18.                 y++;
  19.             }
  20.         }
  21.         
  22.         /*for(;y<=100;y++){
  23.             if(y%7==0){
  24.                 count++;
  25.             }
  26.         }*/
  27.         
  28.         /*while(y<=100){
  29.             if(y%7==0){
  30.                 count++;
  31.                 y++;
  32.             }else{
  33.                 y++;
  34.             }
  35.         }*/
  36.         
  37.         System.out.println("1到100里面7的倍数的个数=" + count);
  38.     }

  39. }
复制代码



看上面这个图片,只要输出一下或者debug一下就知道了,
当y加到7,满足了 7%7=0 的条件后,就不会到else那个流程,
直接又返回到判断y是否小于100那一步。
而正确的思路应该是,无论是否满足条件,y都应该加1才对,
因此,else应该去掉。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马