当前位置: 首页 > 知识库问答 >
问题:

编写一个名为arraySum的函数,返回int值(Java)的二维数组中所有值的总和(作为int)

仲孙思源
2023-03-14

我正在尝试对2D数组的所有int值求和。我把它命名为数组。我的函数称为arraySum。如果arraySum为null,则返回0。否则,它将经过两个for循环,对这些数组的值求和。

int i = 0;
int j = 0;
static int sum = 0;
int[][] array = new int[i][j];
static int arraySum(int[][] array) { 
    if (array == null) {  // test if the incoming param is null
        return 0;
    } else { 
        for (int i = 0; i < array.length; i++) {  // length of the outer array
            for (int j = 0; j < array[i].length; j++) {  // length of the inner array
                sum += array[i][j];
            }
        }
        return sum;  // moved out of the loop
    }
} 

我的错误消息:

java.lang.AssertionError: Incorrect result:  expected [-217085] but found [-308126] 


共有3个答案

司空瑾瑜
2023-03-14

流也可以做到这一点:

//Create 2D array
int[][] array = {{1,2,3},{4,5},{6}}; 

//Sum all elements of array
int sum = Stream.of(array).flatMapToInt(IntStream::of).sum(); 

System.out.println(sum);

拆开求和代码:

Stream.of(array)

将< code>int[][]类型的2D数组转换为< code >流

因此,此时我们将有一个包含以下内容的流:

  • 包含{1,2,3}
  • 的int[]数组
  • 包含{4,5}
  • 的int[]数组
  • 包含{6}的int[]数组
.flatMapToInt(IntStream::of)

到目前为止,我们有一个int[]的流,仍然是二维的。平面映射将结构扁平化为单个int流。

将流中的每个int元素扩展为一个或多个int值。IntStream.of()获取一个数组并将其转换为一个int流。将这两个元素组合在一起可以得到一个int值流。

在展平之后,我们将得到一个int流:

{1,2,3,4,5,6}

.sum()

现在我们有一个IntStream,其中包含从原始2D数组扩展的所有元素,这仅获取所有值的总和。

现在是免责声明 - 如果你是Java的新手并且正在学习数组,这可能有点太高级了。我建议学习嵌套 for 循环和迭代数组。但是,了解 API 何时可以为您完成大量工作也很有用。

阳建弼
2023-03-14

避免使用primitive for语句。请参见以下内容:

    static int arraySum(int[][] array) {
        int sum = 0;
        if (array == null) return 0;

        for(int[] row: array){
            for(int col : row) {
                sum += col;
            }
        }
        return sum;
    }
裴泰平
2023-03-14
  1. 修复方法签名是第一步。
  2. 然后你需要修复空检查。
  3. 然后你的循环需要检查内外数组的大小。
  4. 移动返回语句。

以下是固定代码:

static int arraySum(int[][] array) {  // fix the signature
    if (array == null) {  // test if the incoming param is null
        return 0;
    } else { 
        int sum = 0;  // you need this in the scope of the method - it will be returned at the end
        for (int i = 0; i < array.length; i++) {  // length of the outer array
            for (int j = 0; j < array[i].length; j++) {  // length of the inner array
                sum += array[i][j];
            }
        }
        return sum;  // moved out of the loop
    }
}

编辑:我现在只专注于方法 - 你如何称呼它取决于你。请注意,该方法不会影响任何外部定义的 sum 变量。它将返回总和,并由调用方将该值存储在某个位置。

 类似资料:
  • 编写一个程序,返回一个新数组,该数组包含所有大于数组中第一个值的值。如果数组中没有大于第一个值的值,则返回空数组。如果数组为空,则返回一个空数组。 我这样解决这个问题: 谢谢

  • 问题内容: 如果我有 我有: 然后,我可以成功执行以下操作: 但是,假设我要在doSomething中添加另一个参数,例如: 如果我这样称呼,Go在编译时会抱怨: 带有: 有没有办法做到这一点,还是我应该放弃并将返回值分配给某些引用,并将msg和这些值传递给? 问题答案: 在规范中对此进行了描述。它要求内部函数返回所有参数的正确类型。没有多余的参数以及返回多个值的函数。 作为一种特殊情况,如果一个

  • 如果指针类型作为函数参数,修改形参会影响实参 不能将函数内的指向局部变量的指针作为返回值,函数结束指向空间会被释放 可以将函数内的局部变量作为返回值,本质是拷贝一份

  • 本文向大家介绍返回JavaScript中数组的最小值和最大值的函数,包括了返回JavaScript中数组的最小值和最大值的函数的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个接受一个数组并返回另一个数组的JavaScript函数,该数组的第一个元素应该是输入数组的最小元素,第二个应该是输入数组的最大元素。 示例 以下是代码- 输出结果

  • 我一直在找这样的东西,但我找不到,所以就来了。 一些背景 我使用opencv从视频文件中检索帧。通常人们会无休止地循环这样做: 或 现在我想检索所有帧并在没有更多帧时退出循环。然而,我在python中的技能还不够强,无法做我想做的事情。 我想知道的是 函数(或方法,我不知道它们在python中是如何调用的)返回一个元组:首先代表操作成功,其次代表返回的帧。当元组的第一个元素为false时,我想打破

  • 问题内容: 我想编写以下功能,该功能应在Excel工作表中使用: …这将通过ODBC在内部连接到SQL数据库,然后在其中执行 并将返回结果值作为函数GetRecField的结果。上面的SQL被授权仅返回一个记录(IOW KEY_FIELD具有唯一约束)。 当然,上面的函数可以在工作表中多次调用,所以请尽量避免盲目 TIA。 问题答案: 您可以编写一个自定义函数来做到这一点 打开VBA编辑器(ALT