我試圖在多個二維數組中找到類似的行,如my previous post中所述。對於下面給出的例子,答案是false, true,
,但它應該是false, false
。用於在二維數組中找到相似行的代碼
另一個非常重要的問題是如何將此代碼調整爲具有不同行數的數組。
我非常感謝任何幫助。謝謝。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
ArrayList<Integer[]> array1 = new ArrayList<Integer[]>();
ArrayList<Integer[]> array2 = new ArrayList<Integer[]>();
ArrayList<Integer[]> array3 = new ArrayList<Integer[]>();
array1.add(new Integer[]{1,2,3}); array1.add(new Integer[]{1,0,3});
array2.add(new Integer[]{1,0,3}); array2.add(new Integer[]{0,0,3});
array3.add(new Integer[]{1,2,3}); array3.add(new Integer[]{0,3,3});
for (int i=0; i<array1.size(); i++) {
boolean answ = equalRows(array1.get(i),array2.get(i),array3.get(i));
System.out.println(answ);
}
}
static class Row extends Object {
private int value;
public Row(int val) {
this.value = val;
}
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if((obj == null) || (obj.getClass() != this.getClass()))
return false;
// object must be Row at this point
Row row = (Row)obj;
return (value == row.value);
}
@Override
public int hashCode() {
return this.value;
}
}
private static Map<Row, Integer> map(Integer[] row) {
Map<Row, Integer> rowMap = new HashMap<Row, Integer>();
for (int i=0; i<row.length; i++)
rowMap.put(new Row(row[i]), i);
return rowMap;
}
private static boolean equalRows(Integer[] row1, Integer[] row2, Integer[] row3){
Map<Row, Integer> map1 = map(row1);
Map<Row, Integer> map2 = map(row2);
for (int i=0; i<row3.length; i++){
Row row = new Row(row3[i]);
Integer result1 = map1.get(row);
Integer result2 = map2.get(row);
if (result1 == null || result2 == null) {
return false;
}
}
return true;
}
}
編輯#1 在第一測試I'm比較{1,2,3},{1,0,3}和{1,2,3}。第二個:{1,0,3},{0,0,3},{0,3,3}。第二行的問題是{0,0,3}和{0,3,3}的處理方式爲{0,3}。我不知道如何修改代碼來在{0,0,3}和{0,3,3}之間進行區分(我仍然應該使用HashMap)。
編輯#2 這個想法是,我首先從array1和array2中取出行,然後將它們放到地圖中。然後我從array3中取出一行並嘗試在地圖中找到它。如果我無法在這些地圖中找到它,那麼這意味着行不相似。
在第一個測試中,我將比較{1,2,3},{1,0,3}和{1 ,2,3}。第二個:{1,0,3},{0,0,3},{0,3,3}。第二行的問題是{0,0,3}和{0,3,3}的處理方式爲{0,3}。我不知道如何修改代碼以區分{0,0,3}和{0,3,3}(我仍然應該使用HashMap)。 – 2012-01-10 09:54:53
但是,您沒有比較三個數組,您只比較前兩個數組,第三個數組用於確定要比較的行。我不明白你爲什麼使用'Row'或'HashMap'。我只能承擔它的功課,所以我不知道如何改變你的代碼而不用重寫它。 – 2012-01-10 10:01:39
你必須清楚地定義你正在做的事情,並確保你的代碼在調試器中這樣做。你應該試着在你的代碼中清楚你想要達到的目標以及你爲什麼做出選擇。 – 2012-01-10 10:04:04