java—如何在两个分数矩阵之间进行加法

ubof19bj  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(435)

我有一门矩阵课 fillMatrix() 以及 printMatex() 方法,它是分数矩阵,使用hashmap填充: HashMap <Integer, ArrayList<Number>> (具有行和列格式)
数是一类用加减法和分式的方法。我要求用一种方法 Matrix 类在两个矩阵之间进行加法,如下所示:
该类有一个公共的空白 addMatrices (Matrix, Matrix) 它有两个矩阵作为参数,它计算这些矩阵的和。
我写了这个代码,但没用。它给了我这个错误:

Incompatible types: ArrayList<Number>cannot be converted  to Number

这是我的密码

public void addMatrices(Matrix m1, Matrix m2) {    
    HashMap<Integer, ArrayList<Number>> matrix3 = new HashMap<Integer, ArrayList<Number>>();

    HashMap<Integer, ArrayList<Number>> matrix1 = m1.hMap;
    HashMap<Integer, ArrayList<Number>> matrix2 = m2.hMap;

    Number ob = new Number();

    for (int i = 1; i <= rows; i++) {
      for (int j = 0; j <= cols; j++) {
        matrix3.put(i, ob.addition(matrix1.get(j), matrix2.get(j)));
      }
    }
  }
rkkpypqq

rkkpypqq1#

问题是你的变量 matrix3 属于类型

HashMap<Integer, ArrayList<Number>>

如果你想把一个值放到hashmap中,下面的类型是示例

put(Integer as key, ArrayList<Number> as value);

但是你调用number类的加法,把结果作为value放入put方法,我认为结果也是一个数
所以问题在于:

matrix3.put(i, ob.addition(matrix1.get(j),matrix2.get(j)));

要么你把matrix3类型改成

HashMap<Integer, Number>

或者在加法后将arraylist作为值:

List<Numbers> n = new ArrayList<Number>();
n.add(ob.addition(matrix1.get(j),matrix2.get(j)));
matrix3.put(i, n);
eeq64g8w

eeq64g8w2#

从错误情况来看,您似乎忘记了从矩阵中取出行。像这样的

for (int i = 1; i <= rows; i++) {
  ArrayList<Number> row1 = matrix1.get(i);
  ArrayList<Number> row2 = matrix2.get(i);
  for (int j = 0; j <= cols; j++) {
    matrix3.put(i, ob.addition(row1.get(j), row2.get(j)));
  }
}

应该会成功的。

cu6pst1q

cu6pst1q3#

你想加两个 ArrayList s、 而不是两个 Number s、 您基本上缺少一个循环:
(类java伪代码):

for (int i = 1; i <= rows; i++) {
   Iterator<Number> iter1 = matrix1.iterator();
   Iterator<Number> iter2 = matrix2.iterator();
   ArrayList<Number> current = new ArrayList<>();
   while (iter1.hasNext()) {
     current.add(ob.addition(iter1.next(), iter2.next());
   }
   matrix3.put(current);
}

作为补充说明,在执行此操作之前,您可能还应该验证两个矩阵的维数。

相关问题