需要帮助解决Java阵列问题

时间:2011-03-10 05:00:43

标签: java arrays integer repeat

我需要一些帮助。我正在尝试组建一个小型Java程序,它创建并返回一个包含a的所有元素的数组,每个元素都是重复的。但是,每次我尝试执行我的代码时,我都会遇到“越界”异常。请告诉我我哪里出错了。谢谢!以下是我到目前为止的情况:

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;
   }
}

5 个答案:

答案 0 :(得分: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];        
} 

答案 1 :(得分:0)

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

因此,数组ja的大小不相等。但循环一直运行到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 ?
}

答案 2 :(得分:0)

你可以这样做

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

}

答案 3 :(得分: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;
}

答案 4 :(得分: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;
}
}