使用 While 循环、For 循环、内置反转函数、函数和递归编写 Java 回文数程序。我们还将展示 Java 程序以打印 1 到 n 之间的回文数。
任何数字,如果反转后保持不变,则可能是回文数。例如,121 是回文数,因为反转后仍然是 121。后续程序将展示在 Java 中检查回文数的常用方法。
- 输入任意数字
- 反转给定数字
- 比较原始值与反转值。
- 如果它们完全匹配,则为回文数。否则,则不是。
使用 While 循环查找 Java 回文数程序
此程序允许用户输入任何正数。然后,此程序使用 While 循环检查给定的数字是否是回文数。
// using While loop
import java.util.Scanner;
public class Example {
private static Scanner sc;
public static void main(String[] args) {
int Number, t, rem, r = 0;
sc = new Scanner(System.in);
System.out.println("Please Enter any number to Check : ");
Number = sc.nextInt();
//Helps to prevent altering the original value
t = Number;
while(t > 0) {
rem = t %10;
r = r * 10 + rem;
t = t /10;
}
System.out.format("Reverse of entered number is = %d\n", r);
if(Number == r) {
System.out.format("%d is Palindrome.", Number);
}
else {
System.out.format("%d is Not.", Number);
}
}
}

在此回文数程序中,前两个语句,`System.out.println` 语句,将打印双引号内的语句。接下来,我们将用户输入的赋值给一个整数变量。
在此 Java 回文数程序的下一行中,我们将原始数字值赋给临时变量 (t)。这将帮助我们保留原始值,并在临时变量 (t) 上进行所有操作。
接下来,我们使用 While 条件来确保临时变量 (t) 的值大于 0(表示为正数)。
从上面的屏幕截图中,用户输入的赋值:Number = 1441,r = 0。
t = Number = 1441
回文程序第一次迭代。
- 查找余数:rem = t % 10 => 1441 % 10 = 1
- 计算反转:r = r * 10 + rem => 0 * 10 + 1 = 1
- 重新赋值临时值:t = t / 10 => 1441 / 10 = 144
Java 回文数程序第二次迭代:从第一次迭代开始,两个值都发生了变化,t = 144,r = 1。
- rem = 144 % 10 = 4
- r = 1 * 10 + 4 = 14
- t = t / 10 => 144 / 10 = 14
第三次迭代:t = 14,r = 14。
- rem = 14 % 10 = 4
- r = 14 * 10 + 4 = 144
- t = 14 / 10 = 1
第四次迭代:从回文程序第三次迭代开始,Temp = 1,Reverse = 144
- rem = 1 % 10 = 1
- r = 144 * 10 + 1 = 1441
- t = 1 / 10 = 0
这里,对于下一次迭代,Temp = 0,因此 循环 条件将失败。
下一行,我们使用 If 条件来检查给定的数字是否等于反转后的数字。
- 如果数字等于 r,则为回文数,第一个 `System.out.format` 语句将被打印。在此示例中,Number 是 1441,Reverse 是 1441。
- 如果数字不等于反转后的数字,则不是。请参考 If Else 语句 文章。
使用 For 循环检查回文数的 Java 程序
此程序允许用户输入任何正值。然后,此程序将使用 For 循环检查给定的数字是否是回文数。
// using For loop
import java.util.Scanner;
public class Example {
private static Scanner sc;
public static void main(String[] args)
{
int num, t, r, Reve;
sc = new Scanner(System.in);
System.out.print("Please Enter any to Check : ");
num = sc.nextInt();
t = num;
for(Reve = 0; t > 0; t = t/10) {
r = t %10;
Reve = Reve * 10 + r;
}
System.out.format("Reverse of entered is = %d\n", Reve);
if(num == Reve) {
System.out.format("%d is Palindrome.", num);
}
else {
System.out.format("%d is Not.", num);
}
}
}

在此示例中,我们没有做任何特别的事情。我们只是用 For 循环替换了上述代码中的 While。如果您发现理解 For 循环的功能有困难,请参考 For 循环 文章。
使用 String Reverse 函数查找 Java 回文数程序
此程序允许输入任何正整数。然后,此程序使用字符串缓冲区反转函数检查给定的数字是否是回文数。
// using String Reverse Function
import java.util.Scanner;
public class Example {
private static Scanner sc;
public static void main(String[] args) {
int Num;
sc = new Scanner(System.in);
System.out.print("Please Enter any value to Check : ");
Num = sc.nextInt();
String str = Integer.toString(Num);
String rev = new StringBuffer(str).reverse().toString();
System.out.format("Rev = %s \n", rev);
if(Num == Integer.parseInt(rev)) {
System.out.format("%d is Palindrome.", Num);
}
else {
System.out.format("%d is Not.", Num);
}
}
}

回文数程序中的下一条语句将整数值转换为字符串值,并将转换后的值赋给 Str 变量。
String str = Integer.toString(Num);
接下来,我们使用 String Buffer 库方法来反转给定的字符串。
最后,我们使用 If 语句检查给定的值是否等于反转后的值。我们使用了类型转换将字符串数据转换为整数值。
Integer.parseInt(rev)
使用函数的 Java 回文数程序
此程序使用了我们在第一个回文数示例中遵循的相同步骤。但是,我们将逻辑分离出来并将其放入一个单独的方法中。
// using Functions
import java.util.Scanner;
public class Example {
private static Scanner sc;
private static int rev = 0;
public static void main(String[] args)
{
int nm;
sc = new Scanner(System.in);
System.out.print("Please Enter any to Check : ");
nm = sc.nextInt();
rev = PaliNum(nm);
System.out.format("Inverse of entered is = %d\n", rev);
if(nm == rev)
{
System.out.format("%d is Palindrome.", nm);
}
else
{
System.out.format("%d is Not.", nm);
}
}
public static int PaliNum(int nm)
{
int rem;
while(nm > 0)
{
rem = nm % 10;
rev = rev * 10 + rem;
nm = nm /10;
}
return rev;
}
}

在此,如果您观察到下一条语句,我们调用了 PaliNum 方法并将返回的值赋给整数变量 rev。
rev = PaliNum(nm);
当编译器到达上一行时,它将立即跳转到下面的函数
public static int PaliNum(int nm) {
我们在上面的示例中已经解释了逻辑。
使用递归检查回文数的 Java 程序
它可以帮助我们输入任何正数。然后,此程序将使用递归检查给定的数字是否是回文数。
在此示例中,我们通过面向对象编程来划分代码。为此,首先,我们将创建一个类,该类包含一个递归反转数字的方法。
package SimplerPrograms;
public class PalNm {
int rv = 0;
public int revNm(int Num) {
int Reminder;
if(Num > 0) {
Reminder = Num %10;
rv = rv * 10+ Reminder;
revNm(Num /10);
}
return rv;
}
}
在主程序中,我们将创建上述类的实例并调用方法。
package FrequentPrograms;
import java.util.Scanner;
import SimplerPrograms.PalNm;
public class Example {
private static Scanner sc;
public static void main(String[] args) {
int n, rv = 0;
sc = new Scanner(System.in);
System.out.println("Please Enter any number : ");
n = sc.nextInt();
PalNm rn = new PalNm();
rv = rn.revNm(n);
System.out.format("Reversed Number is = %d\n", rv);
if(Number == rv) {
System.out.format("%d is Palindrome.", n);
}
else {
System.out.format("%d is Not.", n);
}
}
}
Please Enter any :
1991
Reversed Number is = 1991
1991 is Palindrome.
类分析
在此回文数程序示例中,我们声明了一个带有一个参数的 revNum 函数。在函数中,我们使用 If 语句 来检查给定的数字是否大于零,如果为真,则执行 If 块内的语句。我们在上面的示例中已经解释了逻辑。
注意:`revNmr (Num/ 10)` 语句将帮助我们递归地调用该函数并更新值。如果您遗漏了此语句,它将在完成第一行后终止。
Main 类分析
在回文数程序主类中,首先,我们创建了 PalNm 类的实例/对象
PalNm rn = new PalNm();
接下来,我们调用 revNm 方法。我们都知道该方法将返回一个整数值,因此我们将该返回值赋给 Reverse。
rv = rn.revNm(Number);
下一行,我们使用 If 条件来检查给定的数字是否等于其反转值。
1 到 1000 之间的回文数的 Java 程序
此 程序 允许用户输入最小值和最大值。此程序将查找并打印最小和最大值之间的回文数。
import java.util.Scanner;
public class Example {
private static Scanner sc;
public static void main(String[] args)
{
int i, rev, Reminder = 0, Temp, Minimum, Maximum;
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();
System.out.format("Between %d and %d are:\n",Minimum, Maximum);
for(i = Minimum; i <= Maximum; i++)
{
Temp = i;
for(rev = 0; Temp > 0; Temp = Temp/10)
{
Reminder = Temp %10;
rev = rev * 10 + Reminder;
}
if(i == rev)
{
System.out.format("%d ", i);
}
}
}
}
Please Enter the Minimum Value:
1
Please Enter the Maximum Value:
1000
Between 1 and 1000 are:
1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99 101 111 121 131 141 151 161 171 181 191 202 212 222 232 242 252 262 272 282 292 303 313 323 333 343 353 363 373 383 393 404 414 424 434 444 454 464 474 484 494 505 515 525 535 545 555 565 575 585 595 606 616 626 636 646 656 666 676 686 696 707 717 727 737 747 757 767 777 787 797 808 818 828 838 848 858 868 878 888 898 909 919 929 939 949 959 969 979 989 999
首先,此程序允许输入最小值和最大值。下面的 For 循环 帮助编译器在最小和最大变量之间进行迭代;迭代从最小值开始,然后不超过最大变量。
If 条件检查迭代值是否等于反转后的数字。如果为真,则为回文数,并将打印格式语句。
为了将所有内容集中显示,我们放置了嵌套的 For 循环。请记住,您可以将上面的代码片段替换为以下代码。在这里,我们调用了递归示例中创建的 evNm 函数。
PalNm rn = new PalNm(); rev = rn.revNm(i);