Java 使用堆栈的回文类的问题

Java 使用堆栈的回文类的问题,java,stack,palindrome,Java,Stack,Palindrome,我正在尝试使用堆栈编写一个回文类,以确定用户输入的单词是否是回文。在我的回文课上似乎有个问题。有人能帮我确认一下吗?我的程序可以工作,但无论我键入什么单词,它都会返回该单词不是回文 import java.util.Stack; public class Palindrome { public Palindrome() { Stack stack = new Stack(); String input = ""; boolean

我正在尝试使用堆栈编写一个回文类,以确定用户输入的单词是否是回文。在我的回文课上似乎有个问题。有人能帮我确认一下吗?我的程序可以工作,但无论我键入什么单词,它都会返回该单词不是回文

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 

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

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


您当前的
.equals(word)
没有像您认为的那样做,因为您没有提供重载。

这是您的完整回文类吗?如果是,则没有要处理的输入

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 
你有几个bug

  • 首先,需要向回文类提供输入
  • 第二,当您使用堆栈反转输入时,将索引推到堆栈上,而不是推到字符上
  • 第三,这不是一个很好的做法,做每一件事都不符合构造器。回文类不需要知道作为成员或用于初始化的输入
如果不需要多次实现回文,则应使用静态方法

试试这个:

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 

pal.equals(word)
比较两个给定对象。没有办法,你会得到正确的答案。请学习尝试学习使用
构造函数
方法
的基础知识,然后实现逻辑。您的回文检查代码放置在错误的位置。首先,您检查回文的逻辑不应该在构造函数中,而可以创建一个静态方法来检查回文。就像@PrerakSola为equals compare two object所说的那样,由于您没有重写equals方法,它正在调用equals of object类来检查实例是否是相同的reference.isAlindrome没有在您的方法中定义,您可以
返回input.equals(相反)thx,我不小心删除了布尔o_o,至少有帮助吗?
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");
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