我执行以下包含三个方法的执行。 plus
将字符串添加到类中,minus
将其删除,并且empty
检查并在没有存储更多字符串的情况下返回true。
private static void test() {
Stack<String> stack = new Stack<String>();
stack.plus("hello1");
stack.plus("hello2");
stack.plus("hello3");
stack.plus("hello4");
while (!stack.empty()) {
System.out.println(stack.minus());
}
stack.plus("a1");
stack.plus("a2");
stack.plus("a3");
stack.plus("a4");
stack.minus();
stack.minus();
stack.plus("a5");
stack.plus("a6");
while (!stack.empty()) {
System.out.println(stack.minus());
}
}
@SuppressWarnings("hiding")
public class Stack<String> {
private String e;
public void plus(String e) {
this.e= e;
}
public String minus() {
return e;
}
public boolean empty() {
if(e != null) {
}return false;
}
}
输出应为:
hello4
hello3
hello2
hello1
a6
a5
a2
a1
此刻,我的程序一直在“ hello4”处无限循环,我还不太清楚如何解决empty
函数。我怀疑该方法是我的主要问题。
答案 0 :(得分:4)
您似乎误解了泛型的语法。在您的Stack类中,通用参数String
的行为更像是变量,而不像String类。
//DataType is substituted for whatever you tell it in <...> when making a Stack object
public class Stack<DataType> {
private List<DataType> memory = new ArrayList<>();
public void push(DataType e) {
memory.add(e);
}
public DataType pop() {
if(memory.isEmpty())
return null;
int lastIndex = memory.size()-1;
DataType element = memory.get(lastIndex); //get last element of memory
memory.remove(lastIndex); //remove it from the stack
return element; //return it
}
public boolean isEmpty() {
return memory.isEmpty();
}
}
您可以像现在一样使用它:
Stack<String> stack = new Stack<String>(); //DataType in Stack becomes String