从StringBuffer返回toString

时间:2011-04-29 03:04:57

标签: java

这是我的班级:

    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
* * *

这需要以随机顺序发生。

1 个答案:

答案 0 :(得分:1)

随机返回不同字符串的toString()实现与声明的语义不匹配。 Object.toString()的javadoc说:

  

通常,toString方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,便于人们阅读。

如果要随机显示对象的不同部分或方面,则应该将方法称为不同的方法。

实际上,你应该考虑将随机化完全排除在课堂之外; e.g。

    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]);
        ...
    }

这种方法的优点是您的类更容易测试,更可重用,并且没有记住以前调用String呈现方法时发生的事情的负担。