为什么这段代码说变量 j 可能尚未初始化?它正在循环内初始化

Why does this piece of code say variable j might not have been initialized?? It is getting initialized inside the loop

class Searching{
        
    static int search(int arr[], int N, int X)
    {
        
        
       int j;
        
        for(int i =  0; i<N; i++){
            
            if(arr[i] == X){
                
          j = i;
           
            break;
                
            }
        }
        
       return j;
        
    }
    
}

我已经在循环中初始化了 j。那为什么编译器到了return语句就说j没有初始化呢。我不明白,因为我是编码新手。请帮助我

在Java中,for个循环是pre-test个循环:测试(i<N)在循环体之前执行。因此,如果 N 小于或等于 i (0) 的初始值,则循环将永远不会执行并且 j 将永远不会被初始化。

但是还有一个问题被评论者遗漏了:即使循环执行,如果数组中不存在要搜索的元素,j将永远不会被初始化。


另一方面,您应该能够直接从数组中获取它,而不是将 N 作为参数传递(尽管我现在不记得如何操作)。

这是因为参数N可以等于0,所以循环不是必须运行,或者数组不包含x,所以变量j 不会初始化。 我建议你像 int j = -1; 这样初始化,如果方法 returns -1 你会知道出了什么问题(N = 0 或数组不包含 x).