黑马程序员技术交流社区

标题: 来帮我看看我的代码,没报错,可是没有得到我想要的结果! [打印本页]

作者: 月生春    时间: 2014-1-17 12:05
标题: 来帮我看看我的代码,没报错,可是没有得到我想要的结果!
本帖最后由 月生春 于 2014-1-18 23:18 编辑

我是看了前面一位同学的问题:打印水仙花的问题 ?   他的问题我没能帮其解决,到给自己带来了问题,求帮助!


打印水仙花数!  所谓的“水仙花”是指一个三位数,其个位数的立方和等于该数本身。例如:153是一个水仙花数,因为153=(1的立方+5的立方+3的立方)。


我用我自己的方法能够打印任意一段数字内的水仙花数,也就是你输入一位数,它就会将0到这为数之间的水仙花数打印出来,我觉得我代码没什么问题,可为什么得不到结果呢?


代码如下:
package wsc.itheima.com;
import java.util.ArrayList;
import java.util.Iterator;
public class MyTest3 {
  
                         public static void main(String[] args) {
                                     PrintNarcissus(1000);
                         }
                         private static void PrintNarcissus(int num){              //打印水仙花数的方法
                                for(int x=0;x<=num;x++){                                 //对传入的数遍历
                                 ArrayList<Object> al=new ArrayList<Object>();        // 定义集合
                                 int len=0;                                                                     
                                 String s = String.valueOf(x);//将整形转化为字符串      //转换成字符串
                                 for(int y=0;y<s.length();y++){                                      //遍历
                                 int n=Integer.parseInt(s.substring( y, y+1));                  //截取每一位上的数,转换为整数
                                 al.add(n*n*n);                                                                 //将其立方值添加到集合中
   
                           }
                            Iterator<Object> it=al.iterator();                                    //迭代
                               while(it.hasNext()){
                                len+=(Integer)it.next();                                               //将其每位数上的立方值添加赋给len
                           }
                                if(len==num){                                                             //判断是否符合情况,打印出来
                                System.out.println(num);
                          }
                  }
  }
}


作者: 杨道红    时间: 2014-1-17 12:22
本帖最后由 杨道红 于 2014-1-17 12:27 编辑

你的len定义在for循环里,你把len放到外面试试~看错了,你的层次看到好乱。。

作者: 七录斋    时间: 2014-1-17 12:29
你之前代码都没错,只是你最后输出的时候弄错了,你遍历的是num以内的所有数字,可是你输出的总是num这一个数,而num这个数又恰好不是水仙花数,所以……
你可以试着这样改写代码:
if (len == x) { // 判断是否符合情况,打印出来
                                System.out.println(x);
                  }

个人拙见,仅供参考,如有错误,还望赐教。
作者: 七录斋    时间: 2014-1-17 12:32
还有就是,我们一般说的水仙花数位数是大于等于3的,所以你在遍历的时候可以从100开始,这样在输出的时候就不会有0和1了。

个人拙见,仅供参考,如有错误,还望赐教。
作者: 杨道红    时间: 2014-1-17 12:42
  1. public class Test1 {
  2.           
  3.     public static void main(String[] args) {
  4.         PrintNarcissus(1000);
  5.     }
  6.     public static void PrintNarcissus(int num){              //打印水仙花数的方法
  7.         
  8.         for(int x=100;x<=num;x++){             //水仙花数为三位数,从100开始                    //对传入的数遍历
  9.                 int len=0;
  10.                 String s = String.valueOf(x);//将整形转化为字符串      //转换成字符串
  11.                 ArrayList<Object> al=new ArrayList<Object>();        // 定义集合
  12. //                System.out.println(s);
  13. //                System.out.println(s.length());
  14.                        for(int y=0;y<s.length();y++){                                      //遍历
  15.                                String str = s.substring(y,y+1);
  16.                                int n=Integer.parseInt(str);                  //截取每一位上的数,转换为整数
  17.                                al.add(n*n*n);                                                                 //将其立方值添加到集合中
  18.                        }
  19.                 Iterator<Object> it=al.iterator();                                    //迭代
  20.                 while(it.hasNext()){
  21.                    len+=(Integer)it.next();                                               //将其每位数上的立方值添加赋给len
  22.                 }
  23.                 if(len==x){                                                             //判断是否符合情况,打印出来
  24.                              //这里的判断条件改一下
  25.                         System.out.println(len);
  26.                        }
  27.         }
  28.     }
  29. }
复制代码

代码帮你改了几部分,首先水仙花数为三位数,for从100开始
其次你最后的判断条件有问题,判断len是否和X相等。你再试试。
加油!
作者: 李跃峰    时间: 2014-1-17 12:57
if(len==num){                                                             //判断是否符合情况,打印出来
     System.out.println(num);
}
这句错了,你不能跟num比,num是你输入的数字,你用0-1000中每一个数的每位数的立方和跟你输入的值比。。。肯定算不出结果啊。。。应该是用0-1000中每一个数的每位数的立方和这个数比,所以你应该是

if(len==x){                                                             //判断是否符合情况,打印出来
     System.out.println(x);
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2