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