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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑先明 中级黑马   /  2013-6-28 15:16  /  3274 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-6-28 20:34 编辑

每天就只花了半小时多一点的时间去总结,其余除了工作就是看视频.然后我我就想,不能每天这样.于是就想着找找联系做做,就算是看着代码打出来至少也会更熟悉代码.然后今天我做到了这题,
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 神马都是浮云

查看全部评分

25 个回复

倒序浏览
怎么就发表了!我还没写完!!继续.练习答案的代码是:
  1. public class lianxi03
  2. {
  3. public static void main(String[] args)
  4. {    
  5.         int b1, b2, b3;     
  6.         for(int m=101; m<1000; m++)
  7. {                 b3 = m / 100;     
  8.                   b2 = m % 100 / 10;     
  9.                   b1 = m %    10;             
  10.              if((b3*b3*b3 + b2*b2*b2 + b1*b1*b1) == m)
  11. {     
  12.                      System.out.println(m+"是一个水仙花数");
  13. }    
  14. }
  15. }
  16. }   
复制代码
但是我按照答案打上去后发现编译可以过,运行也可以过,但是就是什么都没输出.
然后最近我看了面向对象的视频,就想着用面向对象的方法给表示出来,我的代码:
  1. class ShuiXiam
  2. {
  3.         static int a, b, c;
  4.         public static int show()
  5.         {
  6.                 for(int m=101;m<10000;m++)
  7.                 {
  8.                         a =m%100;
  9.                         b =m&100/10;
  10.                         c =m%10;
  11.                         if ( a*100+b*10+c==m && a*a*a + b*b*b + c*c*c==m)
  12.                         {
  13.                                 System.out.println(m+"是一个水仙花数");
  14.                         }
  15.                 }       
  16.         }       
  17. }
  18. public class ShuiXianHua
  19. {
  20.         public static void main(String [] args)
  21.         {
  22.                 ShuiXian s = new ShuiXian();
  23.                 s.show();

  24.         }
  25.                
  26. }
复制代码
可是我编译时一直提示16行缺少返回语句...我就懵了...
我认真看了几遍,真找不出错误来...
回复 使用道具 举报
人都跑那里去了!!!
回复 使用道具 举报
郑先明 发表于 2013-6-28 15:22
怎么就发表了!我还没写完!!继续.练习答案的代码是:但是我按照答案打上去后发现编译可以过,运行也可以过,但 ...

你这个方法返回值类型是int 你没有retrun int;你可以把返回值类型改成void
回复 使用道具 举报
直接打印的话,返回值类型用void,不要用int
回复 使用道具 举报
王靖远 发表于 2013-6-28 15:44
你这个方法返回值类型是int 你没有retrun int;你可以把返回值类型改成void

好  我改了  可是还是什么都没有输出  这又是为什么....我按照代码的顺序走了一遍 应该是会输出的啊...
回复 使用道具 举报
神之梦 发表于 2013-6-28 15:47
直接打印的话,返回值类型用void,不要用int

那如果不改返回值类型  要改哪里呢?
回复 使用道具 举报
秩宇 中级黑马 2013-6-28 16:04:03
8#
郑先明 发表于 2013-6-28 15:54
好  我改了  可是还是什么都没有输出  这又是为什么....我按照代码的顺序走了一遍 应该是会输出的啊... ...

打错字了,第一行,shuixian 打成 shuixiam
回复 使用道具 举报
秩宇 发表于 2013-6-28 16:04
打错字了,第一行,shuixian 打成 shuixiam 了

嗯.很细心啊~不过这个刚才我改返回值类型的时候看到了,但是现在问题不在这 ,而是我把返回值类型改成void,然后编译运行还是什么都没输出,为什么呢!
回复 使用道具 举报
第九行符合是不是写错了。还有153%100=53,所以算法应该也是有问题的,不能进入你的if条件,再仔细想想,如果想不出再问我,我告诉你做。
回复 使用道具 举报
你的返回类型是int你没有返回,也是错的,如果想不返回的话,把方法名前面的int改为void即可,
回复 使用道具 举报
如果不改返回类型就要在方法里面写上return m;再在主函数main里面System.out.println(ShuiXiam.show());还有你的主函数里面用对象调用静态方法是不正规的,是类名调用静态方法,如果在.net里面对象是不可以调用静态方法的。
回复 使用道具 举报
class Debug9
{
        public static void main(String[] args)
        {
                for (int x=100;x<1000 ;x++ )
                {
                        String s  = new Integer(x).toString();
                       
                        char[] chs = s.toCharArray();
                       
                        if((Math.pow(chs[0],3)+Math.pow(chs[1],3)+Math.pow(chs[2],3))==x)
                                System.out.println(x);
                }
        }
}
我写的代码也打印不出来。暂时还没想到什么原因
回复 使用道具 举报
郑先明 发表于 2013-6-28 15:54
好  我改了  可是还是什么都没有输出  这又是为什么....我按照代码的顺序走了一遍 应该是会输出的啊... ...

写代码要细心啊,取十位的时候算法不对 b =m/10%10;
而且你这个是只求三位数的水仙花数,m的范围不应该小于10000.
回复 使用道具 举报
郑先明 发表于 2013-6-28 15:56
那如果不改返回值类型  要改哪里呢?

楼下已经说了改哪里了,如果楼主只是想看下结果的话,那还是选择打印吧, 如果要选择返回的话,还必须用容器存起来,楼主的方法名字写错也已经知道了,至于结果,看下面代码
  1. class ShuiXian
  2. {
  3.         static int a, b, c;
  4.         public static void show()
  5.         {
  6.                 for(int m=100;m<1000;m++)
  7.                 {
  8.                         a =m/100;
  9.                         b =m%100/10;
  10.                         c =m%10;
  11.                         if (a*a*a + b*b*b + c*c*c==m)
  12.                         {
  13.                                 System.out.println(m+"是一个水仙花数");
  14.                         }
  15.                 }        
  16.         }        
  17. }
  18. public class ShuiXianHua
  19. {
  20.         public static void main(String [] args)
  21.         {
  22.                 ShuiXian s = new ShuiXian();
  23.                 s.show();

  24.         }
  25.                
  26. }
复制代码
结果:
153是一个水仙花数
370是一个水仙花数
371是一个水仙花数
407是一个水仙花数
请按任意键继续. . .
回复 使用道具 举报
  1. class Debug9
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 for(int x=100;x<1000;x++)
  6.                 {
  7.                         String s = new Integer(x).toString();

  8.                         char[]chs = s.toCharArray();

  9.                         int a1 = new Integer(new String(chs[0]+""));
  10.                         int a2 = new Integer(new String(chs[1]+""));
  11.                         int a3 = new Integer(new String(chs[2]+""));
  12.                        
  13.                         if((a1*a1*a1+a2*a2*a2+a3*a3*a3)==x)
  14.                                 System.out.println(x);
  15.                        
  16.         }
  17.                        
  18.         }
  19. }
复制代码
可以用了 开始忘了1对应的char类型值不是1了
回复 使用道具 举报
王靖远 发表于 2013-6-28 16:26
class Debug9
{
        public static void main(String[] args)

在字符转换成数字的时候,是按照ASCII码转换的,数字的ASCII码是从48开始的,所以在转换之后要减去48才是原来的数字值。
回复 使用道具 举报
秩宇 发表于 2013-6-28 16:57
在字符转换成数字的时候,是按照ASCII码转换的,数字的ASCII码是从48开始的,所以在转换之后要减去48才是 ...

哦 原来这样
回复 使用道具 举报
神之梦 发表于 2013-6-28 16:49
楼下已经说了改哪里了,如果楼主只是想看下结果的话,那还是选择打印吧, 如果要选择返回的话,还必须用 ...

如果要选择返回的话,还必须用容器存起来
这句话我没懂...具体怎么做?
回复 使用道具 举报
王靖远 发表于 2013-6-28 16:52
可以用了 开始忘了1对应的char类型值不是1了

这代码我看不懂....
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马