繁体   English   中英

从 StringBuffer 返回 toString

[英]Returning a toString from a StringBuffer

这是我的 class:

    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();

我的 output 如下:

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

我的 output 是:

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

这需要以随机顺序发生。

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

通常,toString 方法返回一个字符串,该字符串“以文字形式表示”这个 object。 结果应该是一个简洁但信息丰富的表示,易于人们阅读。

如果您想随机显示 object 的不同部分或方面,您应该调用不同的方法。

实际上,您应该考虑完全从 class 中考虑随机化; 例如

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

这种方法的优点是您的 class 更容易测试,更可重用,并且无需记住之前调用 String 渲染方法时发生的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM