回 帖 发 新 帖 刷新版面

主题:问题 输出水仙花数

水仙花数是三位数,他们的各个数字的立方和等于这个三位数本身
例如:371 = 3*3*3 + 7*7*7 + 1*1*1

代码如下

public class TestFlower
{
    public static void main(String[] args)
    {
        int i = 100;
        boolean f = false;
        while(i <= 999)
        {
            int a = i%10;
            int b = (i%100-a)/10;
            int c = (i - i%100)/100;
            if(i == a*a*a + b*b*b + c*c*c)
            {
                f = true; 
                System.out.print(i + " ");                
            }
            if(f == false)
            {
                continue;
            }
            i++;
        }
    }
}

为什么输出不了结果呢
哪个高手给解释一下错误 谢谢拉[/size][/size][em18][/size]

回复列表 (共2个回复)

沙发

先不说水仙花数是什么东西,那个a,b,c就不管了,现在只是分析一下你的程序为什么会卡在那里不走了。
首先分析一下是不是循环是死的,估计98%是这种情况,当不满足第一个if的时候就会执行第二个if,这个时候你直接continue了,也就是说当程序看到continue的时候就直接跳到循环初开始重新循环,于是当你的i=100的时候就直接不满足第一个if,然后跳出去重新循环,i++这句没有执行到,所以是个死循环。
于是解决的方案就出来了:
先让i动起来再判断,即把i++那到第二个if的前面去;
再来优化一下
当你把i++拿到第二个if的前面去了之后,这个Boolean变量f就基本上失去了他的意义了,因为无论怎样循环都是可以结束的,除非你只希望拿到第一 个数就就退出,这样的话就应该这么写了
Boolean f = true;
while(f) {
   ....
   if(....) {
      ...
      f = false;
   }
}

板凳

楼主,想得太复杂了,其实问题很easy,就是从100-999中找出符合条件的数字,打印出来

public class TestFlower
{
    public static void main(String[] args)
    {
        int i = 100;
       
        while(i <= 999)
        {
            int a = i%10;
            int b = (i%100-a)/10;
            int c = i/100;
            if(i == a*a*a + b*b*b + c*c*c)
            {
                 System.out.print(i+" ");             
            }
            i++;
        }
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册