java - 二维数组打印每行第一个负数和最后一个负数之间的元素之和

标签 java arrays multidimensional-array

我无法解决问题。如何查找每行的第一个负数和最后一个负数之间的元素的总和?我对一维数组做了它,但无法重写二维数组。对于二维数组我总是有一个答案0 。 这是一维数组 [-1, 2, 3, -4] 的示例答案将是5[-1, 2, 3, -4, 5]答案是5如果我们有[1, -2, 3, -4]答案是3 。二维数组中应该是一样的。怎么解决呢?请帮助我。

这是一个代码

public void another() {

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

            System.out.println(Arrays.deepToString(a));

            int sum = 0;
            int min = 0; int min_j = 0;
            int kol = 0, firstNeg_i = 0, nextNeg_i = 0;
            int firstNeg_j = 0, nextNeg_j = 0;

            if (a[0][0] < 0) {
                kol++;
                firstNeg_i = 0; firstNeg_j = 0;
            }

            for (int i = 1; i < a.length; i++) {
                for(int j = 1; j < a.length; j++) {
                    if (a[min][min_j] > a[i][j]) {
                        min = i;
                        min_j = j;
                    }
                    if ((a[i][j] < 0) && kol < 1) {
                        firstNeg_i = i;
                        firstNeg_j = j;
                        kol++;
                        i++; j++;
                    }

                    if ((a[i][j] < 0) && kol < 2) {
                        nextNeg_i = i; nextNeg_j = j;
                        kol++;
                    }
                }
            }

            for (int i = firstNeg_i + 1; i < nextNeg_i; i++) {
                for (int j = firstNeg_j + 1; j < nextNeg_j; j++) {
                    sum += a[i][j];
                    //System.out.println(sum);
                }
            }
            System.out.println(sum);
        }

最佳答案

这个怎么样?

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,只需在 break 之前检查是否 j == a.length ,如果是,则将 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

关于java - 二维数组打印每行第一个负数和最后一个负数之间的元素之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52559121/

相关文章:

java - 连接到 NTP 服务器始终失败 (Java)

C++:按顺序访问元素时,访问 C 数组的速度要快得多

ios - 为什么我的 Dictionary Item 总是返回 0? swift

php - Codeigniter - 单个 mysql 列中可能存在多维数组数据存储吗?

php - 过滤递归数组并仅删除 NULL 值

c++ - Eigen 和巨大的密集二维阵列

java - 编辑 1 年前到 6 个月前的 Java Date 语句

java - 抛出接口(interface)中未定义的异常

Java:打印数组:IndexOutOfBoundsException:索引:2,大小:2

java - 通过 Intent 传递内部带有 arraylist 的对象