[英]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.