如何在两个分数矩阵

时间:2015-04-28 07:23:33

标签: java arraylist hashmap

我有一个带有fillMatrix()printMatex()方法的Matrix类,它是分数矩阵并使用hashmap填充:HashMap <Integer, ArrayList<Number>>(带行和colomns格式)

Number是一个具有加法和减法分数方法的类。 我要求在Matrix类中创建一个方法,在两个矩阵之间进行加法,如下所示:

  

该类有一个公共空addMatrices (Matrix, Matrix),它有2个矩阵作为参数,它计算这些矩阵的总和。

我写了这段代码,但它没有用。它给了我这个错误:

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)));
      }
    }
  }

3 个答案:

答案 0 :(得分:1)

问题是您的变量matrix3的类型为

HashMap<Integer, ArrayList<Number>>

如果要将值放入散列映射中,则会使用以下类型

put(Integer as key, ArrayList<Number> as 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);

答案 1 :(得分:0)

从错误情况看,您似乎忘记了从矩阵中获取行。像

这样的东西
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)));
  }
}

应该做的伎俩。

答案 2 :(得分:0)

您正在尝试添加两个ArrayList,而不是两个Number,您基本上缺少一个循环:

(java like pseudo code):

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);
}

作为旁注,在执行此操作之前,您还应该验证两个矩阵的尺寸。