我无法解决问题。如何查找每行的第一个负数和最后一个负数之间的元素的总和?我对一维数组做了它,但无法重写二维数组。对于二维数组我总是有一个答案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/