使用Stacks的Palindrome类问题

时间:2015-02-12 16:41:35

标签: java stack palindrome

我正在尝试使用Stacks编写一个Palindrome类来确定用户输入的单词是否是回文。在我的Palindrome课程中似乎存在问题。有人可以帮我识别一下吗?我的程序有效,但无论我输入什么单词,它都会返回该单词不是回文。

import java.util.Stack;
public class Palindrome
{
     public Palindrome()
     {
        Stack stack = new Stack();
        String input = "";
        boolean isPalindrome = false;
        for(int i = 0; i < input.length(); i++)
        {
            stack.push(i);
        }

        String opposite = " ";
        while(!stack.isEmpty())
        {
            opposite = opposite + stack.pop();
        }

        if(input.equals(opposite))
            isPalindrome = true;
        else
            isPalindrome  = false;
    }//end main   
}//end class Palindrome 

这是我的PalindromeCheck课程:

import java.util.Scanner;
public class PalinDromeCheck
{
   public static void main(String[] args)
   {
       Palindrome pal = new Palindrome();
       Scanner type = new Scanner(System.in);       //create scanner for  user to type a word

       String word = null;                          //initial word to check
       String stop = null;                          //stops processing of word

       do
       {
           System.out.println("Enter a word to determine if it is a palindrome: ");     
           word = type.nextLine();                  //user types word

           if(pal.equals(word))                 
               System.out.println("is a palindrome");
           else
               System.out.println("is not a palindrome\n");

           System.out.println("Would you like to try another word? Type Y for 'Yes' or N for 'No'");
           stop = type.nextLine();                  //stops processing
       }
       while(stop.equalsIgnoreCase("y"));           //continues to process and ignores upper or lowercase Y
   }
}

3 个答案:

答案 0 :(得分:1)

这是你的全Palindrome级吗?如果是,它没有输入处理!

public class Palindrome
{
    public static boolean isPalindrome(String input)
     {
        Stack stack = new Stack();

        for(int i = 0; i < input.length(); i++)
        {
            stack.push(input.charAt(i));
        }

        String opposite = "";
        while(!stack.isEmpty())
        {
            opposite = opposite + stack.pop();
        }

        return input.equals(opposite);

    }//end main
}//end class Palindrome 

这会创建一个静态方法,您可以在代码中使用,如:

System.out.println("Enter a word to determine if it is a palindrome: ");     
word = type.nextLine();                  //user types word

if(Palindrome.isPalindrome(word))                 
    System.out.println("is a palindrome");
else
    System.out.println("is not a palindrome\n");

答案 1 :(得分:1)

你有几个错误。

  • 首先,您需要将输入提供给Palindrome类。
  • 其次,当您使用堆栈反转输入时,您将推送堆栈上的索引,而不是字符。
  • 第三,做一切建设者并不是一个好习惯。 Palindrome类不需要知道输入作为成员或用于初始化目的

如果您不需要多次实施Palindrome,则应使用静态方法。

试试这个:

public class Palindrome
{
    public static boolean isPalindrome(String input)
     {

         char[] inputArray = input.toCharArray();
         bool isOk = true;
         for(int i = 0; i < inputArray.length/2 && isOk; i++){
             isOk &= inputArray[i] == inputArray[inputArray.length - i - 1];
         }
         return isOk;
     } // end method
} //end class Palindrome 

然后,您的主要功能可能是:

public static void main(String[] args)
{
    System.out.println("Enter a word to determine if it is a palindrome: ");     
    word = type.nextLine();                  //user types word

    if(Palindrome.isPalindrome(word)) {        
        System.out.println("is a palindrome");
    } else {
        System.out.println("is not a palindrome\n");
    }
} // End of main

答案 2 :(得分:0)

您的输入为空,因为您在构造函数中将输入设置为“”。最好使用构造函数参数来包含输入,然后使用成员变量跟踪它。

你键入的代码可能更适合在一个方法中(等于也许?你必须覆盖它)。您可能需要考虑将输入字符串中的字符推送到堆栈而不是0,1,2,3 ... n(其中n = input.length() - 1)。

您当前的.equals(word)没有按照您的想法执行,因为您没有提供过载。