简体   繁体   English

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

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

i have a small function that ask user to enter a positive number than give him the reverse and calculate the sum of its digits. 我有一个小功能,要求用户输入一个正数,而不是给他倒数并计算其位数之和。

the first part of code work fine but the sum of digits return zero how to solve this problem ? 代码的第一部分工作正常,但数字总和返回零如何解决此问题?

i know that the user input must be asked one time to be entered and not twice so how to fix this function because it do not take the user input. 我知道必须输入一次用户输入,而不是两次,因此如何解决此功能,因为它不占用用户输入。

code: 码:

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();
    }
}

output 输出

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

the updated code 更新的代码

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();
    }
}

updated output 更新输出

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

That's because you are sharing same number in both reverse and sum method and when you first call reverse method you go on dividing the number until 0 and hence when you come to sum method, your number is 1 and hence sum is 0. 这是因为您在反向和求和方法中共享相同的数字,并且当您第一次调用反向方法时,您会继续将数字除以0,因此在求和方法时,您的数字为1,因此总和为0。

Inorder to rectify this, i would suggest you define local variable called mynumber like: 为了纠正这一点,我建议您定义一个名为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

You're reusing num in a rather unhelpful way. 您以一种无济于事的方式重用num Try to define local variables for methods, and use instance fields only where you need them. 尝试为方法定义局部变量,并仅在需要它们的地方使用实例字段。

Notice also that your fill() method returns a value that you're not using. 还要注意, fill()方法返回的是您未使用的值。

This suggests that you should remove your num field entirely. 这表明您应该完全删除num字段。 Then add a local variable num to your fill() method, and then change the signature of sumDigits() to take a parameter: 然后将局部变量num添加到fill()方法,然后更改sumDigits()的签名以采用参数:

public void sumDigits(int num)

Now your code at the end becomes 现在您的代码结尾

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

Your num member initializes by reading a number and with this loop: 您的num成员通过读取数字并使用以下循环进行初始化:

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

you are calculating the reverse , but you modify the value of num in the process. 您正在计算reverse的值,但是您在此过程中修改了num的值。 After the loop, num 's value is 0 and later, when you try to use it, you have already lost its value. 循环之后, num的值是0,之后再尝试使用它时,您已经失去了它的值。 Try to do this instead: 尝试改为执行此操作:

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

This code initializes reverse with 0, stores the value of num as a temporary value and you modify tempNum in the process, thus the value of num is left unchanged and you can use it later. 此代码使用0 reverse初始化,将num的值存储为临时值, tempNum在进程中修改tempNum ,因此num的值保持不变,以后可以使用它。

i have somewhat updated your code and gives correct answer: 我已经稍微更新了您的代码并给出了正确的答案:

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

public class Question3 { 公共课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