我有一个赋值,我想在一般的稀疏矩阵上完成实现。我卡在附加部分。矩阵只会支持数字,所以我有它扩展数字希望我可以添加数字,这是错误的。数据结构不是数组,它基本上是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;
有关如何实施此添加方法的任何建议?
答案 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)
我有三个建议:
答案 2 :(得分:-1)
为什么要编写自己的SparseMatrix?这个问题非常通用,如果你自己尝试这样做,肯定会重新发明轮子。例如,快速谷歌搜索显示:
http://code.google.com/p/matrix-toolkits-java/
如果LGPL许可证不会吓跑你,这是好事,但我相信还有很多其他的地方你可以做好准备和测试的实施,这将是有益的。我宁愿花时间寻找解决方案,而不是再次发明它。