为什么这段代码说变量 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
).
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
).