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

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

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

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

评分

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

查看全部评分

25 个回复

正序浏览
秩宇 发表于 2013-6-28 19:57
哦 口误 改了应该可以了吧? 我试了可以

OK了!!原来练习的原答案都是错的...不过数学我真的很烂...对于数学题很无奈!
回复 使用道具 举报
郑先明 发表于 2013-6-28 17:35
取百位的算法错了  取十位的没错

哦 口误 改了应该可以了吧? 我试了可以
  1. public class Test2 {

  2.     public static void main(String [] args)
  3.     {
  4.         ShuiXian s = new ShuiXian();
  5.         s.show();

  6.     }

  7.     static class ShuiXian
  8.     {
  9.         static int a, b, c;
  10.         public static void show()
  11.         {
  12.             for(int m=101;m<1000;m++)
  13.             {
  14.                 a =m/100;
  15.                 b =m/10%10;
  16.                 c =m%10;
  17.                // System.out.println(a+" "+ b +" "+c);
  18.                 if (a*100+b*10+c==m && a*a*a + b*b*b + c*c*c==m)
  19.                 {
  20.                     System.out.println(m+"是一个水仙花数");
  21.                 }
  22.             }
  23.         }
  24.     }
  25. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
秩宇 发表于 2013-6-28 16:47
写代码要细心啊,取十位的时候算法不对 b =m/10%10;
而且你这个是只求三位数的水仙花数,m的范围不应该小 ...

取百位的算法错了  取十位的没错
回复 使用道具 举报
oxf974025918 发表于 2013-6-28 16:25
如果不改返回类型就要在方法里面写上return m;再在主函数main里面System.out.println(ShuiXiam.show());还 ...

嗯对  静态函数直接用类名调用就可以了!但是按照你说的 在if语句里头加了return m;然后在主函数加输出语句,提示在18行缺少返回值,返回值类型是int
回复 使用道具 举报
秩宇 发表于 2013-6-28 16:47
写代码要细心啊,取十位的时候算法不对 b =m/10%10;
而且你这个是只求三位数的水仙花数,m的范围不应该小 ...

不对啊...算法没错啊.我刚才算了下,没错...
回复 使用道具 举报
秩宇 发表于 2013-6-28 16:47
写代码要细心啊,取十位的时候算法不对 b =m/10%10;
而且你这个是只求三位数的水仙花数,m的范围不应该小 ...

好吧 脑袋不是很好使...我看1000没输出 于是就加了个0...没改回来...还有abc的算法我完全照搬答案的..所以有没错我不知道..
回复 使用道具 举报
王靖远 发表于 2013-6-28 16:52
可以用了 开始忘了1对应的char类型值不是1了

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

如果要选择返回的话,还必须用容器存起来
这句话我没懂...具体怎么做?
回复 使用道具 举报
秩宇 发表于 2013-6-28 16:57
在字符转换成数字的时候,是按照ASCII码转换的,数字的ASCII码是从48开始的,所以在转换之后要减去48才是 ...

哦 原来这样
回复 使用道具 举报
王靖远 发表于 2013-6-28 16:26
class Debug9
{
        public static void main(String[] args)

在字符转换成数字的时候,是按照ASCII码转换的,数字的ASCII码是从48开始的,所以在转换之后要减去48才是原来的数字值。
回复 使用道具 举报
  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 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是一个水仙花数
请按任意键继续. . .
回复 使用道具 举报
郑先明 发表于 2013-6-28 15:54
好  我改了  可是还是什么都没有输出  这又是为什么....我按照代码的顺序走了一遍 应该是会输出的啊... ...

写代码要细心啊,取十位的时候算法不对 b =m/10%10;
而且你这个是只求三位数的水仙花数,m的范围不应该小于10000.
回复 使用道具 举报
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);
                }
        }
}
我写的代码也打印不出来。暂时还没想到什么原因
回复 使用道具 举报
如果不改返回类型就要在方法里面写上return m;再在主函数main里面System.out.println(ShuiXiam.show());还有你的主函数里面用对象调用静态方法是不正规的,是类名调用静态方法,如果在.net里面对象是不可以调用静态方法的。
回复 使用道具 举报
你的返回类型是int你没有返回,也是错的,如果想不返回的话,把方法名前面的int改为void即可,
回复 使用道具 举报
第九行符合是不是写错了。还有153%100=53,所以算法应该也是有问题的,不能进入你的if条件,再仔细想想,如果想不出再问我,我告诉你做。
回复 使用道具 举报
秩宇 发表于 2013-6-28 16:04
打错字了,第一行,shuixian 打成 shuixiam 了

嗯.很细心啊~不过这个刚才我改返回值类型的时候看到了,但是现在问题不在这 ,而是我把返回值类型改成void,然后编译运行还是什么都没输出,为什么呢!
回复 使用道具 举报
秩宇 中级黑马 2013-6-28 16:04:03
8#
郑先明 发表于 2013-6-28 15:54
好  我改了  可是还是什么都没有输出  这又是为什么....我按照代码的顺序走了一遍 应该是会输出的啊... ...

打错字了,第一行,shuixian 打成 shuixiam
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马