使用 While 循环、For 循环和函数在 Java 编程语言中编写一个完美数程序。我们还将展示 1 到 n 之间的完美数。
任何数都可以是 Java 完美数,如果它的正约数(不包括数字本身)之和等于该值。例如,28 是一个完美数,因为 28 可以被 1、2、4、7、14 和 28 整除,这些值的总和是 1 + 2 + 4 + 7 + 14 = 28。请记住,我们必须排除数字本身。这就是为什么我们没有在这里添加 28。一些 Java 完美数是 6、28、496、8128 和 33550336 等。
使用 For 循环的 Java 完美数程序
此完美数程序允许用户输入任何数字。接下来,此程序将使用 For 循环检查该数字是否为完美数。
// Write Perfect Number program using For Loop */
package FrequentPrograms;
import java.util.Scanner;
public class PerfectNumberUsingFor {
private static Scanner sc;
public static void main(String[] args) {
int i, Number, Sum = 0 ;
sc = new Scanner(System.in);
System.out.println("\n Please Enter any Number: ");
Number = sc.nextInt();
for(i = 1 ; i < Number ; i++) {
if(Number % i == 0) {
Sum = Sum + i;
}
}
if (Sum == Number) {
System.out.format("\n% d is a Perfect Number", Number);
}
else {
System.out.format("\n% d is NOT a Perfect Number", Number);
}
}
}

在此 Java 程序中的完美数中,首先,我们声明了三个整数变量 i、Number 和 Sum = 0。以下语句将要求用户输入任何正整数。然后,该数字被赋给变量 Number。
System.out.println("\n Please Enter any Number: ");
Number = sc.nextInt();
在下一行,我们有 For 循环,并且 for 循环中的条件 (i < Number) 将确保 i 不会超过数字。在 For 循环中,我们使用 If Condition 来检查 Number 是否可以被 i 值完美整除。
- 如果数字可以被 i 整除,那么 i 将被加到 Sum 中。
- 如果数字不能被 i 整除,那么 i 将增加一,然后检查下一个值。
请参阅 Java If Else 语句文章以了解 If else 语句
for(i = 1 ; i < Number ; i++) {
if(Number % i == 0) {
Sum = Sum + i;
}
}
让我们逐次迭代地看看这个 for 循环的工作原理。从上面的 Java 完美数示例屏幕截图中,用户输入的值是:Number = 6。
第一次迭代
对于第一次迭代,Number = 6,Sum = 0,i = 1
- For 循环中的条件 (1 < 6) 为 TRUE。因此,程序将开始执行 For 循环内的语句
- 在 for 循环中,我们有 If Else 语句,并且条件 if (6 % 1 == 0) 为 TRUE,因此,Sum = Sum + i
- Sum = 0 + 1 = 1
- 最后,i 将增加 1。请参阅 Java 中的递增和递减运算符文章以了解 ++ 符号。
第二次迭代
从第二次迭代开始,Sum 和 i 的值都已更改为 Sum = 1 和 i = 2
- For 循环中的条件 (2 < 6) 为 TRUE。
- 在 for 循环中,if 条件 if (6 % 2 == 0) 为 TRUE。因此,Sum = Sum + i
- Sum = 1 + 2 = 3
- 最后,i 值增加 1。
第三次迭代
从 Java 完美数程序的第三次迭代开始,Sum = 3 和 i = 3
- For 循环中的条件 (3 < 6) 为 TRUE。
- 在 for 循环中,if 条件 if (6 % 3 == 0) 为 TRUE。因此,Sum = Sum + i
- Sum =3 + 3 = 6
- 最后,i 值增加 1。
第四次和第五次迭代
对于第四次和第五次迭代,if 条件将失败。
- if (6 % 4 == 0) 为 FALSE
- if (6 % 5 == 0) 为 FALSE
第六次迭代
对于第六次迭代,i 的值变为 6,这意味着 for 循环中的条件将失败 (6 < 6)。因此,Javac 编译器将终止 for 循环。
在下一行,我们有一个 If 条件来检查 Sum 变量中的值是否与给定的 Number 完全相等。
if (Sum == Number)
如果条件 (Sum == Number) 为 TRUE,则执行下面的 System.out.format 语句
System.out.format("\n% d is a Perfect Number", Number);
如果条件 (Sum == Number) 为 FALSE,则执行下面的 System.out.format 语句
System.out.format("\n% d is NOT a Perfect Number", Number);
对于此示例 (Sum == Number) 为 True。因此,给定的 Number 是完美数
使用 While 循环的 Java 完美数程序
此完美数程序允许用户输入任何数字。使用此数字,此程序将使用 While 循环检查用户输入是否为完美数。
package FrequentPrograms;
import java.util.Scanner;
public class PerfectNumberUsingWhile {
private static Scanner sc;
public static void main(String[] args) {
int i = 1, Number, Sum = 0 ;
sc = new Scanner(System.in);
System.out.println("Please Enter any Number: ");
Number = sc.nextInt();
while(i < Number) {
if(Number % i == 0) {
Sum = Sum + i;
}
i++;
}
if (Sum == Number) {
System.out.format("%d is a Perfect Number", Number);
}
else {
System.out.format("%d is NOT a Perfect Number", Number);
}
}
}
在此示例中,我们没有做任何特殊的事情。我们只是将完美数程序中的 For 循环替换为 While 循环。如果您发现理解 While 循环的功能有困难,请参考 While 循环文章。
使用 while 循环输出的完美数
Please Enter any Number:
496
496 is a Perfect Number
使用函数的 Java 完美数程序
此完美数程序允许用户输入任何整数值,我们将把用户输入的值传递给我们创建的方法。
在此用户定义函数中,此程序将使用 For 循环检查用户输入是否为完美数。
package FrequentPrograms;
import java.util.Scanner;
public class PerfectNumberUsingMethod {
private static Scanner sc;
public static void main(String[] args) {
int Number;
sc = new Scanner(System.in);
System.out.println("Please Enter any Number: ");
Number = sc.nextInt();
PerfectNumber (Number);
}
public static void PerfectNumber (int Number) {
int i, Sum = 0;
for(i = 1 ; i < Number ; i++) {
if(Number % i == 0) {
Sum = Sum + i;
}
}
if (Sum == Number) {
System.out.format("%d is a Perfect Number", Number);
}
else {
System.out.format("%d is NOT a Perfect Number", Number);
}
}
}
使用函数输出的完美数
Please Enter any Number:
28
28 is a Perfect Number
在此,我们的函数被声明为 void,并且不返回任何值。因此,我们正在调用函数。
PerfectNumber (Number);
当编译器在 main() 程序中到达 PerfectNumber(Number) 行时,Javac 编译器将立即跳转到下面的函数
public static void PerfectNumber (int Number) {
我们已经在上面的示例中解释了逻辑。
使用 OOPS 的 Java 完美数程序
在此 Java 程序中,我们将代码使用面向对象编程进行划分。为此,首先,我们将创建一个类,其中包含一个查找因子之和的方法。
package FrequentPrograms;
public class PerfectNumber {
int i, Sum = 0;
public int FindPerfectNumber (int Number) {
for(i = 1; i < Number; i++) {
if(Number % i == 0) {
Sum = Sum + i;
}
}
return Sum;
}
}
在完美数的 Main 程序中,我们将创建上述类的实例并调用方法
package FrequentPrograms;
import java.util.Scanner;
public class PerfectNumberUsingClass {
private static Scanner sc;
public static void main(String[] args) {
int Number, Sum = 0;
sc = new Scanner(System.in);
System.out.println("Please Enter any Number: ");
Number = sc.nextInt();
PerfectNumber pn = new PerfectNumber();
Sum = pn.FindPerfectNumber(Number);
if (Sum == Number) {
System.out.format("%d is a Perfect Number", Number);
}
else {
System.out.format("%d is NOT a Perfect Number", Number);
}
}
}
Please Enter any Number:
8128
8128 is a Perfect Number
PerfectNumber 类分析
在此 Java 完美数程序中,我们创建了一个函数来查找给定数字的因子并对这些因子求和。我们已经在上面的示例中解释了逻辑。
Main 类分析
首先,我们创建了一个实例/创建了一个 PerfectNumber 类的对象
PerfectNumber pn = new PerfectNumber();
接下来,我们正在调用 FindPerfectNumber(Number) 方法。众所周知,该方法将返回一个整数值,因此我们将该返回值赋给 Sum
Sum = pn.FindPerfectNumber(Number);
最后,我们使用 Java If Else 语句来检查返回值是否等于用户指定的数字。
我们也可以在 PerfectNumber 类中创建另一个方法来检查 Sum 是否等于数字。

从上面的完美数程序中,我们创建了一个函数来查找给定数字的因子并对这些因子求和。接下来,我们声明了另一个函数来检查第一个函数的返回值是否等于函数参数。根据结果,执行了 System.out.format 语句。
注意:使用 PerfectNumberAgain(int Num) 方法,我们调用 FindPerfectNumber(Num) 函数来获取因子之和。
Java 程序查找 1 到 1000 之间的完美数
此完美数程序允许用户输入最小值和最大值。此程序将查找最小值和最大值之间的完美数。
// Perfect Number between 1 to 1000
package FrequentPrograms;
import java.util.Scanner;
public class PerfectNumbersbetweenMin {
private static Scanner sc;
public static void main(String[] args) {
int i, Number, Minimum, Maximum, Sum = 0;
sc = new Scanner(System.in);
System.out.println("Please Enter the Minimum Value: ");
Minimum = sc.nextInt();
System.out.println("Please Enter the Maximum Value: ");
Maximum = sc.nextInt();
for(Number = Minimum; Number <= Maximum; Number++) {
for(i = 1, Sum =0; i < Number; i++) {
if(Number % i == 0) {
Sum = Sum + i;
}
}
if (Sum == Number) {
System.out.format("%d \t", Number);
}
}
}
}
1 到 100 的完美数输出
Please Enter the Minimum Value:
1
Please Enter the Maximum Value:
10000
6 28 496 8128
在此 Java 完美数程序中,以下语句将要求用户输入最小值和最大值。然后,我们将把用户输入的值赋给 Minimum 和 Maximum 变量。
System.out.println("Please Enter the Minimum Value: ");
Minimum = sc.nextInt();
System.out.println("Please Enter the Maximum Value: ");
Maximum = sc.nextInt();
接下来,我们使用了 For 循环,该循环帮助 Javac 在 Minimum 和 Maximum 变量之间进行迭代。在这里,迭代从 Minimum 开始,并且不会超过 Maximum 变量。
for(Number = Minimum; Number <= Maximum; Number++) {
在 for 循环程序内部,我们正在检查该数字是否为完美数。我们已经在第一个示例中解释了 for 循环迭代。
评论已关闭。