[英]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. 我知道必须输入一次用户输入,而不是两次,因此如何解决此功能,因为它不占用用户输入。
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
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.