2013-11-14 22 views
0

我有一個ArrayQueue我正在爲java語言中的類實現。在java中實現ArrayQueue需要toString方法

我將交易對象存儲在ArrayQueue中,我陷入了display()方法(也就是我自己的toString())。但它只是返回參考。

這裏是我的方法:

//display the elements in the current queue 
public String display() { 

    String result = ""; 

    if(isEmpty()) { 
     throw new EmptyQueueException("Queue is empty."); 
    } else { 
    for (int i = 0; i < count; i++) { 
     result += "[" + Q[(front + i) % capacity] + "] "; 
    } 
    } 

    return result; 
} 

這是否意味着我需要一個toString()方法爲我的對象,並調用它像:System.out.println(arrayqueue.display().toString())

回答

1

如果覆蓋toString()ArrayQueue類,你可以使用:

System.out.println(arrayqueue); 

但是如果你選擇把它稱爲display(),然後是你需要這樣的:

System.out.println(arrayqueue.display()) 

要不然怎麼是運行時環境應該知道你想要的字符串表示,而不是對象引用?

1

這是否意味着我需要一個toString()方法爲我的對象,並調用它像這樣:System.out.println(arrayqueue.display()。toString())?

沒有,因爲display()回報Stringarrayqueue.display()應該足夠了。你可能試圖打印的值arrayqueue?在不重寫toString()的情況下,它將默認返回類名和哈希碼。

1

當你調用代碼

result += "[" + Q[(front + i) % capacity] + "] "; 

要調用包含在Q陣列在該位置的對象的toString()方法。默認對象toString()將打印其內存位置。如果您的對象已經聲明瞭不同的數據以進行打印,例如object.getClass()來打印對象類的名稱,則您不必重寫toString(),而是在上面的代碼中調用該方法。當然,如果你想要一個自定義的字符串來代表你的對象比它的內存位置更好,那麼它很好的重寫對象類中的toString()。