我碰巧在定義一個數(shù)組時遇到問題,其中索引應(yīng)該是類的元素,如下所示:MWE:package thisModel;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class ThisCode { public static void main(String[] args) { class Arc { private int i; //starting node private int j; // ending node public Arc(int i, int j) { this.i = i; this.j = j; } @Override public String toString() { return Integer.toString(i) + " " + Integer.toString(j); } } List<Arc> arcs = new ArrayList<Arc>(); int N = 7; int [] b = new int [N]; }}所以,在這里,如果我按如下方式定義數(shù)組:int [] y = new int [arcs.size()];然后,錯誤在以下循環(huán)中彈出:for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { //my issue lies here: //y[Arc(i,j)] - y[Arc(j,i)] = b[i]; } }我認(rèn)為這是因為y[arcs.size()]具有列表大小的維度,而不是它的元素。我的問題是是否有任何方法可以將ylike定義為一個Arc不arcs.size()這樣的數(shù)組:int[] y = new int [Arc(i,j)];
1 回答

神不在的星期二
TA貢獻(xiàn)1963條經(jīng)驗 獲得超6個贊
如果你輸入y一個二維數(shù)組
int[][] y = new int[N][N];
然后您可以使用Arc的組件i和j作為索引y來檢索值:
int value = y[i][j];
您也可以將其輸入為Map(如果我按字面意思閱讀您的第一句話):
Map<Arc, Integer> y = new HashMap<>();
這允許您y通過使用特定Arc實例請求它們來獲取值:
Arc myArc = ...;
int value = y.get(myArc);
在這種情況下,您應(yīng)該在類中定義正確的hashCode和equals方法Arc:
@Override
public boolean equals(Object x) {
if (!(x instanceof Arc)) return false;
Arc that = (Arc) x;
return this.i == that.i && this.j == that.j;
}
@Override
public int hashCode() {
return this.i + 31*this.j;
}
否則,HashMap如果您嘗試通過將Arc具有相同組件的新實例傳遞給它來獲取它們,則將找不到任何值。
添加回答
舉報
0/150
提交
取消