Java 寻找下一个回文的代码 - 输出错误

Java code for finding the next palindrome - Error in output

题目是求给定数后最小的回文整数

  1. 输入整数个数即测试用例

  2. 输入数组中的整数。

  3. 输出:数组中每个整数分别对应的下一个回文整数。

有多种方法可以解决这个问题(SO 上也有很多解决方案),但我不明白为什么我无法从这段代码中获取输出。从 运行 多次代码中,我得出结论,如果任何测试用例需要超过 1 个增量才能成为回文,程序就会以某种方式进入无限循环。 例如。如果我输入 100 作为测试用例,输出是 101.Similarly,如果我输入 908,我得到 909 作为输出。但是如果我输入 108,我不会得到 111 作为输出。

请原谅我的愚蠢错误,我是 Java 中的编码新手。谢谢

import java.util.Scanner;


class nextPalindrome {

    public static void nextPalindromeGenerate(int n)
    {   
        int flag=1;         
        int digit;          //to store the mod value
        int rev=0;          //reverse of the number
        int original;       //dummy to store the original number

        if(n<10)
        {   System.out.println(n+1);    //If number is single digit, next smallest palindrome is n+1
            flag=0;


        }


        while(flag!=0)
        {   ++n;
            original=n;

            while(n>0)      //loop for reversing the number
            {
                digit=n%10;
                rev=rev*10+digit;
                n=n/10;
            }

            if(rev==original)   //check if original equals the reverse(original)
            {
                System.out.println(rev);
                flag=0;


            }

            else flag=1;
        }

    }

    public static void main(String[] args)
    {   

    @SuppressWarnings("resource")
    Scanner sc=new Scanner(System.in);




        int n=sc.nextInt();
        int[] palinList=new int[n];
        for(int i=0;i<n;i++)
        {   

            palinList[i]=sc.nextInt();;
        }

        for(int j=0;j<n;j++)
        {   
            nextPalindromeGenerate(palinList[j]);

        }
}
}

您将 n 增加到下一个整数以测试是否为回文 (!),将其保存在 origingal 中,然后丢弃 n 以查看它是否是回文。但是您永远不会为下一次迭代重置 n

这个问题非常微不足道,只是将 rev、digit 和 n 重置为有意义的值。工作程序如下:

import java.util.Scanner;




class nextPalindrome {

    public static void nextPalindromeGenerate(int n)
    {   
        int flag=1;         
        int digit;          //to store the mod value
        int rev=0;          //reverse of the number
        int original;       //dummy to store the original number

        if(n<10)
        {   System.out.println(n+1);    //If number is single digit, next smallest palindrome is n+1
            flag=0;


        }

        original=n;
        while(flag!=0)
        {   rev=0;digit=0;
            n=++original;

            while(n>0)      //loop for reversing the number
            {
                digit=n%10;
                rev=rev*10+digit;
                n=n/10;
            }

            if(rev==original)   //check if original equals the reverse(original)
            {
                System.out.println(original);
                flag=0;


            }

            else flag=1;
        }

    }

    public static void main(String[] args)
    {   

    @SuppressWarnings("resource")
    Scanner sc=new Scanner(System.in);




        int n=sc.nextInt();
        int[] palinList=new int[n];
        for(int i=0;i<n;i++)
        {   

            palinList[i]=sc.nextInt();;
        }

        for(int j=0;j<n;j++)
        {   
            nextPalindromeGenerate(palinList[j]);

        }

}
}