2D数组打印每行的第一个负数和最后一个负数之间的元素之和

时间:2018-09-28 16:10:03

标签: java arrays multidimensional-array

我无法解决问题。如何找到每行的第一个负数与最后一个之间的元素的总和?我是针对一维数组完成的,但无法针对二维数组进行重写。对于二维数组,我总是有一个答案0。 这是一个示例,在一维数组[-1, 2, 3, -4]中,答案是5[-1, 2, 3, -4, 5]答案是5(如果我们有[1, -2, 3, -4]答案是{{1 }}。二维数组中应该相同。怎么解决呢?请帮助我。

这是一个代码

3

2 个答案:

答案 0 :(得分:2)

怎么样?

static int negSum(int[] a)
{
  int sum = 0;
  for(int i=0; i<a.length; i++)
  {
    if(a[i] < 0)
    {
      for(int j=i+1; j<a.length && a[j]>=0; j++)
        sum += a[j];
      break;
    }
  }
  return sum;
}

如果数组仅包含一个负数,则求和到数组末尾。如果要在这种情况下返回0,只需检查j == a.length之前是否在break之前,然后将sum设置为0。

测试:

public static void main(String[] args)
{
  int tests[][] = new int[][] {
    {-1, 2, 3, -4},
    {-3, 5, 6,  8},
    {9, 2, 3, -1},
    {-1, 2, 3, -4, 5},
    {1, -2, 3, -4},
    };

    for(int[] test : tests)
      System.out.printf("%s : % d\n",Arrays.toString(test), negSum(test));
}

输出:

[-1, 2, 3, -4] :  5
[-3, 5, 6, 8] :  19
[9, 2, 3, -1] :  0
[-1, 2, 3, -4, 5] :  5
[1, -2, 3, -4] :  3

答案 1 :(得分:1)

您绝对应该拆分功能。

只需使用一个函数即可计算数组的总和。 然后计算二维数组中的每个和:

public void calculateSum() {
    int a[][] = new int[][] { { -1, 2, 3, -4 }, { -3, 5, 6, -8 }, { -9, 2, 3, -1 }, { -7, 2, 3, -9 }};

    int sums[] = new int[a.length];
    for (int i = 0; i < a.length; i++) {
        sums[i] = getSumBetweenNegatives(a[i]);
        System.out.println(sums[i]);
    }
}

public int getSumBetweenNegatives(int[] a) {
    int sum = 0;
    int indexFirstNegative = -1;
    int indexSecondNegative = -1;
    for (int i = 0; i < a.length; i++) {
        if (a[i] < 0 && indexFirstNegative == -1) {
            indexFirstNegative = i;
        }
        else if (a[i] < 0) {
            indexSecondNegative = i;
            break;
        }
    }

    // maybe check if two negatives were found
    for (int i = indexFirstNegative + 1; i < indexSecondNegative; i++) {
        sum += a[i];
    }

    return sum;
}

如果您需要二维数组的完整和,只需将结果再加起来