2011-04-29 62 views
0

返回一個toString這是我的課:從一個StringBuffer

public String toString(){ 
    status = status1.getStat(); 
    item = status1.getItem(); 
    boolean checked; 
    checked = false; 
    StringBuffer sb1 = new StringBuffer(""); 
    StringBuffer s1, s2, s3, z; 
    s1 = new StringBuffer(item1[1]+"["+item2[1]+"] "); 
    s2 = new StringBuffer(item1[2]+"["+item2[2]+"] "); 
    s3 = new StringBuffer(item1[3]+"["+item2[3]+"] "); 
    z = new StringBuffer(" player("+player+") - "+points+" points "); 
    //sb1.append(item1[1]+"["+item2[1]+"] "+item1[2]+"["+item2[2]+"] "+ item1[3]+"["+item2[3]+"] "+ "player("+player+") - "+points+" points "); 

    if (status == 1 && item.equals(item1[1])){ 
     item1[1] = "*"; 
     s1 = sb1.append(item1[1]+" "); 
     //sb1.delete(1,4); 
    }else if (status == 1 && item.equals(item1[2])){ 
     item1[2] = "*"; 
     s2 = sb1.append(item1[2]+" "); 

    }else if(status == 1 && item.equals(item1[3])){ 
     item1[3] = "*"; 
     s3 = sb1.append(item1[3]+" "); 

    } 

    return s1.toString()+s2.toString()+s3.toString()+z.toString(); 

我的輸出如下:

Let: 
item1[1] = Alpha 
item2[1] = 1 
item3[1] = 0 
----- 
item1[2] = Beta 
item2[2] = 1 
item2[2] = 0 
----- 
item1[3] = Charlie 
item2[3] = 2 

我的輸出是:

when status = 1 and item = item1[1] 
-- 
* Beta[1] Charlie[2] 
-- 
When run the code for the second time 
*[1] * Charlie[2] 
-- 
When i run the code for the third time 
*[1] *[1] Charlie[2] 

是否有可能使它如下所示?

when status = 1 and item = item1[1] 
-- 
* Beta[1] Charlie[2] 
-- 
When run the code for the second time 
* * Charlie[2] 
-- 
When i run the code for the third time 
* * * 

這將需要以隨機順序發生。

+0

我不明白。你想每次調用同一個對象時'toString()'返回不同的值嗎? – 2011-04-29 03:09:59

+0

是的,如果條件滿足,我希望它將item1重命名爲*並移除項目2周圍的[] – ART 2011-04-29 03:11:23

回答

1

隨機返回不同字符串的toString()的實現與聲明的語義不匹配。 javadoc Object.toString()說:

一般來說,toString方法返回一個字符串,「文本表示」該對象。結果應該是一個簡潔但內容豐富的表述,對於一個人來說很容易閱讀。

如果要隨機顯示對象的不同部分或方面,應該調用方法有所不同。

事實上,你應該考慮把整個課程隨機分解出來;例如

Random r = ... 
    ... 
    YourClass yc = ... 
    int nosParts = yc.getNosParts(); 
    int partNo = r.nextInt(nosParts); 
    String str = yc.getPartAsString(partNo); 

int[] perm = ... // randomly permuted array of [0 .. nosParts - 1] 
    for (int i = 0; i < nosParts; i++) { 
     String str = yc.getPartAsString(perm[i]); 
     ... 
    } 

這種方法的優點是你的類是更容易測試,更是可重複使用的,並沒有記住以前調用字符串渲染髮生了什麼事的負擔方法。