2016-05-12 37 views
0

问题是在给定数字后面找到最小的回文数整数。用于查找下一个回文的Java代码 - 输出错误

  1. 输入整数即测试用例的数量。

  2. 在数组中输入整数。

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

有各种方法来解决这个问题(许多解决方案也是如此),但我不明白为什么我不能从这个代码得到输出。从多次运行代码,我得出的结论是,如果任何测试用例需要超过1个增量才能成为回文,则程序会以某种方式进入无限循环。例如,如果我输入100作为测试用例,则输出为101.类似地,如果输入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]); 

     } 
} 
} 

回答

0

你增加n到下一个整数,以测试为回文(!),它保存在origingal,然后垃圾n,看它是否是一个回文。但是你不会为下一次迭代重置n

+0

谢谢。这真的很有帮助。此外,我没有重置数字,并在每次while循环开始时都进行转动。现在该程序正在运行。 – ccg2k16

0

这个问题极其微不足道,只是将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]); 

     } 

} 
}