[英]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.