我需要一些帮助。我正在尝试组建一个小型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;
}
}
答案 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];
因此,数组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 ?
}
答案 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;
}
}