有 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;
        }
        else
        {
            log ("Checking "+x+" with "+y+" => not matching!");
        }
    }
    i1=i1+1;
}

正如你所看到的,我在上面声明了“i1”,但是有没有办法在第一次声明时只声明一次,然后在结束后让自行取消设置

希望你能理解我


共 (2) 个答案

  1. # 1 楼答案

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

    不要忘记删除中的

  2. # 2 楼答案

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

    如果“unset”的意思是“超出范围”,那么你可能真的不需要担心这一点;这里没有性能问题。如果您真的想强制变量在外部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 <