从给定数组创建逆序数组

时间:2015-12-15 09:02:52

标签: java arrays

我有一个创建一个类的赋值,我在其中创建一个大小为10的数组,称为source,并将0-10范围内的随机整数分配给其中的所有索引,然后调用一个方法以相反的顺序创建一个新数组。我尝试了下面的代码:

public class Exercise7_4 {

    // reverse array method
    public static int[] reverseArray(int[] arr) {
        int[] reverse = new int[arr.length];

        for (int i = 0; i < reverse.length - 1; i++) {
            reverse[i] = arr[arr.length - 1 - i];
        }

        return reverse;
    }

    // print array in ascending order
    public static void printArray(int[] arr) {

        for (int i = 0; i < arr.length - 1; i++) {
            System.out.printf("%d\t", arr[i]);
        }

        System.out.println();
    }

    public static void main(String[] args) {
        int[] source = new int[10];

        for (int i = 0; i < source.length - 1; i++) {
            source[i] = (int) (Math.random() * 10 + 1);
        }

        int[] reverse = reverseArray(source);
        printArray(source);
        printArray(reverse);
    }
}        

问题是我得到的输出如下:

7   1   3   7   10  9   6   2   6   
0   6   2   6   9   10  7   3   1

意思是reverseArray方法由于某种原因无法在reverse[0]上正常工作。

我想知道为什么会这样,以及我如何解决它。 在此先感谢!

4 个答案:

答案 0 :(得分:2)

更改所有for循环
for (int i = 0; i < source.length - 1; i++)

for (int i = 0; i < source.length; i++)

您的反向方法完全正确(如果您更改循环)。你犯的错误是你创建了一个大小为10的数组,用9个随机值填充它(因此索引10的值将为0)。

答案 1 :(得分:2)

您可以检查在for循环的每次迭代中是否参考了索引。

这是您的解决方案

    for (int i = 0; i < reverse.length - 1; i++) {
        System.out.println("" + i + " " +  (reverse.length - 1 - i));        
    }

它打印出来:

0 9                                                                                                                                                                                                                                                    
1 8                                                                                                                                                                                                                                                    
2 7                                                                                                                                                                                                                                                    
3 6                                                                                                                                                                                                                                                    
4 5                                                                                                                                                                                                                                                    
5 4                                                                                                                                                                                                                                                    
6 3                                                                                                                                                                                                                                                    
7 2                                                                                                                                                                                                                                                    
8 1 

&#39;我&#39;没有得到值9,而(reverse.length - 1 - i)得不到值0.

更改测试条件:

i < reverse.length

给你最后的位置:

9  0

答案 2 :(得分:1)

更改reverseArray功能如下:

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

int[] reverse = new int[arr.length];

for (int i = 0; i < reverse.length; i++) {

    reverse[i] = arr[arr.length - i];

}


return reverse;

}

您无需-1的{​​{1}}。

还要更改另一个for循环:

arr.length

此处,您也无需从for (int i = 0; i < source.length; i++) { source[i] = (int) (Math.random() * 10 + 1); } 开始-1

答案 3 :(得分:0)

package com.test;

public class SortArray {

private int[] getSortedArry(int[] arr){

    int arrLen = arr.length;
    int reversedArry[] = new int[arrLen]; 
    System.out.println("array lenght: " +arr.length);
    int j = 0;
    for(int i=arrLen-1; i>=0; i--){

        reversedArry[j] = arr[i];


        j++;

    }
    System.out.print("\n");
    return reversedArry;

}

public static void main(String[] args){

    int arr[] = {10,2,3,4,5,12,23,43,45,65};

    SortArray sortArray = new SortArray();
    int reversedArry[] = sortArray.getSortedArry(arr);

    for(int i=0;i<reversedArry.length;i++){
        System.out.print(reversedArry[i] + " ");    

    }


}

}