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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhengtuwl 中级黑马   /  2015-11-10 22:46  /  669 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class WhileFlowerDemo {
  2.         public static void main(String[] args) {
  3.                 int x = 100;
  4.                 int count =0;
  5.                  //int ge = x % 10;
  6.                  //int shi = x / 10 % 10;
  7.                  //int bai = x / 10 / 10 % 10;

  8.                 while (x < 1000) {
  9.                         int ge = x % 10;
  10.                         int shi = x / 10 % 10;
  11.                         int bai = x / 10 / 10 % 10;
  12.                         if (x == ge * ge * ge + shi * shi * shi + bai * bai * bai) {
  13.                                 System.out.println(x);
  14.                         count++;
  15.                         }
  16.                                 x++;
  17.                 }
  18.                 System.out.println("水仙花数一共是"+count+"个");
  19.         }
  20. }
复制代码


问:为什么int ge , int shi, int bai无法定义到循环外边?(也就是count变量下方,注释的地方)
      如果放到循环外边,打印结果会是0,且只有一个0.原因是什么呢?

7 个回复

倒序浏览
因为要通过判断if里面的语句来确定是否要执行count++这条语句,所以若放循环外,会输出0
回复 使用道具 举报
木子子木 发表于 2015-11-10 23:06
因为要通过判断if里面的语句来确定是否要执行count++这条语句,所以若放循环外,会输出0 ...

定义在循环体外面(count下方)应该也可以在整个方法中使用此变量把,比如count就是在循环外定义的,它在循环和if语句里面就能使用。
回复 使用道具 举报
你把循环这个封装成一个方法,然后把count作为参数传递就能避免这个问题
回复 使用道具 举报
这里如果把它们放在外边,那么就是成员变量了,也就是说它们的值就是用x=100来计算的,后边不再变,所以你在while循环里               if (x == ge * ge * ge + shi * shi * shi + bai * bai * bai) {
                                System.out.println(x);
                               count++;
                        }
ge,shi,bai永远都是一个值,永远也就不跟x相等,不管循环多少次,都只会输出0
回复 使用道具 举报
邸永明 发表于 2015-11-11 14:23
这里如果把它们放在外边,那么就是成员变量了,也就是说它们的值就是用x=100来计算的,后边不再变,所以你在whi ...

正解!
回复 使用道具 举报

哈哈,谢谢支持,互相帮助啊
回复 使用道具 举报
ln0491 中级黑马 2015-11-16 12:36:59
8#
学习了。。。。。。。。不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马