2016-05-12 4 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をインクリメント(!)、それは回文であるかどうかを確認するためにnをゴミ箱そして、origingalに保存します。しかし、次の繰り返しのためにnをリセットすることはありません。

+0

ありがとうございました。それは本当に役に立ちました。また、whileループが始まるたびにdigitとrevをリセットしませんでした。今プログラムが動作しています。 – 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]); 

     } 

} 
} 
関連する問題