我希望程序打印出每个数字,每个数字与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);
答案 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