2011-06-25 182 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

這顯然是一個學校的家庭作業,而不是一些隨機的經理在他的工作(除非我很錯誤)。 –