我的类中有一个StringBuffer,如果在if语句中满足条件并打印该语句,它将删除某些字符。然而,这种情况可以重复多次。如果满足第二个条件,则第一条语句将打印出来,而不删除字符。
有办法绕道吗?下面是我的密码。
if (status == 1 && item == item1[1]){
item1[1] = "*";
w = sb1.append(item1[1]+"["+item2[1]+"] ");
sb1.delete(1,4);
}else if (status == 1 && item == item1[2]){
item1[2] = "*";
x = sb1.append(item1[2]+"["+item2[2]+"] ");
sb1.delete(1,4);
}else if(status == 1 && item == item1[3]){
item1[3] = "*";
y = sb1.append(item1[3]+"["+item2[3]+"] ");
sb1.delete(1,4);
}
return w.toString()+x.toString()+y.toString()+z.toString();我正在努力实现以下目标:我有一个toString,它由以下组成:
item11+"["item21"] "+item12+“["+tem22+"]”
我想这么做:
如果item1被标记为采取了,它将被更改为"*“,并移除item21及其周围,然后返回如下:
eg: item1[2] = x
item2[2] = 1
* x[1]
( * used to be item1[1] )但是,如果循环再次通过,我的当前类执行以下操作:*[] *1,当循环完成时,我希望它是:**
发布于 2011-04-28 14:49:50
一个普遍的问题:item看起来像String,item[]看起来像String[]。不要在String中使用==,它偶尔会产生意想不到的结果。使用equals()代替:
if (status == 1 && item.equals(item1[1])) {在其他条件检查中也使用此模式。
(并为item == null添加一个现在需要的测试/处理程序)
另一个改进是:将StringBuffer替换为StringBuilder,不要在传递字符串以附加字符串时将它们连接起来。不是为了纠正错误,而是为了提供更好的性能:
w = sb1.append(item1[1]).append("[").append(item2[1]).append("] ");发布于 2011-04-28 15:18:30
你的密码看上去很可疑。让我们拿出3次测试是否'status == 1‘(变量中是否有隐藏的布尔值,然后尝试出来?)。在代币之间放点新鲜空气,让眼睛更容易把它们分开:
if (status == 1)
{
if (item.equals (item1[1]))
{
item1[1] = "*";
w = sb1.append (item1[1] + "[" + item2[1] + "] ");
sb1.delete (1, 4);
}
else if (item.equals (item1[2]))
{
item1[2] = "*";
x = sb1.append (item1[2] + "[" + item2[2] + "] ");
sb1.delete (1, 4);
}
else if (item.equals (item1[3]))
{
item1[3] = "*";
y = sb1.append (item1[3] + "[" + item2[3] + "] ");
sb1.delete (1, 4);
}
}
return (w.append (x). append (y). append (z)).toString ();
// 看起来是相同语句的3倍,只是迭代1,2,3和w,x,y。我在最后一行中也使用了append,并将'toString ()‘放在最后的结果中。
让我们从以下3条语句中创建一个循环:
if (status == 1)
{
for (int i = 1; i < 4; ++i)
{
if (item.equals (item1[i]))
{
item1[i] = "*";
w = sb1.append (item1[i] + "[" + item2[i] + "] ");
sb1.delete (1, 4);
}
}
}
return (w.append (w). append (w). append (w)).toString ();根据您的代码、副作用、线程等等,这可能会导致一些不同的结果,但我不这么认为。特别是我不知道默认情况下w,x,y是什么,如果不在代码部分中分配的话。代码看起来好像条目要么等于item11,要么是item12或item13。但它可能等于所有3,然后循环将命中3次而不是1次。
但是,item1 1/item1 2是一种代码气味。它闻起来像是二维数组,或者没有很好地考虑面向对象(item.color、item.name或类似的东西)。
https://stackoverflow.com/questions/5820387
复制相似问题