2014-12-24 24 views
2

我在創建一個簡單的方法來將數組中的第一個元素移動到數組的後面。在數組中移動元素的方法

這裏是我的代碼

public class Ex5_ShiftLeft {  
    public static void main(String[] args) { 
    int[] a = new int[] {6, 2, 5, 3}; 
    swap (a); 

    } 

    public static void swap(int[] array){ 
     array[0] = array[array.length]; 
     System.out.println(Arrays.toString(array)); 
    } 
} 

Eclipse中似乎並沒有檢測到錯誤我的代碼,但是當我運行它,我得到了錯誤的文字

「異常線程」 main 「java.lang.ArrayIndexOutOfBoundsException: 4在 apollo.exercises.ch04_loops.Ex5_ShiftLeft.swap(Ex5_ShiftLeft.java:19) 在 apollo.exercises.ch04_loops.Ex5_ShiftLeft.main(Ex5_ShiftLeft.java:1)」

任何提示?

+0

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html – Tom

回答

2

數組表示您的程序保留存儲一系列數字或其他任何數據的內存段。因此,數組不能調整大小;你不能超越你保留的內存段的末尾,因爲另一個程序可能正在使用該內存。你的解決方案不起作用,因爲它試圖獲取第一個元素並將其放在數組的末尾之後,這是超出界限的。相反,您必須記住第一個元素,然後將除第一個空格之外的每個元素移到左側以在數組末尾創建空間,然後可以將第一個元素放在數組的末尾。

-1

錯誤是由於行:

array [0] = array [array.length];

如果要訪問的數組的最後一個元件和其填充到陣列[0],然後使用下面

陣列[0] =陣列[array.length-1];

+0

正確,但並不能解決問題,因爲他以書面形式描述。 – Vitruvius

0

數組的大小基本上是靜態的。 爲此,您可以使用動態的ArrayList

-1

使用array[0] = array[array.length - 1];訪問Array中的最後一項。

+0

正確,但並未解決問題,正如他以書面形式描述的那樣。 – Vitruvius

2

我把它當成你的初學者,所以我會說只是保持在它,你一定會改善。我提高了你的代碼下面爲您提供:

public class Ex5_ShiftLeft {  
    public static void main(String[] args) { 
    int[] a = {6, 2, 5, 3}; 
    swap (a); 
} 

public static void swap(int[] array){ 
    int temp = array[0] 
    array[0] = array[array.length-1]; 
    array[array.length-1] 

    for(int x : array){ 
     System.out.println(x+" "); 
    } 
    } 
} 

變化: 你可以聲明一個數組只是這樣的:INT [] myArray的= {6,2,5,3};

交換功能出現問題。你必須創建臨時變量,所以你可以換用last.Also數組的第一個元素,數組的最後一個元素是數組[array.length-1]

其次,我用了一個增強有關─循環打印出陣列。希望這可以幫助

+0

對不起,swap函數的最後部分應該是array [array.length-1] = temp; – sparrow

+0

謝謝你!請問爲什麼我們必須創建一個臨時變量?數組[0]本身不是一個變量嗎? –

+1

如果你拿第一個元素並且說這是最後一個元素,那麼你會從哪裏得到最後一個元素來說明它現在是第一個元素。你必須把它存放在臨時的地方,取回它並說現在是第一個元素 – sparrow