2013-10-28 82 views
0

在我的程序下面 - 我有2个类,PalindromeTester应该指的是Palindrome中findPalindrome方法。然而,发生的事情是,传递给findPalindrome方法的值总是返回一个输入字符串不是回文,即使当我测试字符串,如水平或妈妈或爸爸或女士。回文方法和比较

有人可能会提出一个改进?我很确定,我认为它是我的findPalindrome方法,它不检查字符串的权利。我认为它的方法,但如果有人看到其他东西可以随意建议。它需要倒数第二个字符并尝试重建它,然后将它与原始字符串进行比较。

import java.util.Scanner;//import scanner class 

public class PalindromeTester//class 
{ 
    public static void main(String args[])//main method 
    { 
     Scanner in = new Scanner(System.in); //scanner object 
     String palindrome = new String(); //string to accept user input 

     String end = new String("q"); //string to determine user quitting 

     for (int a = 0; a >= 0; a++){ //enter loop 
     System.out.println(); 
     System.out.println("Enter a string to check if it is a palindrome"); //ask for initial string 
     System.out.println(); 
     System.out.println("Continue entering strings until you are done. When you are done, enter q to quit."); //remind user to enter q to quit 
     palindrome = in.nextLine();//take in string input 
     Palindrome original = new Palindrome(palindrome); //palindrome object and passed palindrome to the constructor...but no value yet...so? 
     original = original.findPalindrome(); //call findPalindrome to determine if palindrome is a palindrome 

     if (palindrome.equalsIgnoreCase(end)) //if palindrome is q and since end is q and if they are equal, a=-2. 
     a = -2; //when incrementing the max value if ++ will be -1. since -1 is not >= to 0 then for loop exits. 
     System.out.println("Thanks for trying this program"); 

    } 
    } 
} 

_____________________________________________________________ 

    public class Palindrome { 
     String myPalindrome; 
     String myReverse; 

     public Palindrome(){ 
     myPalindrome = new String(""); 
     myReverse = new String(""); 
     } 

     public Palindrome(String palindrome){ 
     myPalindrome = palindrome; 
     } 

     public String findPalindrome(){ 

      int length = myPalindrome.length(); 

      for (int i = length - 1 ; i >= 0 ; i--) 
      myReverse = myReverse + myPalindrome.charAt(i); 

      if (myPalindrome.equals(myReverse)) 
      System.out.println("Entered string is a palindrome."); 
      else 
      System.out.println("Entered string is not a palindrome."); 

      return (""); 
     } 


    } 
+1

你试过调试吗? – BobTheBuilder

+0

请检查变量原始,这是一种回文类型。当findPalindrome()方法正在调用(original.findPalindrome())时,它返回一个String类型。你不能做以下事情:original = original.findPalindrome(); – MouseLearnJava

+0

此代码是否首先编译? – RishikeshDhokare

回答

1

当调用字符串构造函数时,您的代码无法初始化myReverse。所以它被初始化为空,并且后面附加了回文串。你需要修复它。 说了上面的代码甚至不能编译并且有许多基本问题。

+0

+1 nice catch .. –

+0

等等......它编译和一个问题?你知道我的代码是2行不同的程序吗?根据我的Mac上的drjava,它似乎编译正常?但我知道为什么我的反向对象没有初始化 - 因为在PalindromeTester中,我只调用接受字符串参数的构造函数。 – allenlistar

+0

以下行不会引发任何错误?你如何分配一个字符串回文? 'Palindrome original =新的回文(回文); original = original.findPalindrome();' – JackDVD