我在java中有一个简单的问题。我有这段代码:
int i1=0;
for(String x: list1)
{
for(String y: list2)
{
if(x == y)
{
log ("Checking "+x+" with "+y+" => found a match!");
list1.remove(i1);
break;
}
else
{
log ("Checking "+x+" with "+y+" => not matching!");
}
}
i1=i1+1;
}
正如你所看到的,我正在声明上面的“i1”,但是有没有办法在第一次声明它并且在 FOR 不设置自己?
希望你理解我。
答案 0 :(得分:1)
不,你不能用Java做到这一点。如果在for
循环内移动声明,那么在循环的每次迭代中,变量将被重新赋值为其初始值。
如果“未设置”意味着“超出范围”,您可能并不需要担心;那里没有性能问题。如果确实想要在外部for
循环结束时强制变量超出范围,你可以围绕整个事情创建一个额外的块,就像这样(但你真的不需要这样做,这是不必要的!):
{ // Beginning of block <----------
int i1=0;
for(String x: list1)
{
for(String y: list2)
{
if(x == y)
{
log ("Checking "+x+" with "+y+" => found a match!");
list1.remove(i1);
break;
}
else
{
log ("Checking "+x+" with "+y+" => not matching!");
}
}
i1=i1+1;
}
} // End of block <----------
答案 1 :(得分:1)
也许你可以写下这样的代码:
for(String x = list1.get(0), int i1 = 0; i1 < list1.size();
i1++, x = list1.get(i1) )
{
for(String y: list2)
{
if(x == y)
{
log ("Checking "+x+" with "+y+" => found a match!");
list1.remove(i1);
break;
}
else
{
log ("Checking "+x+" with "+y+" => not matching!");
}
}
}
如果我错了,请警告我。
答案 2 :(得分:0)
我不是Java专家,但我记得在迭代时不从列表中删除对象的事情。
所以(即使我错了),你应该这样做:
for(int i1=0;i<list1.size();i1++)
{
String x=list1.get(i1);
for(String y: list2)
{
if(x == y)
{
log ("Checking "+x+" with "+y+" => found a match!");
list1.remove(i1--);
break;
}
else
{
log ("Checking "+x+" with "+y+" => not matching!");
}
}
}
请勿忘记删除中的--