尽管有 if/else 语句(两种情况下都已初始化),但我遇到“变量可能尚未初始化”的问题

Stu*_*899 -1 java variables initialization

protected int getGewichtung(String company)
{
    int index;

    for (HashMap<String,String> i : top3Compland) 
    {
        String test = String.join(_name, i.keySet());
        System.out.println(test);

        if (test == company) 
        {
            index = top3Compland.indexOf(i);
            
        } 
        else 
        {
            index = -5; 
        }
    }
    
    return index;
}
Run Code Online (Sandbox Code Playgroud)

我已经用 print 语句检查了它是否完全进入了 for 循环。但是所有的键都被打印出来,所以它确实输入了它,并且也确实发生了到字符串的转换,因为我首先只将有效的字符串放入函数中,所以它也必须肯定输入 if 语句,但即使它不输入然后它会输入 else 语句并用一个数字初始化它,这样它就不会抱怨变量“index”可能没有被初始化。我在监视什么??感谢您的帮助!

更新版本:我改进了一些缺陷,但出现了同样的错误。但我无法理解索引未初始化的情况......

    protected int getGewichtung(String company)
{
    int index;


   
    if (top3Compland.size() > 0 && top3Compland != null) 
    {
        for (HashMap<String,String> i : top3Compland) 
        {
            String test = String.join(_name, i.keySet());
            System.out.println(test);

            if (test.equals(company)) 
            {
                index = top3Compland.indexOf(i);
            
            } 
       
        }
    }
    else
    {
        index = -5; //company not found
    }
    return index;
}
Run Code Online (Sandbox Code Playgroud)

小智 5

您确实在两个 if/else 语句中进行了初始化,但这仅在您进入 foreach 循环时适用。当top3Compland为空时,程序不会进入循环,并且变量index永远不会初始化。