编写一个 Java 程序,使用 For 循环、While 循环、函数和递归来查找数字的各位数字之和。
Java 程序使用 While 循环查找数字的各位数字之和
此程序允许用户输入任何正整数。然后,它将给定数字分解为单独的数字,并使用 Java While 循环将这些单独的数字相加(求和)。
package SimplerPrograms;
import java.util.Scanner;
public class SumofDigitsUsingWhile {
private static Scanner sc;
public static void main(String[] args) {
int Number, Reminder, Sum = 0;
sc = new Scanner(System.in);
System.out.println("Please Enter any Number: ");
Number = sc.nextInt();
while(Number > 0) {
Reminder = Number % 10;
Sum = Sum+ Reminder;
Number = Number / 10;
}
System.out.format("Sum of the digits of Given Number = %d", Sum);
}
}

在此程序中,我们首先声明了三个整数变量:Number、Remainder 和 Sum = 0。前两个语句将提示用户输入任何正整数。然后,该数字被赋给 Number 变量。
接下来,While 循环中的条件将确保给定数字大于 0(表示正整数且大于 0)。
让我们逐次迭代地查看此 while 循环的工作原理。
从上面的 Java 数字各位之和屏幕截图中,用户输入的值为:Number= 9876。
第一次迭代:第一次迭代时,Number = 9876 且 Sum = 0。这意味着 While (9876 > 0) 为 TRUE。因此,程序将开始执行 while 循环中的语句。
Reminder = Number% 10
Reminder = 9876 % 10 = 6
接下来,我们需要找到 Sum
Sum= Sum+ Reminder
Sum= 0 + 6 = 6
最后,我们需要从用户指定的数字中删除最后一位数字
Number = Number/ 10
Number= 9876 / 10 = 987
数字之和程序的第二次迭代
从第一次迭代开始,Number 和 Sum 的值都已更改为 Number = 987 且 Sum = 6。这意味着 While (987 > 0) 为 TRUE。因此,程序将开始执行 while 循环中的语句。
Reminder = 987 % 10 = 7
Sum= 6 + 7 = 13
Number= 987 / 10 = 98
第三次迭代
从 Java 数字之和程序的第二次迭代来看,Number= 98 且 Sum= 13。这意味着 While (98 > 0) 为 TRUE。
Reminder = 98 % 10 = 8
Sum= 13 + 8 = 21
Number= 98 / 10 = 9
第四次迭代
从第三次迭代开始,Number = 9 且 Sum = 21。这意味着 while (9 > 0) 为 TRUE。
Reminder = 9 % 10 = 9
Sum= 21 + 9 = 30
Number= 9 / 10 = 0
这里 Number= 0。因此,while 循环条件将失败。
最后一个 System.out.format 语句将 Sum 变量打印为输出。因此,给定变量的输出为 9876 = 30。
Java 程序使用 For 循环查找数字的各位数字之和
此程序允许用户输入任何正整数。然后,它将给定数字分解为单独的数字,并使用 For 循环查找这些数字的总和。
package SimplerPrograms;
import java.util.Scanner;
public class UsingFor {
private static Scanner sc;
public static void main(String[] args) {
int Number, Reminder, total = 0;
sc = new Scanner(System.in);
System.out.println("Please Enter any Number: ");
Number = sc.nextInt();
for (total = 0; Number > 0; Number = Number/10){
Reminder = Number % 10;
total = total + Reminder;
}
System.out.format("Sum of the digits = %d", total);
}
}
我们只是将上面示例中的 While 循环替换为 For 循环。请参阅 Java For Loop。

Java 程序使用函数查找数字的各位数字之和
此 Java 程序允许用户输入任何正整数值。接下来,我们将用户输入的数值传递给我们创建的方法。
在此用户定义函数中,此数字之和程序将使用 For 循环将给定数字分解为单个项并相加。
package SimplerPrograms;
import java.util.Scanner;
public class UsingMethods {
private static Scanner sc;
private static int total = 0;
public static void main(String[] args) {
int Num;
sc = new Scanner(System.in);
System.out.println("Please Enter any Value: ");
Num = sc.nextInt();
total = SOD(Num);
System.out.format("Sum of the digits = %d", total);
}
public static int SOD(int Num) {
int Reminder;
for (total = 0; Num > 0;Num = Num/10) {
Reminder = Num % 10;
total = total+ Reminder;
}
return total;
}
}

在此数字之和程序中,我们正在调用 SOD(Number) 方法。众所周知,该方法将返回一个整数值,因此我们将该返回值赋给 Sum。
total = SOD(Num);
当编译器到达 SOD(Num) 行时,编译器将立即跳转到下面的函数。
public static int SOD(int Num) {
我们已经在上面的示例中解释了逻辑。
Java 程序使用递归查找数字的各位数字之和
此示例允许用户输入任何正整数。然后,程序将通过递归调用函数将给定数字分解为单独的数字并将这些数字相加作为 Sum。
在此程序中,我们使用面向对象编程来划分代码。为此,首先,我们将创建一个包含递归反转整数方法的类。
package SimplerPrograms;
public class SoDigi {
int t = 0, r;
public int SDCalc(int n) {
if(n > 0) {
r = n % 10;
t = t + r;
SDCalc(n / 10);
return t;
}
else {
return 0;
}
}
}
在主程序中,我们将创建上述类的实例并调用方法。
package SimplerPrograms;
import java.util.Scanner;
public class UsingRecursion {
private static Scanner sc;
public static void main(String[] args) {
int n, t = 0;
sc = new Scanner(System.in);
System.out.println("\n Please Enter any : ");
n = sc.nextInt();
SoDigi sd = new SoDigi();
t = sd.SDCalc(n);
System.out.format("\n Sum of the digits = %d", t);
}
}

SoDigi 类分析
在此 Java 数字之和程序示例中,我们在该类中定义了一个函数。下面的函数将接受一个整数值作为参数值并返回一个整数值。
public int SDCalc(int n) {
让我们来看上面指定的函数中的If Else 语句。如果 (Number > 0),它将检查给定数字是否大于零。
- 如果条件为 True,则 Java 编译器将返回给定数字的和。这里,我们在 If 块中使用 SDCalc(Number / 10) 语句,因为它有助于使用更新后的值递归调用函数。如果您遗漏此语句,则在完成第一行后,它将终止。例如,Number = 4567 将返回 7。
- 如果条件为 False,编译器将返回 Sum 为零。
Main 类分析
在数字之和程序的 main 类中,我们创建了 SoDigi 类的实例/对象。
SoDigi sd = new SoDigi();
接下来,我们正在调用 SDCalc(Number) 方法。我们都知道该方法将返回一个整数值。因此,我们将该返回值赋给 Sum。
t = sd.SDCalc(n);
评论已关闭。