我创建了一个双端队列,我想打印出队列中的内容。我创建了一个toString方法,但是当我向左边添加一个元素时,它会覆盖当前的前(左)元素。 例如
System.out.println(myDeq);
myDeq.addFront(7);
myDeq.addRight(12);
System.out.println(myDeq);
myDeq.addFront(15);
System.out.println(myDeq);
所以我的输出将是
<>
<7,12>
<15,12>
但我想要
<15,7,12>
我的toString方法是:
public String toString()
{ StringBuffer sb = new StringBuffer("<");
QCell<T> l = frontCell;
QCell<T> r = backCell;
while (l != null && r != null)
{ sb.append(l.data +"," + r.data + ",");
l = l.next;
r = r.next;
}
return(sb+">");
}
我对左侧代码的添加是: @override
public void addFront(T x) {
QCell<T> theCell= new QCell<T>(x);
if (frontCell == null)
frontCell = backCell = theCell;
else {
frontCell.next = theCell;
frontCell = theCell;
}
}
我不确定是否是我的toString方法覆盖它或者我的addFront代码是不正确的。
答案 0 :(得分:1)
你的addFront是错误的,因为你将frontCell设置为theCell。但随后重新分配了frontCell成为凯尔。所以原来的frontCell不再存在了。首先将它保存在tempCell中。
public void addFront(T x) {
QCell<T> theCell= new QCell<T>(x);
QCell<T> tempCell;
if (frontCell == null)
frontCell = backCell = theCell;
else {
tempCell = frontCell;
frontCell = theCell;
frontCell.next = tempCell;
}
}
你的backCell也将是lastCell,所以不要做r = r.next;
,因为它应该永远为null;它应该是r.previous
。
而是像这样使用从前到后穿过的单面循环。
public String toString()
{ StringBuffer sb = new StringBuffer("<");
QueueCell<T> l = frontCell;
while (l != null)
{ sb.append(l.data +",");
l = l.next;
}
return(sb+">");
}
答案 1 :(得分:0)
不应该这样:
frontCell.next = theCell;
是这样吗?
theCell.next = frontCell;