我有一个带有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)));
}
}
}
答案 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);
}
作为旁注,在执行此操作之前,您还应该验证两个矩阵的尺寸。