使用三个堆栈的回文(Java)

时间:2018-09-28 11:26:50

标签: java

我有一个作业,应该使用三个堆栈最终找到回文。两个堆栈将需要保持输入序列的相反方向。我需要从其中一个堆栈中弹出项目,并将其推入第三个堆栈中。显然,这将创建两个带有反向项目的堆栈,可以对它们进行比较,以查看输入的字符串是否是回文。

我已经写了一个类'ArrayStack'和'LinkedStack'。现在,我应该写一个具有三个ArrayStack实例变量的类,一个不带参数的构造函数,它将创建三个ArrayStack类型的堆栈,以及一个采用字符串参数并返回布尔值的方法。输入的字符串将用于检查回文。字符串的各个字符将需要压入堆栈之一。

弄清楚之后,我需要做同样的事情,但是要使用'LinkedStacked'类。

这是我到目前为止的代码,已经尝试了多种方法并遇到了多个错误(NPE等)。任何指示/解释/建议,将不胜感激。我觉得我很困惑。预先感谢您提供的任何帮助。

请注意,我是初学者。

public class ArrayPalindrome {

    static ArrayStack one;
    static ArrayStack two;
    static ArrayStack three;

    public ArrayPalindrome(){
        this.one = one;
        this.two = two;
        this.three = three;
    }

    public static boolean isPalindrome (String input ){
        String input2 = "";
        for (int i = 0; i < input.length(); i++) {
            char character = input.charAt(i);
            one.push(character);
        }
        while (!one.isEmpty()) {
            // add the character at the top to a string   
            input2 = input2 + one.pop();
        }
        return true;
    }

    public static void main(String[] args) {
        if (one.equals(two)){
            System.out.println("Palindrome");
        }
        else {
            System.out.println("Not a Palindrome");
        }
    }

1 个答案:

答案 0 :(得分:0)

如果您有一个NPE,则等式(Two)因为一个为null。一个是指向什么都没有的引用,您没有在main方法中设置它。

我想您是在ArrayPalindrome的构造函数中设置此引用的。您必须在主方法中调用构造函数ArrayPalindrome。

请记住,应该更改构造函数,而不要使用this.one = one,即您要说一个变量必须引用一个,而一个则什么也不是。您必须创建一个对象,例如:one = new ArrayStack()。

在仅定义IsPalindrom的任何地方都不会调用它。

相关问题