所以我写了我的回文程序,该程序应该打印该范围内的所有回文数字,但它似乎只打印0到9,这意味着它将所有其他数字评估为false。我不明白为什么?
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
}
我的第一个建议是记录各种方法的输出,以确保返回正确的输出。使用System.out.println()可以帮助实现这一点,因为我看到您没有访问调试器的权限。
另外,对于您的isPalindome()函数。我不知道你是否有任何限制,你必须使用数学函数,但你可以做一些类似的事情:
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,因为在中点之后,您已经检查了字符的相等性。
警告,我可能在这方面有一些错误。我没有测试。我只是想给出一些想法和一个起点。
祝你好运!