繁体   English   中英

如何计算java中一个数字的数字总和?

[英]how to calculate the sum of digits for a number in java?

我有一个小功能,要求用户输入一个正数,而不是给他倒数并计算其位数之和。

代码的第一部分工作正常,但数字总和返回零如何解决此问题?

我知道必须输入一次用户输入,而不是两次,因此如何解决此功能,因为它不占用用户输入。

码:

package exam3Programing1_20_12_2010;

import java.util.Arrays;
import java.util.Scanner;

public class Question3 {

    private int num;
    private int sum;
    private int reverse;


    public int fill() {

        System.out.println("enter the number");
        Scanner in = new Scanner(System.in);
        num = in.nextInt();

        if (num < 0) {
            System.out.println("enter a positive number");
        }
        while (num != 0) {
            reverse = reverse * 10;
            reverse = reverse + num % 10;
            num = num / 10;
        }
        System.out.println("your reverse number is : " + reverse);
        return num;
    }

    public void sumDigits() {

        while (num != 0) {
            sum = sum + num % 10;
            num = num / 10;
        }

        System.out.println("sum of digits: " + sum);
    }

    public static void main(String[] args) {

        Question3 q3 = new Question3();
        q3.fill();
        q3.sumDigits();
    }
}

输出

enter the number
1234
your reverse number is : 4321
sum of digits: 0

更新的代码

package exam3Programing1_20_12_2010;

import java.util.Arrays;
import java.util.Scanner;

public class Question3 {

    private int num;
    private int sum;
    private int reverse;


    public int fill() {

        int myNumber = num;
        System.out.println("enter the number");
        Scanner in = new Scanner(System.in);
        myNumber = in.nextInt();

        if (myNumber < 0) {
            System.out.println("enter a positive number");
        }
        while (myNumber != 0) {
            reverse = reverse * 10;
            reverse = reverse + myNumber % 10;
            myNumber = myNumber / 10;
        }
        System.out.println("your reverse number is : " + reverse);
        return num;
    }

    public void sumDigits() {

        while (num != 0) {
            sum = sum + num % 10;
            num = num / 10;
        }

        System.out.println("sum of digits: " + sum);
    }

    public static void main(String[] args) {

        Question3 q3 = new Question3();
        q3.fill();
        q3.sumDigits();
    }
}

更新输出

enter the number
1234
your reverse number is : 4321
sum of digits: 0

这是因为您在反向和求和方法中共享相同的数字,并且当您第一次调用反向方法时,您会继续将数字除以0,因此在求和方法时,您的数字为1,因此总和为0。

为了纠正这一点,我建议您定义一个名为mynumber的局部变量,例如:

public int fill() {

    System.out.println("enter the number");
    Scanner in = new Scanner(System.in);
    num = in.nextInt();

    if (num < 0) {
        System.out.println("enter a positive number");
    }
    int myNumber = num;  
    while (myNumber != 0) {
        reverse = reverse * 10;
        reverse = reverse + myNumber % 10;
        myNumber = myNumber / 10;
    }
    System.out.println("your reverse number is : " + reverse);
    return num;
}

OUTPUT:
enter the number
1234
your reverse number is : 4321
sum of digits: 10

您以一种无济于事的方式重用num 尝试为方法定义局部变量,并仅在需要它们的地方使用实例字段。

还要注意, fill()方法返回的是您未使用的值。

这表明您应该完全删除num字段。 然后将局部变量num添加到fill()方法,然后更改sumDigits()的签名以采用参数:

public void sumDigits(int num)

现在您的代码结尾

Question3 q3 = new Question3();
int n = q3.fill();
q3.sumDigits(n);

您的num成员通过读取数字并使用以下循环进行初始化:

    while (num != 0) {
        reverse = reverse * 10;
        reverse = reverse + num % 10;
        num = num / 10;
    }

您正在计算reverse的值,但是您在此过程中修改了num的值。 循环之后, num的值是0,之后再尝试使用它时,您已经失去了它的值。 尝试改为执行此操作:

    reverse = 0;
    int tempNum = num;
    while (tempNum != 0) {
        reverse = reverse * 10;
        reverse = reverse + tempNum % 10;
        tempNum = tempNum / 10;
    }

此代码使用0 reverse初始化,将num的值存储为临时值, tempNum在进程中修改tempNum ,因此num的值保持不变,以后可以使用它。

我已经稍微更新了您的代码并给出了正确的答案:

导入java.util.Arrays; 导入java.util.Scanner;

公共课Question3 {

private int num;
private int sum;
private int reverse;


public int fill() {

    System.out.println("enter the number");
    Scanner in = new Scanner(System.in);
    num = in.nextInt();

    if (num < 0) {
        System.out.println("enter a positive number");
    }
    while (num != 0) {
        reverse = reverse * 10;
        reverse = reverse + num % 10;
        num = num / 10;
    }
    System.out.println("your reverse number is : " + reverse);
    return reverse;
}

public void sumDigits(int number) {
    num = number;

    while (num != 0) {
        sum = sum + num % 10;
        num = num / 10;
    }

    System.out.println("sum of digits: " + sum);
}

public static void main(String[] args) {

    Question3 q3 = new Question3();
   int number =  q3.fill();
    q3.sumDigits(number);
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM