-1

for 循环中的值是否在 Java 中给出布尔结果?编译代码时出现此错误:

prog.java:52:错误:不兼容的类型:int 不能转换为布尔值 for(int i=0;i=n/2;i++){

public static void reverseArray(int arr[], int n) {
    // Your code here
    
        int temp;
        int i=0;
        for(i=0;i=n/2;i++){
            temp = arr[i];
            arr[i]=arr[n-i];
            arr[n-i]=temp;
        }

    }
4

1 回答 1

0
  1. for需要固定循环的第二个参数以提供布尔表达式:i < n/2
  2. 交换元素时,最后一个元素的索引是n - i - 1因为 Java 中的数组索引是从零开始的:[0..n - 1]make nelements。

因此,更新后的函数可能会像这样(所有相关的变量声明都移动到for循环内):

public static void reverseArray(int[] arr, int n) {
    for (int i = 0, j = n - 1; i < n/2; i++, j--) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

此外,实现的方法允许反转输入数组的部分n元素,因此最好有一个仅接受参数的重载版本,并使用andarr的最小值来防止:narr.lengthArrayIndexOutOfBoundsException

public static void reverseArray(int[] arr) {
    reverseArray(arr, arr.length);
}

public static void reverseArray(int[] arr, int n) {
    for (int i = 0, m = Math.min(n, arr.length), j = m - 1; i < m/2; i++, j--) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

测试:

int[] arr = {1, 2, 3, 4, 5};
      
reverseArray(arr, 3);

System.out.println("After reverse: " + Arrays.toString(arr));

输出:

After reverse: [3, 2, 1, 4, 5]
于 2021-07-23T19:24:03.350 回答