我想修复我的方法来反转int数组

时间:2019-05-16 02:46:29

标签: java arrays

尝试编写一个方法reverseIntArray(int [] array),该方法应返回整数数组的反向副本。例如,如果array = [1,2,3,4],则该方法应返回数组[4,3,2,1]。

该程序编译无任何错误消息。是什么错误导致程序在运行时出现错误的不正确行为?

public static int[] reverseIntArray(int[] array) { 
    int[] result = new int[10];
    int j = array.length;
    for (int i = 1; i < array.length; i++ ) {
        result[i] = array[j];
        j++;
    } 
    return result; 
}

应如何纠正错误? 错误到底是什么?  该错误会产生什么影响?

3 个答案:

答案 0 :(得分:1)

您需要将j设置为array.length -1而不是array.length,然后将其递减而不是递增,然后将for循环索引从0而不是1开始。

答案 1 :(得分:0)

您的代码有两个问题:

  1. 您创建的result数组的大小为10,而不是传入的数组的大小。如果传入的数组大小较小或较大,则会导致问题大于10。您可以使用int[] result = new int[array.length];
  2. 解决此问题
  3. 您正在使用值为i的{​​{1}}进行初始化。 Java数组从索引1开始,因此您的循环将跳过填充数组的第一个元素。相反,您想要:0
  4. 由于Java数组从索引for (int i = 0; i < array.length; i++) {开始,因此最后一个元素的索引比数组的大小小1。您要:0
  5. 您想以相反的顺序检索int j = array.length - 1;的元素,但是您的代码是递增array而不是递减。您希望jj--的地方

答案 2 :(得分:0)

要解决与数组相关的问题,您必须仅了解其在内存中的存储及其索引。

在您的解决方案中,您试图覆盖值。在解决方案中,您需要先保存旧值,然后再将新值写入任何索引。

注意:您必须知道如何交换两个数字。

        int[] arr={1,2,3,4};
        int i=0;
        int j=arr.length-1;
        while(i<j)
        {
            //Swapping two numbers
            int temp=arr[i];
             arr[i]=arr[j];
            arr[j]=temp;
            i++;
            j--;
        }

您也可以使用for循环进行此操作。