我的CirculaList类中的原始toString方法工作正常。但是当我在我的堆栈类中的toString方法中调用它时,它返回我假设的堆栈的内存位置。我尝试过载它但没有明显的区别。
我的代码:
CircularList类
public class CircularList{
private Node tail = null;
public void addToFront(int elem){
if(elem >= 0){
Node newNode= new Node(elem);
if(tail != null){
newNode.next = tail.next;
tail.next = newNode;
}else{
tail = newNode;
newNode.next = newNode;
}
}
}
public int deleteFromBack(){
int returned = -1;
if(tail != null){
Node trav = tail;
while(trav.next != tail){
trav = trav.next;
}
returned = tail.data;
if(trav.next == trav){
tail = null;
}else{
trav.next = tail.next;
tail = trav;
}
}
return returned;
}
//@Override
public String toSting(){
String stg = null;
stg = "[";
Node trav = tail.next;
while(trav != tail){
stg += trav.getData() +",";
trav = trav.next;
}
stg += trav.getData() + "]";
return stg;
}
public CircularList clone(CircularList other){
tail = other.tail;
return this;
}
}
Stack Class
public class Stack{
private CircularList list = new CircularList();
public void push(int elem){
list.addToFront(elem);
}
public int pop(){
CircularList tempList = new CircularList();
int keeper = -1;
if(isEmpty() != true){
keeper =list.deleteFromBack();
while(isEmpty() != true){
tempList.addToFront(keeper);
keeper =list.deleteFromBack();
}
list.clone(tempList);
}
return keeper;
}
public int peek(){
CircularList tempList = new CircularList();
int keeper = -1;
if(isEmpty() != true){
while(!isEmpty()){
keeper = list.deleteFromBack();
tempList.addToFront(keeper);
}
list.clone(tempList);
}
return keeper;
}
public boolean isEmpty(){
CircularList tempList = new CircularList();
int keeper = -1;
keeper = list.deleteFromBack();
if(keeper==-1){
return true;
}else{
while(keeper!=-1){
tempList.addToFront(keeper);
keeper = list.deleteFromBack();
}
list.clone(tempList);
}
return false;
}
public Stack clone(Stack other){
list = other.list;
return this;
}
//@Override
public String toSting(){
String stg = list.toString();
return stg;
}
}
Tester类(顾名思义它纯粹是为了测试)
public class Tester{
public static void main(String[] args)
{
CircularList list = new CircularList();
System.out.println("CircularList");
System.out.println("=========");
list.addToFront(1);
list.addToFront(2);
list.addToFront(3);
list.addToFront(4);
list.addToFront(5);
System.out.println(list.toSting());
System.out.println("=========");
System.out.println("removing: " + list.deleteFromBack());
System.out.println("=========");
System.out.println(list.toSting());
System.out.println("=====================================================");
System.out.println("stack");
System.out.println("=========");
Stack stack = new Stack();
System.out.println(stack.isEmpty());
System.out.println("=========");
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println(stack.toString());
System.out.println(stack.isEmpty());
System.out.println("=========");
System.out.println("first int: " + stack.peek());
System.out.println("=========");
System.out.println("Removing: " + stack.pop());
System.out.println(stack.isEmpty());
}
}
输出(等同于他们弄乱布局时取出) CircularList
[5,4,3,2,1]
删除:1
[5,4,3,2]
堆
真
栈@ 15db9742 假
第一个int:5
删除:5 假
答案 0 :(得分:0)
使用toSting()代替toString(),因此调用了Object类toString()。
@Override在这种情况下非常有用,它试图告诉我们在覆盖方法时我们犯了一些错误。
在评论@Override之前思考总是有帮助的。