2011-07-16 53 views
0

我有一個Java對象數組。說這些對象Obj包含一個變量var,並且我有幾個Obj存儲在一個數組Array []中。比較數組中的對象的變量?

我想比較兩個相鄰的Obj之間的變種,但我不知道如何,也不能在網上找到任何信息(這讓我覺得我工作我的問題是錯誤的或它不可行或什麼的)

編輯:

我目前正在試圖分配有問題的對象數組新的臨時對象,只是在做這些比較的,而迂迴方法:

Obj o1 = o[i]; 
Obj o2 = o[i+1]; 

if (o1.var > o2.var) 
//etc 

但肯定有東西更好。

+0

你的代碼是很不錯的了。我會完全這樣。例如,當您正在調試時,變量中有有趣的東西,所以當您需要查看它們時,它們可能只有一次鼠標點擊。這是使用許多局部變量的美妙之處,即使這會使代碼變得更長。 –

回答

1

如果你有對象的數組,你可以做你的比較,而無需創建臨時引用:

MyObject[] arr = //populated somehow 
for (int index = 0; index < arr.length - 1; index++) { 
    if (arr[index].var > arr[index + 1].var) { 
    //your logic 
    } 
} 

你可能也想看看在Comparable接口封裝的比較的手段基於特定字段的對象。使用此界面可以讓您利用其在Collections API中的支持。

+0

(刪除我的評論:哎呀,你的代碼真的去了長度1!) – poundifdef

+0

@poundifdef:他編輯它,你的評論是正確的。我無法相信這個答案明顯是正確的。我的意思是,它會產生一個ArrayOutOfBoundsException(在編輯之前)並且不會編譯(arr ++ ???)。馬虎。好吧。 –

1

根據您的修改,這將是罰款,說

if (o[i].var > o[i+1].var) { ... } 

假設oObj[]類型。

我很好奇,但是:你想排序數組嗎?如果是這樣,你可以使用Arrays.sort()(如果不是,它是知道的好方法呢。)

1

我可能無法正確理解你的問題,但以下是完全有效的:

if (o[i].var > o[i+1].var) { // ...etc... } 

當心當你擊中數組的末尾時!也就是說,如果你循環遍歷所有的元素,並且i是最後一個,那麼o[i+1]會給你一個數組索引超出界限的錯誤!

0

只需直接使用它們即可,而不需要參考即將陣列查找替換爲您正在進行比較的位置。

if (o[i].var > o[i+1].var) { 
    // etc 
} 

或循環,每做一個程序:

for (int i=0; i<o.length-1; i++) { 
    if (o[i].var > o[i + 1].var) { 
     // etc 
    } 
} 
+0

感謝所有幫助傢伙。我曾嘗試解決方案: o [i] .var> o [i + 1]。var 一段時間之後,使這個線程和正在收到某種錯誤,但關閉所有東西后,去工作,回來,並再次嘗試......它似乎工作。我不會擔心第一次出現什麼問題,只是想享受它的作用。 – Matthew