Java 在中声明变量一次

Java 在中声明变量一次,java,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; }

我有一个简单的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”,但是有没有一种方法可以在第一次声明它一次,然后在完成之后,让它自己取消设置


希望你能理解我的意思。

不,你不能在Java中这么做。如果将声明移动到
for
循环中,则变量将在循环的每次迭代中重新分配到其初始值

如果“unset”的意思是“超出范围”,那么你可能真的不需要担心这一点;这里没有性能问题。如果您真的想强制变量在外部
for
循环结束时超出范围,您可以围绕整个循环创建一个额外的块,如下所示(但您真的不需要这样做,这是不必要的!):


{//block的开头也许您可以这样编写代码:

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!");
        }
    }
}
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!");
        }
    }
}
for(字符串x=list1.get(0),int i1=0;i1检查“+x+”=>找到匹配项!”);
清单1.移除(i1);
打破
}
其他的
{
日志(“检查“+x+”与“+y+”=>不匹配!”);
}
}
}

如果我错了,请警告我。

我不是Java专家,但我记得在迭代列表时不要从列表中删除对象

所以(即使我错了),你也应该这样做:

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

for(int i1=0;iIt看起来您正在尝试重新创建
removeAll(集合c)的功能
。您还错误地比较了
字符串的值。
是否有任何特定原因使i1只增加一次。只需在for的块中声明它。是我还是这里缺少什么?我没有看到任何东西修改i1的值,它只是一直为0,并传递到remove()。编辑:这很奇怪,“i1=i1+1;”当我第一次打开此页面时不存在。您在一个方法中有10个for循环?我敢说我们发现了您的第一个问题。感谢您的回答,当我再次复制/粘贴此页面时,我得到了重复的变量,就像i2 i3 i5 i654546
list1
是一个
集合,而不是一个数组。