2013-07-26 142 views
-2

我有一个方法,检查一个int从其他方法读入并将其与其相反。如果数字相等并且因此是回文,则返回true。但是,无论输入的数字是否为回文,错误都会一直返回。等于int返回false

public class Paladin 
{ 
    public static void main() 
    { 
     boolean valid; 

     String inputString = JOptionPane.showInputDialog("Enter a number to be reversed: "); 
     int inputInt = Integer.parseInt(inputString); 

     valid = isPalindrome(Reverse(inputInt)); 

     if(valid) 
      JOptionPane.showMessageDialog(null, inputInt + " is a palindrome"); 

     else 
      JOptionPane.showMessageDialog(null, inputInt + " is not a palindrome"); 

     public static boolean isPalindrome (int number) 
     { 
      int undoReverse = 0; 

      while(number > 0) 
      { 
       undoReverse = undoReverse * 10 + number % 10; 
       number /= 10; 
      } 

      if(number == undoReverse) 
       return true; 

      else 
       return false; 
     } 
    } 
} 

回答

1

发生这种情况,因为你提到如下修改输入numberisPalindrome方法:

number /= 10; 

,因此您的

if(number == undoReverse) 

比较不与输入数量发生,而是正在发生的修改号码。您基本上需要保留这个原始数字进行比较并使用不同的变量。试试这个:

public static boolean isPalindrome (int number) 
     { 
      int undoReverse = 0; 
      int inputNumber = number; 

      while(number > 0) 
      { 
       undoReverse = undoReverse * 10 + number % 10; 
       number /= 10; 
      } 

      if(inputNumber == undoReverse) 
        return true; 

      else 
       return false; 
      } 
} 
0

while循环结束时number <= 0,但你测试是否number == undoReverse。您正在修改number,然后尝试测试修改后的值是否相等。相反,你应该根据副本number来计算undoReverse