2017-06-18 1 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; 
      } 
     } 



} 

Je suis en train d'écrire un programme pour imprimer un nombre minimum de palindrome (ex: 101, 232, 353, 303, 424, ...) et supérieur à un nombre d'entrée (entrée par java.util .Scanner). Mais ce programme n'a rien imprimé.Numéro Palindrome En Java

Pourriez-vous m'aider à le réparer?

+4

Si je dans vos chaussures, la première chose que je ferais serait d'entrer dans le code à l'aide d'un débogueur. Que se passe-t-il lorsque vous essayez cela? –

+0

Veuillez essayer de déboguer votre code, passez-le ligne par ligne pour voir où vous entrez dans une boucle infinie ou si vous sortez complètement de la boucle parce que la condition de boucle n'est pas remplie. – luk2302

+0

Il n'a probablement pas imprimé quoi que ce soit car il n'a jamais fini d'être exécuté. Si vous deviez entrer '2', il commencerait par' 3' et continuerait à s'incrémenter jusqu'à l'éternité, car une fois qu'il atteindrait 'Integer.MAX_VALUE', il déborderait et recommencerait à partir de' Integer.MIN_VALUE', ce qui casserait 'pour() '-loop's condition donc il sortirait juste sans rien imprimer. Ou quelque chose de pire que ça. – Shark

Répondre

2

Votre numCheck devrait finir par être égale à la valeur d'origine de la i actuelle afin que i d'être un palindrome. Cependant, la condition d'arrêt est if (numCheck==num), ce qui ne sera jamais vrai.

Il devrait être if (numCheck==i), mais cela échouera également, puisque vous ne gardez pas la valeur d'origine de i.

Les travaux suivants:

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

Maintenant i est jamais modifié dans la boucle intérieure (i = numAfter; a été retirée), de sorte que vous pouvez comparer sa valeur à numCheck après la boucle interne est fait.

BTW, le code peut être plus lisible de cette façon:

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