Java中的回文数
我正在编写一个程序来打印最小回文数(例如:101、232、353、303、424等)和大于输入数(由java.util.Scanner输入)。 但是这个程序没有打印任何东西Java中的回文数,java,Java,我正在编写一个程序来打印最小回文数(例如:101、232、353、303、424等)和大于输入数(由java.util.Scanner输入)。 但是这个程序没有打印任何东西 你能帮我修一下吗?你的numCheck应该等于当前i的原始值,这样i才能成为回文 但是,如果(numCheck==num),则停止条件为,这永远不会为真 如果(numCheck==i),它应该是,但这也会失败,因为您没有保留i的原始值 以下工作: public static void main(String[] args)
你能帮我修一下吗?你的
numCheck
应该等于当前i
的原始值,这样i
才能成为回文
但是,如果(numCheck==num),则停止条件为,这永远不会为真
如果(numCheck==i)
,它应该是,但这也会失败,因为您没有保留i
的原始值
以下工作:
public static void main(String[] args) {
//Input
Scanner sc = new Scanner (System.in);
System.out.println("Input a number: ");
int num = sc.nextInt();
//Solve
for (int i = num+1; i>num; i++)
{
int numCheck = 0;
int r;
int numAfter = i;
while (true)
{
r = i%10;
numCheck = numCheck*10+r;
numAfter = (numAfter-r)/10;
i = numAfter;
if (numAfter==0)
{
break;
}
}
if (numCheck==num)
{
System.out.println("Minumum palindrome number that greater than input number: "+i);
break;
}
}
}
现在,i
在内部循环中永远不会被修改(i=numAfter;
已被删除),因此在内部循环完成后,您可以将其值与numCheck
进行比较
顺便说一句,代码可以通过以下方式更具可读性:
for (int i = num+1; i>num; i++)
{
int numCheck = 0;
int r;
int numAfter = i;
while (true)
{
r = numAfter%10;
numCheck = numCheck*10+r;
numAfter = (numAfter-r)/10;
if (numAfter==0)
{
break;
}
}
if (numCheck==i)
{
System.out.println("Minumum palindrome number that greater than input number: "+i);
break;
}
}
如果我处在你的位置,我要做的第一件事就是使用调试器进入代码。当您尝试此操作时会发生什么情况?请尝试调试代码,逐行检查代码,以查看您进入无限循环的位置或完全脱离循环的位置,因为循环条件不满足。它可能没有打印任何内容,因为它从未完成执行。如果输入2
,它将从3
开始,并一直递增,直到永远,因为一旦它达到整数.MAX\u值
,它将溢出,并从整数.MIN\u值
重新开始,这将打破for()
-循环的条件,因此它只需退出而不打印任何内容。或者更糟糕的事情。提示:i=numAfter
看起来可疑,如果您不十分小心并且不知道自己在做什么,那么为循环变量赋值是危险的
int i = num + 1;
while (true)
{
int numCheck = 0;
int r;
int numAfter = i;
while (numAfter != 0)
{
r = numAfter%10;
numCheck = numCheck*10+r;
numAfter = (numAfter-r)/10;
}
if (numCheck==i)
{
System.out.println("Minumum palindrome number that greater than input number: "+i);
break;
}
i++;
}