我有一个作业,应该使用三个堆栈最终找到回文。两个堆栈将需要保持输入序列的相反方向。我需要从其中一个堆栈中弹出项目,并将其推入第三个堆栈中。显然,这将创建两个带有反向项目的堆栈,可以对它们进行比较,以查看输入的字符串是否是回文。
我已经写了一个类'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");
}
}
答案 0 :(得分:0)
如果您有一个NPE,则等式(Two)因为一个为null。一个是指向什么都没有的引用,您没有在main方法中设置它。
我想您是在ArrayPalindrome的构造函数中设置此引用的。您必须在主方法中调用构造函数ArrayPalindrome。
请记住,应该更改构造函数,而不要使用this.one = one,即您要说一个变量必须引用一个,而一个则什么也不是。您必须创建一个对象,例如:one = new ArrayStack()。
在仅定义IsPalindrom的任何地方都不会调用它。