Java自定义字符串返回内存位置

时间:2017-02-25 19:17:58

标签: java tostring

我的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 假

1 个答案:

答案 0 :(得分:0)

使用toSting()代替toString(),因此调用了Object类toString()。 @Override在这种情况下非常有用,它试图告诉我们在覆盖方法时我们犯了一些错误。
在评论@Override之前思考总是有帮助的。