Java中的回文数

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)

我正在编写一个程序来打印最小回文数(例如:101、232、353、303、424等)和大于输入数(由java.util.Scanner输入)。 但是这个程序没有打印任何东西


你能帮我修一下吗?

你的
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++;
    }