2011-06-25 137 views
1

我有一个任务,我应该完成通用稀疏矩阵上的实现。我卡在添加部分。矩阵只会支持数字,所以我已经扩展数字希望我可以添加数字,这是错误的。数据结构不是一个数组,它基本上是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; 

有关如何实现这个add方法有什么建议?

+0

你想'MatrixSparse <?扩展Number>'或'MatrixSparse '? –

+0

@Michael它不管什么标题看起来像,我只是希望它为浮动和int – Bill

回答

1

那么治疗那么作为一个心理/学校练习:不能将两个泛型与“+”操作符一起添加 - 操作符不是“通用的”,并且不能在Java中重载它们(与C++非常不同)和自动装箱没有帮助。你可以做我想的唯一的事情是在你的矩阵编写一个通用的不要再增加(T paramLeft,T paramRight)和做这样的事情:

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

我想也许有些混乱是因为自动装箱使它看起来像“+”确实超载。 –

+0

啊非常感谢,这有助于。 – Bill

+0

实际上,一个更好的主意是让一个类型为“Operations ”的对象或类似对象进行加法运算(以及后来的乘法运算),并传递给矩阵对象。然后你执行'操作'和'操作'。 –

0

我有三个建议:

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

叹息......这是我的代码。我知道如何制作一个规则矩阵,非泛型的,通用的。我之前完成了所有这些。我只想知道如何在类型未知的情况下添加matricies。它将是一个整数或浮点数,所以不用担心。 – Bill

+0

不只是假设即时通讯要求人们“填补我”这是一些代码,这是一个具体的问题,我问什么时候出错了 – Bill

-1

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

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

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

+0

它的任务,我不一定想要做到这一点,但我必须。 – Bill

+0

我相信,如果你能“站在巨人的肩膀上”并在5分钟内完成工作和测试,而不是花上几天的时间,那么你可以尝试与谁作出决定?如果没有真正的原因是为什么要再写一次,而你仍然必须这样做......然后改变工作。真。 –

+0

这显然是一个学校的家庭作业,而不是一些随机的经理在他的工作(除非我很错误)。 –