簡體   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