变异Java数组
我正在研究一个编码问题,我们必须将一个现有的数组变异成一个新的数组。规则是数组索引处的元素等于a[i-1]+a[i]+a[i+1]。问题是,如果a[i-1]或a[i+1]不存在,则应将其计为零 我的测试用例通过了每一个值,直到最后一个值,我不明白为什么它没有被计算,当其他值都被计算时变异Java数组,java,Java,我正在研究一个编码问题,我们必须将一个现有的数组变异成一个新的数组。规则是数组索引处的元素等于a[i-1]+a[i]+a[i+1]。问题是,如果a[i-1]或a[i+1]不存在,则应将其计为零 我的测试用例通过了每一个值,直到最后一个值,我不明白为什么它没有被计算,当其他值都被计算时 int[] mutateTheArray(int n, int[] a) { int b[] = new int[a.length + 1]; if(a.length == 1) {
int[] mutateTheArray(int n, int[] a)
{
int b[] = new int[a.length + 1];
if(a.length == 1)
{
return a;
}
for(int i = 0; i < a.length - 1; i++)
{
if(i == 0)
{
b[0] = 0 + a[i] + a[i + 1];
}
if(i == a.length)
{
b[a.length] = a[i - 1] + a[i] + 0;
}
else if(i != a.length && i != 0)
{
b[i] = a[i - 1] + a[i] + a[i + 1];
}
}
return b;
}
输出应为数组a=[4,0,1,-2,3],输出应为:[4,5,-1,2,1]。我得到的答案除了最后一个值,它是0。我知道问题在于访问数组索引-1,但我不知道如何获取每个元素而不使其超出范围。感谢您的帮助,谢谢:
数组b的大小应为a.length,而不是a.length+1。
您应该将for循环的条件更改为iint[] mutateTheArray(int n, int[] a)
{
int b[] = new int[a.length];
if(a.length == 1)
return a;
for(int i = 0; i < a.length; i++)
{
if(i == 0)
{
b[0] = 0 + a[i] + a[i + 1];
}
else if(i == a.length-1)
{
b[a.length-1] = a[i - 1] + a[i] + 0;
}
else
{
b[i] = a[i - 1] + a[i] + a[i + 1];
}
}
return b;
}
。。。或使用三元运算符时:
int[] mutateTheArray(int n, int[] a)
{
int b[] = new int[a.length];
if(a.length == 1)
return a;
for(int i = 0; i < a.length; i++)
{
b[i] = (i == 0 ? 0 : a[i - 1]) + a[i] + (i == a.length-1 ? 0 : a[i + 1]);
}
return b;
}
PS:从b编辑[a.length]=。。。到b[a.length-1]=。。。在第15行。int[]替换数组n,int[]a{
int b[]=新int[a.长度];
forint i=0;i