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) 
    {
        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 上,但我不知道如何在不超出范围的情况下获取每个元素。感谢任何帮助,谢谢:)

最佳答案

  1. 您的数组 b尺寸应为 a.length ,不是a.length + 1
  2. 您应该将 for 循环的条件更改为 i < a.length ,因为应包含最后一个元素。
  3. 您的第二个 if 条件应该是 i == a.length - 1 。 (注意: Array.length 返回数组中元素的数量,即最后一个索引 + 1。)
    另外,您可以使用 else if ,因为如果第一个条件满足,则无法满足此条件。
  4. 最后一个 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/

相关文章:

Java:并发HashMap

java - 计算 n 个骰子总和的方法(不使用数组)

java - 使用 hibernate 创建 MySQL 表的问题

java - JCEF 与 JavaFX fatal error

java - 在 Java 中执行类的构造函数

java - 在 Spring 中初始化已经创建的对象

java - 不同类型的数组声明

java - 如何使用StringUtils和myString,获取无法解决错误

使用 lambda 前后的 Java 8 Cucumber

java - 在 JPanel 中更新矩形或任何其他图像的位置而不重叠