2015-11-19 21 views
1

因此,我编写了我的回文编程程序,该程序应该打印范围内所有回文数字,但它似乎只打印0到9,这意味着它评估所有其他数字为假。我不明白为什么?使用数字位数打印所有回文数字

public class Palindrome 
{ 
    public static void main(String [] args) 
    { 
     int number = 0; 
     final int END = 10000; 

     while (number <= END) 
     { 
      if (isPalindrome(number)) 
      { 
       System.out.print(" " + number); 
      } 

      number++; 
     } 
    }// end of main method 
    public static boolean isPalindrome(int number) 
    { 
     //local variables 
     int counter = 0; 
     int numDigits = 0; 
     final int END = 10000; 
     boolean palindrome = false; 


     while (number <= 10000) 
     { 
      //formula for finding the number of digits in a number 
      numDigits = getNumDigits(number); 

      //special case if number = 0 
      if (numDigits == 1) 
      { 
       palindrome = true; 
       break; 
      } 

       if(counter < numDigits/2) 
       { 
        if (((number/(int) Math.pow(10, counter)) % 10) != (number/(int) Math.pow(10, numDigits - counter - 1))) 
        { 
         palindrome = false; 
         counter++; 

        } 
        else 
        { 
         palindrome = true; 
        } 

       } 

      number++; 


     }// end of loop 
     return palindrome; 

    }//end of isPalindrome Method 
    public static int getNumDigits(int number) 
    { 
     //local variables 

     int numDigits = (int) (Math.log10(number) + 1); 

      if(number == 0) 
      { 
       numDigits = 1; 
      } 

     return numDigits; 

    }//end of getNumDigits method 


} 
+0

启动您的调试器并亲自查看。 –

+0

我没有调试器 –

+0

然后得到一个正常的IDE(如Eclipse)。免费。 –

回答

-1

我的第一个建议是记录你的各种方法的输出,以确保你得到正确的输出。使用System.out.println()可以帮助解决这个问题,因为我看到您无法访问调试器。

另外,至于你的isPalindrome()函数。如果你有,你必须使用数学函数的任何限制,但你可以做沿着这些路线有什么事我不知道:

public static boolean isPalindrome(int number) { 
    String numString = number + ""; 
    for(int i = 0; i < numString.length()/2; i++){ 
     if(numString.charAt(i) != numString.charAt(numString.length() - i){ 
      return false; 
     } 
    } 
    return true; 
} 

这实质上会检查你的反对数字的字符串表示每个字符的对应字符在字符串的末尾。您可以将条件除以2,因为在中途点之后,您已经检查了字符的相等性。

警告,我可能会有一些错误在此。我没有测试它。我只是想提出一些想法和起点。

祝你好运!

相关问题