使用堆栈的回文 class 问题

Issue with Palindrome class using Stacks

我正在尝试使用 Stacks 编写回文 class 以确定用户输入的单词是否为回文。我的 Palindrome class 似乎有问题。有人可以帮我识别吗?我的程序可以运行,但无论我输入什么词,returns 这个词都不是回文。

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 

这是我的回文检查class:

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
   }
}

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

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

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

这是你完整的回文-Class吗?如果是,则没有要处理的输入!

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");

你有几个错误。

  • 首先,你需要给回文class输入。
  • 其次,当您使用堆栈反转输入时,您将索引压入堆栈,而不是字符。
  • 第三,在构造函数中做所有事情并不是一个好习惯。回文 class 不需要知道输入作为成员或用于初始化目的

如果不需要多次实现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