【问题标题】:Why does this piece of code say variable j might not have been initialized?? It is getting initialized inside the loop [closed]为什么这段代码说变量 j 可能没有被初始化?它正在循环内初始化[关闭]
【发布时间】:2020-10-25 11:55:10
【问题描述】:
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没有初始化。我无法理解,因为我是编码新手。请帮助我

【问题讨论】:

  • 如果循环从不执行怎么办?你返回什么?
  • 简单的回答,在编译时,编译器不会知道for循环是否会执行。所以你需要初始化你的变量。

标签: java for-loop variables initialization


【解决方案1】:

在 Java 中,for 循环是预测试循环:测试 (i&lt;N) 在循环体之前执行。所以如果N 小于或等于i (0) 的初始值,那么循环永远不会执行,j 永远不会被初始化。

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


另一方面,您应该能够直接从数组中获取它,而不是传递 N 作为参数(虽然我现在不记得如何做到这一点)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多