黑马程序员技术交流社区
标题:
来帮我看看我的代码,没报错,可是没有得到我想要的结果!
[打印本页]
作者:
月生春
时间:
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
public class Test1 {
public static void main(String[] args) {
PrintNarcissus(1000);
}
public static void PrintNarcissus(int num){ //打印水仙花数的方法
for(int x=100;x<=num;x++){ //水仙花数为三位数,从100开始 //对传入的数遍历
int len=0;
String s = String.valueOf(x);//将整形转化为字符串 //转换成字符串
ArrayList<Object> al=new ArrayList<Object>(); // 定义集合
// System.out.println(s);
// System.out.println(s.length());
for(int y=0;y<s.length();y++){ //遍历
String str = s.substring(y,y+1);
int n=Integer.parseInt(str); //截取每一位上的数,转换为整数
al.add(n*n*n); //将其立方值添加到集合中
}
Iterator<Object> it=al.iterator(); //迭代
while(it.hasNext()){
len+=(Integer)it.next(); //将其每位数上的立方值添加赋给len
}
if(len==x){ //判断是否符合情况,打印出来
//这里的判断条件改一下
System.out.println(len);
}
}
}
}
复制代码
代码帮你改了几部分,首先水仙花数为三位数,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