Java打印数学序列中的所有数字

时间:2015-09-26 20:18:02

标签: java

我希望程序打印出每个数字,每个数字与3加在一起的数字将等于该数字。例如,数字153:1^3 + 5^3 + 3^3 = 153.

这是代码,但我不知道它为什么不起作用。

编辑:我siffra++;的原因是因为我希望它将所有数字都测试到500。这就是我现在所拥有的,但它现在仍然有用(在JOptionPane中没有显示任何内容):

int siffra = 153;

String allaSiffror = "";
int count = 0;

if (siffra < 500) { 
    for (int i = 0; i < 3; i++) {
        String siffran = Integer.toString(siffra);
        String selekt = siffran.substring(i,i+1);
        int selekta = Integer.parseInt(selekt);
        count += Math.pow(selekta,3);
            if (count == siffra) {
                System.out.println(count);
                allaSiffror += count + " ";
                count = 0;
            } 
            siffra++;
    }
}


JOptionPane.showMessageDialog(null, allaSiffror);

2 个答案:

答案 0 :(得分:0)

问题是这部分是在循环之外:

String siffran = Integer.toString(siffra);
int count = 0;

所以你的计数会将每个数字加到前一个数字上,并且因为你增加了siffra但是在siffran上工作 - 你一直在检查100

除此之外,我还要接受@ Sluth的建议 - 不需要来回转换为字符串和int - 使用数学mod和%来获取数字

答案 1 :(得分:0)

这些数字被称为阿姆斯特朗数字
首先是你的错误
 1)你正在计数(我假设的数量)0 只有如果你找到数字匹配你的条件如153 ...如果如果数字不匹配那么应该&对于新号码,计数/总和为零  2)其次你说的是,你想要测试数字直到500,但你正在使用if条件只能被激活一次 ...所以在那里使用循环

很少有建议我会做 1)使用StringBuilder而不是使用String 2)而不是将整数转换为字符串,然后使用substring直接使用整数

所以修改代码如下

 int siffra = 153;

 StringBuilder allaSiffror = new StringBuilder();
 int count;

 while(siffra<500){
     count = 0;
     int temp = siffra;

     int num;
     while(temp>0){
       num=temp%10;  
       temp=temp/10;
       count += Math.pow(num,3);  
     }

     if (count == siffra){
       System.out.println(count);
       allaSiffror.append(count + " ");
     } 
     siffra++;
 }
System.out.println(allaSiffror.toString());


JOptionPane.showMessageDialog(null, allaSiffror.toString());
  

更新o / p如下:

153
370
371
407
153 370 371 407