总结Java中2D整数数组中的外部元素?

时间:2016-11-07 04:03:27

标签: java arrays loops multidimensional-array nested-loops

我的考试中的一个问题要求编写一些代码来计算2D数组的外部int元素的总和。行长和列长度不一定相等。

[编辑]角落值不能多次添加。

我提出了这个代码并且它有效,但我想知道是否有更有效的方法来实现相同的结果。感谢。

for(int i = 0; i < in.length; i ++) { for(int j = 0; j < in[i].length; j++) { if(i == 0 || i == in.length - 1) { sum += in[i][j]; } else { sum += in[i][in[i].length - 1 ] + in[i][0]; break; } } }

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,那么你可以先提取一个方法来添加一个数组的元素,如

public static int sumArray(int[] in) {
    int sum = 0;
    for (int val : in) {
        sum += val;
    }
    return sum;
}

然后你可以在第一行和最后一行添加元素,如

int sum = sumArray(in[0]) + sumArray(in[in.length - 1]);

然后来自其他行的外部元素带有一个额外的(非嵌套的)循环,如

for (int i = 1; i < in.length - 1; i++) {
    sum += in[i][0] + in[i][in[i].length - 1];
}

,在Java 8+中,您可以删除额外的方法和显式循环,并使用一个语句(如

)来完成
int sum = IntStream.of(in[0]).sum() //
        + IntStream.of(in[in.length - 1]).sum() //
        + IntStream.range(1, in.length - 1).map(i -> {
            return in[i][0] + in[i][in[i].length - 1];
        }).sum();

答案 1 :(得分:1)

是的,你可以更有效地做到这一点。

int row = in.length;
int column = in[0].length;//not sure of this syntax but trying to get the column size
int sum = 0;

for(int j=0;j<column;j++)
{
    sum+=in[0][j]+in[row-1][j];
}
for(int j=1;j<row-1;j++)
{
    sum+=in[j][0]+in[j][column-1];
}

你的解决方案是O(mn),循环遍历不必要的索引。