有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法解析Java函数局部变量

我试图构建一个选择排序程序,当我试图在第二个for循环之后显示arr[index]值时,我得到了一个编译错误

错误:

j cannot be resolved to a variable

public static int[] doSelectionSort(int[] arr) {

    for (int i = 0; i < arr.length - 1; i++) {
        int index = i;

        for (int j = i + 1; j < arr.length; j++)
            System.out.println(arr[index]);
            if (arr[j] < arr[index])
                index = j;

        int smallerNumber = arr[index];
        arr[index] = arr[i];
        arr[i] = smallerNumber;
    }
    return arr;
}

共 (4) 个答案

  1. # 1 楼答案

    当你在循环中声明变量j时,它是循环的局部变量,所以如果没有大括号,你不能像你想的那样使用这个变量

  2. # 2 楼答案

    您缺少内部for-loop中的{},因此当找到第一个;时,循环的范围结束。然后:jif条件中不存在

    public static int[] doSelectionSort(int[] arr) {
    
        for (int i = 0; i < arr.length - 1; i++) {
            int index = i;
    
            for (int j = i + 1; j < arr.length; j++) {
            //                                       ↑  here!
                System.out.println(arr[index]);
                if (arr[j] < arr[index])
                    index = j;
            }
        //  ↑  here!
    
            int smallerNumber = arr[index];
            arr[index] = arr[i];
            arr[i] = smallerNumber;
        }
        return arr;
    }
    
  3. # 3 楼答案

    改变:

    for (int j = i + 1; j < arr.length; j++)
        System.out.println(arr[index]);
        if (arr[j] < arr[index])
           index = j;
    

    致:

    for (int j = i + 1; j < arr.length; j++){
        System.out.println(arr[index]);
        if (arr[j] < arr[index])
            index = j;
    }
    
  4. # 4 楼答案

    你必须在第二个for循环之后使用{}