此代码获取整数n并显示小于n的所有回文数。 但似乎for循环不起作用;因为当我输入除0,1和负数之外的数字时,没有任何反应。 我试过调试,但找不到问题!
样本输入:30
样本输出:1 2 3 4 5 6 7 8 9 11 22
import java.util.Scanner;
public class PalindromeNumbers {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
if (n == 0 || n == 1 || n < 0)
System.out.println("There's no Palindrome Number!");
else {
for (int num = 1; num < n; num++) {
int reversedNum = 0;
int temp = 0;
while (num > 0) {
// use modulus operator to strip off the last digit
temp = num % 10;
// create the reversed number
reversedNum = reversedNum * 10 + temp;
num = num / 10;
}
if (reversedNum == num)
System.out.println(num);
}
}
}
}
答案 0 :(得分:2)
您遇到无限循环:在num
循环中使用for
作为索引,并在循环内将其重置为0。使用不同的变量,它应该工作!
for (int i = 1; i < n; i++) {
int num = i;
...
if (reversedNum == i)
System.out.println(i);
}
答案 1 :(得分:1)
您正在更改for循环中的num
变量。下次执行num < n
时,值会更改(为0)。尝试这样的事情:
for (int num = 1; num < n; num++) {
int reversedNum = 0;
int temp = 0;
int temp2 = num;
while (temp2 > 0) {
// use modulus operator to strip off the last digit
temp = temp2 % 10;
// create the reversed number
reversedNum = reversedNum * 10 + temp;
temp2 = temp2 / 10;
}
if (reversedNum == num)
System.out.println(num);
}
这样,您可以使用temp变量来计算您的reversedNum,并且仍然保留num的值以进行下一次循环迭代。
答案 2 :(得分:1)
你可以用更简洁的方式做到:
public static void main(final String args[]) {
final Scanner input = new Scanner(System.in);
final int max = input.nextInt();
if (max <= 0) {
System.out.println("There's no Palindrome Number!");
} else {
for (int i = 1; i < max; i++) {
if (isPalindrome(i)) {
System.out.println(i);
}
}
}
}
private static boolean isPalindrome(final int num) {
final String temp = "" + num;
return new StringBuilder(temp).reverse().toString().equals(temp);
}