2015-12-15 32 views
1

我有一个分配给创建在其中创建大小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]出于某种原因。

我想知道这是为什么发生,我怎么能解决这个问题。 在此先感谢!

+1

在for循环从'0'迭代,以'编曲。长度-2“和”反向长度-2“。改变你的循环类似于'for(int i = 0; i

+0

感谢@JonnyHenly的帮助! –

回答

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; 

} 

您从arr.length不需要-1

更改另一个for循环也:

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

    source[i] = (int) (Math.random() * 10 + 1); 

} 

在这里,你也不必从source.length-1

+0

@JonnyHenly:雅。但他只创建了9个元素的数组。这就是为什么。 –

+0

'i

+0

@JonnyHenly:完成:) –

2

改变所有的for循环从

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

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

你相反的方法是完全正确的(如果你改变了循环)。所做的错误是创建大小10的阵列,与9个随机值(因此索引10的值将是0)填充它。

2

你可以检查至极指数都在咨询您的每次循环。

这是您的解决方案

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 

的 'i' 没有得到值9,和(reverse.length - 1 - 我)不要“T得到的值为0

改变测试条件是:

i < reverse.length 

给你的最后一个位置:

9 0 
0

com.test包;

公共类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] + " ");  

    } 


} 

}