2015-12-15 33 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] + " ");  

    } 


} 

}