2012-01-21 61 views
0

我試圖做一個方法,期望int和兩個int S1int S2數組作爲參數。整數表示參數數組內子數組的起始位置和結束位置。該方法返回一個新的數組,其中包含從開始位置到結束位置的元素。我如何獲得數組方法給我正確的輸出?

這是我有什麼,但它一直給我這個消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException 
    at java.lang.System.arraycopy(Native Method) 
    at testing.subArray(testing.java:14) 
    at testing.main(testing.java:9) 

下面的代碼:

public class testing{ 

public static void main(String args[]) 
{ 
int[] firstArray = {8,9,10,11,12,13}; 
subArray(firstArray, 2, 4); 
} 

public static void subArray(int[]originalArray, int S1, int S2) 
{ 
int[] copy = new int[3]; 
System.arraycopy(originalArray, S1, copy, S2, 2); 

for (int i = 0; i < copy.length; i++){ 
     System.out.println(copy[i]);} 
} 

} 

請幫助! :)

回答

2

該方法返回一個新的數組,其中包含從開始位置到結束位置的元素。

目前它不返回任何東西(這是一個void方法)。但是,如果您想讓工作儘可能簡單,則可以使用Arrays.copyOfRange()

至於你當前的代碼,下面是一些提示:

  1. 你爲什麼總是分配爲copy三個要素?陣列的大小應該取決於S1S2
  2. 參數arraycopy()完全是錯誤。閱讀Java文檔的相關部分,找出正確的值。
+0

+1媽的,打我吧:-)。 – helpermethod

+0

Eeek,對不起...我是初學者..只有一個學期。我會努力的,謝謝 – pearbear

+0

我做了你所說的,但它說它找不到符號'Arrays'。 'public static void main(String args []) { int [] firstArray = {8,9,10,11,12,13}; subArray(firstArray,2,4); } 公共靜態無效子陣列(INT [] originalArray,INT S,INT E) { \t INT []複製= Arrays.copyOfRange(originalArray,S,E); \t對(INT I = 0; I pearbear

0

你會發現,這種效果要好得多:

public class testing { 

    public static final int DEFAULT_LENGTH = 3; 

    public static void main(String args[]) { 
     int[] firstArray = {8, 9, 10, 11, 12, 13}; 
     int [] subArray = createSubArray(firstArray, 2, 4); 
     for (int i = 0; i < subArray.length; i++) { 
      System.out.println(subArray[i]); 
     } 
    } 

    public static int [] createSubArray(int[] originalArray, int startPosition1, int valuesToCopy) { 
     int subArrayLength = Math.min((originalArray.length-startPosition1), valuesToCopy); 
     int [] subArray = new int[subArrayLength]; 
     System.arraycopy(originalArray, startPosition1, subArray, 0, subArrayLength); 

     return subArray; 
    } 

}