已定义类HiArm以查找给定数字是否为阿姆斯壮数字。
阿姆斯特朗号是一个等于其立方体总和的数字 数字,例如0,1,153,370,371,407等。
会员职能:
编写main()方法输入一个数字并调用上面的函数
Ps: - 我的approch: -
import java.util.*;
class HiArm{
int n;
int d;
int b;
int c;
int g=n;
HiArm(){
n=0;
}
HiArm(int a){
n=a;
}
int sumArm(){
d = (int)(Math.log10(n) + 1);
c=0;
b=0;
for(int i=1;i<=d;i++){
b=g%10;
b=b*b*b;
c=c+b;
g=(g-(g%10))/10;
}
return c;
}
void isArm(){
sumArm();
if(c==n){
System.out.println("The number is Armstrong");
}
else{
System.out.println("The number is not Armstrong");
}
}
public static void main(String args[]){
Scanner sc =new Scanner(System.in);
System.out.println("Enter a number to check whether it is an Armstrong or not");
int k=sc.nextInt();
HiArm o = new HiArm(k);
o.isArm();
}
}
函数sumArm()
总是返回0.我哪里出错?
答案 0 :(得分:0)
我对您的代码进行了一些更改,让我解释一下;) import java.util。*; HiArm等级{
int value;
int sum;
HiArm(){
value=0;
}
HiArm(int a){
value=a;
}
int sumArm(){
sum=0;
for(char digit : String.valueOf(value).toCharArray()){
sum += Math.pow(Integer.valueOf(digit)-48, String.valueOf(value).toCharArray().length);
}
return sum;
}
boolean isArm(){
sumArm();
/*
if(sum==value){
System.out.println("The number is Armstrong");
}
else{
System.out.println("The number is not Armstrong");
}
*/
return sum==value;
}
public static void main(String args[]){
Scanner sc =new Scanner(System.in);
System.out.println("Enter a number to check whether it is an Armstrong or not");
int k=sc.nextInt();
HiArm o = new HiArm(k);
System.out.println(o.isArm());
}
}
首先你的错误:初始化或你的g是在构造函数之前制作的,所以它的值为null 然后我允许我更改参数的名称,你最好每次都这样做,以便快速知道哪个参数正在做什么 然后我在每个数字上做了一个循环,我将值转换为一个字符串,然后在一个char数组中,我对它进行迭代,对于每一个我计算数字^ 3并将其加到总和中(“-48”是因为他们的ASCII码“),
答案 1 :(得分:0)
失败的原因是g
因为n
被分配到0
,甚至在调用构造函数之前都是g
。
在n
函数中将变量sumArm()
重新分配给int sumArm(){
d = (int)(Math.log10(n) + 1);
c=0;
b=0;
g=n
for(int i=1;i<=d;i++){
b=g%10;
b=b*b*b;
c=c+b;
g=(g-(g%10))/10;
}
return c;
}
可以解决问题。
wait_timeout