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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 中山狼 中级黑马   /  2013-10-22 20:36  /  1450 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void getFlower(){
                        /*int num=0;
                        int a=num%10;
                        int b=num/10%10;
                        int c=num/100;*/
                for (int num=100;num<1000;num++ )
                {
                        int a=num%10;
                        int b=num/10%10;
                        int c=num/100;
                       
                        if(a*a*a+b*b*b+c*c*c==num)
                        System.out.println(num +"是水仙花数");
                               
                }
        }

当把变量定义在外边的时候并未打印出水仙花数
当把变量定义在for循环内部的时候打印出正常结果,为什么呢?谢谢大神们

评分

参与人数 1技术分 +1 收起 理由
李江 + 1 很给力!

查看全部评分

9 个回复

倒序浏览
新人发,大家多多照顾。{:soso_e144:}

先说一说放在外面为什么没出来吧。
  楼主可以读一读自己的代码,当调用该方法时,按照顺序执行代码,
  int num = 0;
   以及设定好了,判断的只有num = 0 的情况,所以无法正常打印
要是放在里面,继续读代码,num会根据循环依次加1变化,所以就能进行判断,并打印

新人发,有什么问题,希望大家指正

评分

参与人数 1技术分 +1 收起 理由
李江 + 1 很给力!

查看全部评分

回复 使用道具 举报
FFF 金牌黑马 2013-10-22 21:10:23
藤椅
本帖最后由 FFF 于 2013-10-22 21:12 编辑

问题出现在这里:
  1.         int num=0;
  2.         int a=num%10;
  3.         int b=num/10%10;
  4.         int c=num/100;
复制代码
你把变量a,b,c都定义在外部。
你内部判定 if(a*a*a+b*b*b+c*c*c==num)时,会现在这样的情况:
a,b,c三个数变成恒定的。你内部没有改变a,b,c的值。
把代码改成这样就可以了!
  1.         public static void getFlower(){
  2.         int num=0;
  3.                 //int a=num%10;
  4.         //int b=num/10%10;
  5.         //int c=num/100;
  6.                 for (num=100;num<1000;num++ ){
  7.         int a=num%10;
  8.         int b=num/10%10;
  9.         int c=num/100;
  10.         if(a*a*a+b*b*b+c*c*c==num)
  11.         System.out.println(num +"是水仙花数");               
  12.         }
复制代码
你num可以定义在外部(这样做没有什么意义)。但,abc三个变量不能。abc三个变量要跟着for内的局部的num变量而改变。num每循环一次,就要对abc三个变量重新赋值。所以不能定义在外部(如果定义的话,就要在内部再次对abc进行赋值)。

评分

参与人数 1技术分 +1 收起 理由
李江 + 1 很给力!

查看全部评分

回复 使用道具 举报
雨过丶天已晴 发表于 2013-10-22 20:57
新人发,大家多多照顾。

先说一说放在外面为什么没出来吧。

可不可以这么理解:在外边定义变量int num=0,0是其初始值,然后定义的变量a、b、c的初始值也是0,在for循环内部,循环的时候并没有改变a、b、c的值,所以打印的是没结果的,谢谢啊
回复 使用道具 举报
中山狼 发表于 2013-10-22 21:11
可不可以这么理解:在外边定义变量int num=0,0是其初始值,然后定义的变量a、b、c的初始值也是0,在for循 ...

恩,我认为你说的是对的:victory:
回复 使用道具 举报
FFF 发表于 2013-10-22 21:10
问题出现在这里:你把变量a,b,c都定义在外部。
你内部判定 if(a*a*a+b*b*b+c*c*c==num)时,会现在这样的情 ...

谢谢啊,想通了
回复 使用道具 举报
                     /*int num=0;
                        int a=num%10;
                        int b=num/10%10;
                        int c=num/100;*/
如果只是定义,当然外面和里面没区别,但是,你的变量进行了运算和赋值,这样在循环中通过num值的改变,赋值语句的意义显然不同。
比如说:
int i=1;
int sum=0;
int a=i*10;
for(i=1;i<=3;i++)
{
sum=sum+a;
}
这样sum的值是30;
如果定义在里面:
int i=1;
int sum=0;
for(i=1;i<=3;i++)
{
int a=i*10;
sum=sum+a;
}
sum的值为60;

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. class getFlower
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.          /*
  6.          int num=0;
  7.          int a=num%10;
  8.          int b=num/10%10;
  9.          int c=num/100;
  10.          */
  11.          for(int num=100;num<1000;num++ )
  12.          {
  13.              int a=num%10;
  14.              int b=num/10%10;
  15.              int c=num/100;
  16.              if(a*a*a+b*b*b+c*c*c==num)
  17.                  System.out.println(num +"是水仙花数");
  18.                                 
  19.          }
  20.     }
  21. }
复制代码
如果注释部分定义在外面,代码就是这样的

class getFlower
{
    public static void main(String[] args)
    {
         int num=0;
         int a=num%10;         //a=0
         int b=num/10%10;   //b=0
         int c=num/100;         //c=0
         //循环外部的变量已经全部为0
         for(int num=100;num<1000;num++ )//num在循环外部已经定义过,循环内部不能再次定义,编译要报错
         {
             if(a*a*a+b*b*b+c*c*c==num)//这里的a,b,c在循环内部没有进行任何赋值操作,运算结果为0,比较结果为false,这样当然没结果
                 System.out.println(num +"是水仙花数");
         }
    }
}



当定义在内部,代码是这样的:

class getFlower
{
    public static void main(String[] args)
    {
         for(int num=100;num<1000;num++ )
         {
             int a=num%10;
             int b=num/10%10;
             int c=num/100;
             //循环内部a,b,c的值随着循环在变化,那么下面的判断就会起作用,这样就会有打印结果
             if(a*a*a+b*b*b+c*c*c==num)
                 System.out.println(num +"是水仙花数");
         }
    }
}

回复 使用道具 举报
起猿 中级黑马 2013-10-28 00:46:37
9#
楼主进入了一个误区,当你把变量定义在外面的时候,你给num定义了一个初始化值0.变量a,b,c也随之被赋值了,运算后都为0。而你的for循环,是在不断的循环判断if语句中的a*a*a+b*b*b+c*c*c==num表达式。在这期间并没有对a.b.c进行赋值操作。这种情况下,if条件永远是成立的true。所以你打印不出正确的数字,打印的是for循环内的局部变量num的循环值。
回复 使用道具 举报
起猿 中级黑马 2013-10-28 00:48:40
10#
条件永远不成立,false。刚才打错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马