2017-06-18 9 views
2
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; 
      } 
     } 



} 

私は最小回文番号を印刷するプログラムを書いています(例:101、232、353、303、424、...)とjava.utilのにより入力された数より多い(入力.Scanner)。 しかし、このプログラムは何も印刷しませんでした。回文数

修正できますか?

+4

私はあなたの靴にあった場合は、私がしたいまず最初に、デバッガを使用してコードにステップして、次のようになります。

ところで、コードはこのよう読みやすくすることができます。これを試してみるとどうなりますか? –

+0

コードをデバッグして、行ごとにステップを実行して、無限ループにどこに入っているのか、またはループ条件が完全に満たされていないためにループから完全に外れるのを見てください。 – luk2302

+0

実行を決して完了しなかったため、おそらく何も印刷されませんでした。 '2'を入力すると、' 3'から始まり、永久にインクリメントし続けます。なぜなら、 'Integer.MAX_VALUE'に達するとオーバーフローし、' Integer.MIN_VALUE'から再び始まり、 'for () '-loopの状態になるので、何も印刷せずに終了します。またはそれより悪いこと。 – Shark

答えて

2

あなたのnumCheckは、現在のiの元の値になり、その結果、iは回文になります。

ただし、停止条件はif (numCheck==num)です。これは決して真実ではありません。

if (numCheck==i)である必要がありますが、元の値であるiを維持しないため、これも失敗します。

次作品:今

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; 
     } 
    } 

iは(i = numAfter;が削除された)内部ループ内で変更されることはありませんので、内側のループが完了した後、あなたはnumCheckにその値を比較することができます。

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++; 
    } 
関連する問題