变异Java数组

变异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) {

我正在研究一个编码问题,我们必须将一个现有的数组变异成一个新的数组。规则是数组索引处的元素等于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) 
    {
        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循环的条件更改为i 总而言之,您的代码如下所示:

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++) 
    {
        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;i0?a[i-1]:0; b[i]+=iifi==a.length应该是ifi==a.length-1。最后一个else if的条件可以直接删除。请注意,您永远不会达到i==a.length,因为for循环的条件是i