这是我的班级:
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 :(得分: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呈现方法时发生的事情的负担。