在java中查找数字是否为Armstrong(BlueJ)

时间:2017-01-21 18:30:47

标签: java

已定义类HiArm以查找给定数字是否为阿姆斯壮数字。

  

阿姆斯特朗号是一个等于其立方体总和的数字   数字,例如0,1,153,370,371,407等。

会员职能:

  • HiArm() - 将0分配给n的构造函数
  • HiArm(int a) - 用于指定n的构造函数
  • int sumArm() - 查找并返回数字位数的总和
  • void isArm() - 调用sumArm()并打印,如果数字是Armstrong

编写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.我哪里出错?

2 个答案:

答案 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