通用稀疏矩阵加法

时间:2011-06-25 23:14:25

标签: java generics sparse-matrix

我有一个赋值,我想在一般的稀疏矩阵上完成实现。我卡在附加部分。矩阵只会支持数字,所以我有它扩展数字希望我可以添加数字,这是错误的。数据结构不是数组,它基本上是2个链表。 (一个用于行,一个用于列)以下是有问题的代码:

public MatrixSparse<? extends Number> addition(MatrixSparse<? extends Number> A, MatrixSparse<? extends Number> B, MatrixSparse<? extends Number> result) {
    for (int i = 0; i < r.length; i++) {
        for(int j = 0; j < c.length; j++) {
            // set (i, j) to the sum of A(i,j) and B(i,j) is giving me an error
            // "+" is undefined for type capture#2-? etc.
            result.set(i, j, (A.get(i, j) + B.get(i, j)));
        }
    }
    return result;
}

和类标题+类变量:

class MatrixSparse<T extends Number> { 
final Links r[]; 
final Links c[];
final int rows, columns; 
final T zero; 

有关如何实施此添加方法的任何建议?

3 个答案:

答案 0 :(得分:1)

然后将其作为心理/学校练习处理:你不能将两个泛型与“+”运算符一起添加 - 运算符不是“通用的”,你不能用Java重载它们(与C ++差别很大)和自动装箱没有帮助。我认为你能做的唯一事情是在你的矩阵中写一个通用的T add(T paramLeft,T paramRight)并做类似的事情:

if (paramLeft instanceof Integer) {
     return new Integer(((Integer)paramLeft).intValue()+ ((Integer)paramRight).intValue());
} elseif (paramLeft instanceof Double) { 
     ....
}

答案 1 :(得分:0)

我有三个建议:

  1. 开始编写代码。看起来您已经发布了您已经开始使用的骨架,并期望此处的人员为您填写。发布一些代码并在出现问题时询问具体问题。
  2. 你能写一个成功的非稀疏矩阵加法吗?至少你会在开始之前解决这个问题。
  3. 在你有所作为之前我会忘记泛型。首先添加一个整数或双精度矩阵,然后添加泛型。

答案 2 :(得分:-1)

为什么要编写自己的SparseMatrix?这个问题非常通用,如果你自己尝试这样做,肯定会重新发明轮子。例如,快速谷歌搜索显示:

http://code.google.com/p/matrix-toolkits-java/

如果LGPL许可证不会吓跑你,这是好事,但我相信还有很多其他的地方你可以做好准备和测试的实施,这将是有益的。我宁愿花时间寻找解决方案,而不是再次发明它。