好的,所以我试图用toString()打印出以下底部| 5 | 4 | 3 | top。
public String toString(){
String logString = "bottom|";
LLNode<T> node;
node = top;
while (node != null){
logString = logString + node.getInfo() + "|";
node = node.getLink();
return logString + "top";
}
return "Empty Stack";
}
它与堆栈中的0个元素一起使用,并且堆栈中有1个元素,但是我的测试用例失败了全部3个元素。
我迷失了如何获得链表中的前两项。 node = node.getLink();
在列表中向前移动,因此它只显示堆栈中的最后一项(顶部)为3,然后终止循环。我该如何倒退?
@Test
public void test_toString_on_a_stack_with_multiple_elements() {
stk1.push(5); stk1.push(4); stk1.push(3);
Assert.assertEquals("bottom|5|4|3|top", stk1.toString());
}
expected <bottom|5|4|3|top> actual <bottom|3|top>
答案 0 :(得分:1)
在循环中你不应该return
,而是在它之后
此外StringBuilder
非常有用。
public String toString(){
LLNode<T> node = top;
if (node == null)
return "Empty Stack";
StringBuilder toReturn = new StringBuilder("bottom|");
while (node != null){
toReturn.append(node.getInfo());
toReturn.append("|");
node = node.getLink();
}
toReturn.append("top");
return toReturn.toString();
}
答案 1 :(得分:0)
它与堆栈中的0个元素一起使用,并且堆栈中有1个元素,但是我的测试用例失败并且包含完整的3个元素。
问题出在while循环内的return
语句中。
while (node != null){
logString = logString + node.getInfo() + "|";
node = node.getLink();
return logString + "top"; // only once the while statement will be executed
}
这就是为什么它适用于堆栈中的0或1个元素。你应该把那个return语句放在while循环之外。