在FOR中声明变量一次

时间:2012-01-11 01:29:21

标签: java

我在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 不设置自己?

希望你理解我。

3 个答案:

答案 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!");
        }
    }
}

请勿忘记删除中的--