2011-03-10 112 views
1

我需要一點幫助。我試圖把一個小的Java程序放在一起,創建並返回一個包含a的所有元素的數組,每個元素都是重複的。但是,每次我嘗試執行我的代碼時,都會遇到「越界」異常。請給我一個我要去哪裏錯的想法。謝謝!這是我到目前爲止:需要幫助解決Java陣列問題的問題

public class integerStutter 
{ 
    public static int[] stutter(int [] a){ 
     int[] j = new int[a.length*2]; 

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

      j[i] = a[i]; 
      j[i+1] = a[i]; 
      i++; 
    } 
    return j; 
    } 
} 

回答

2

舊的和新的陣列大小不相同。您嘗試使用新數組的有效索引訪問舊數組中的元素(該數組的大小是雙倍大小),並導致異常。

而是嘗試:

// iterate over the old array. 
for(int i=0; i < a.length; i++){ 

     // index into new array. 
     int x = 2 * i; 

     // copy old array ele at index i into new array at index x and x+1. 
     j[x] = j[x+1] = a[i];   
} 
+0

+1神之一,它解決了這個問題,見我的回答也實在是一種選擇。 – Ishu 2011-03-10 05:28:01

0
int[] j = new int[a.length*2]; 

因此,陣列j的大小,a是不相等的。但是,循環運行,直到j.length -

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

    j[i] = a[i]; // array out of bounds once i passes a.length 
    j[i+1] = a[i]; // array out of bounds once i passes a.length 
    i++; // Why again incrementing here ? 
} 
0

,你可以做這樣的

for(int i=0,k=0;i<a.length;i++,k=k+2) 
{ 
    j[k]=j[k+1]=a[i]; 

} 
0

如果我理解正確的問題,這會做你的需要。這也是一個不錯的清潔解決方案。

public static int[] stutter(int[] a) { 
    int[] j = new int[a.length * 2]; 

    for (int i = 0; i < a.length; i++) { 
     j[i * 2] = a[i]; 
     j[i * 2 + 1] = a[i]; 
    } 

    return j; 
} 
0
public class integerStutter 
{ 
public static int[] stutter(int [] a){ 
    int[] j = new int[a.length*2]; 

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

     j[i] = a[i]; 
     j[i+1] = a[i]; 
     i++; 
    } 
    return j; 
} 
} 
+0

歡迎來到堆棧溢出,如果你提供一些解釋如何解決OP的問題可能會有所幫助。 – Wez 2015-04-14 21:59:56