【问题标题】:Adding a Matrix and an Array添加矩阵和数组
【发布时间】:2017-10-31 08:49:55
【问题描述】:

我目前正在尝试添加一个带有数组的矩阵。

这是我现在的代码:

public void add(Matrix m) {

    for(int i = 0; i == values.length; i++) {
        for(int j = 0; j == values.length; j++) {
            m.values[i][j] = m.values[i][j] + values[i][j];
        }
    }

}

如果能得到任何帮助,我将不胜感激,谢谢!

【问题讨论】:

  • i == values.length -> i < values.lengthj 也一样
  • @Eran 已经尝试过了,我在 Matrix.main(Matrix.java: 101)然后。
  • 那么,m.valuesvalues 的尺寸是否相同?行数是否等于列数?你在假设这些事情。
  • 矩阵:矩阵 m = new Matrix(new int[][] { { 2, 4, 5 }, { 3, 7, 2 }, { -2, 0, 1 }, { 5 , 1, 1 } });
  • 尝试使用for (int i = 0; i < values.length; i++) { for (int j = 0; j < values[i].length; j++) {

标签: java arrays matrix


【解决方案1】:

在 Java 语言中没有矩阵或 2D 或 nD 数组的单词,只有数组的数组。

关于你的问题试试这个:

for (int i = 0; i < values.length; i++) {
    for (int j = 0; j < values[i].length; j++) {
  • 第一个循环for (int i = 0; i &lt; values.length; i++) {返回 一个数组一个数组 { 2, 4, 5 }{ 3, 7, 2 }{ -2, 0, 1 } 和 { 5, 1, 1 }
  • 第二个循环for (int j = 0; j &lt; values[i].length; j++) {返回 第一个循环中每个数组的值如果我们取第一个数组,它将返回245

【讨论】:

  • 对不起,我不太明白。你能解释一下代码中的第二部分吗?
  • @TimoGüntner 第二部分等同于int[] array = values[i]; for (int j = 0; j &lt; array.length; j++) { 就是这样你明白了;)
  • 它仍然不适合我。你能再帮我一次吗,我会把你标记为最佳答案。
  • 矩阵 M 的值不会改变。你能给我一个工作的例子吗?
  • @TimoGüntner 你能分享完整的代码吗?你的代码中有很多匿名的东西,例如values 是什么,m 是什么
【解决方案2】:

检查 Array 和 Matrix 的维度是否相同。

public void add(Matrix m) {
    for(int i = 0; i < values.length; i++) {
        for(int j = 0; j < values[i].length; j++) {
            m.values[i][j] = m.values[i][j] + values[i][j];
        }
    }
}

【讨论】:

  • 线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 3 at Matrix.add(Matrix.java:23) at Matrix.main(Matrix.java:101)
  • 矩阵和二维数组的维数一样吗?此错误似乎暗示情况可能并非如此。
【解决方案3】:

如果要添加矩阵,可以在 Java 中使用循环,也可以使用流。这是使用流的矩阵加法的示例实现:

public class MatrixOperations {

    public static double[][] add(double[][] a, double[][] b) {
        return range(0, a.length).boxed().collect(
                () -> new double[a.length][a[0].length], // create the accumulator matrix which is to be returned
                (acc, row) -> range(0, a[row].length).forEach(col -> acc[row][col] = a[row][col] + b[row][col]), // sum each value
                (acc, r) -> {}); // ignore
    }

    // Test method
    public static void main(String[] args) {
        double[][] a = {{1.0, 3.0}, {1.0, 0.0}, {1.0, 2.0}};
        double[][] b = {{.0, .0}, {7.0, 5.0}, {2.0, 1.0}};
        double[][] sum = add(a, b);
        Stream.of(sum).map(Arrays::toString).forEach(System.out::println);
    }
}

如果你运行这个类,你会得到以下输出:

[1.0, 3.0]
[8.0, 5.0]
[3.0, 3.0]

【讨论】:

    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2015-06-29
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多