我正在解决一个编码问题,我们必须将现有数组转变为新数组。规则是数组索引处的元素等于 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 < a.length
,因为应包含最后一个元素。 - 您的第二个 if 条件应该是
i == a.length - 1
。 (注意:Array.length
返回数组中元素的数量,即最后一个索引 + 1。)
另外,您可以使用else if
,因为如果第一个条件满足,则无法满足此条件。 - 最后一个 if 条件是不必要的,因为现在条件始终为 false。只需使用
else
.
顺便说一句:您可能想研究一下三元运算符。
总而言之,您的代码将如下所示:
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 行。
关于java - 改变 Java 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60406499/