我碰巧在定义一个数组时遇到问题,其中索引应该是类的元素,如下所示: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]; }}所以,在这里,如果我按如下方式定义数组:int [] y = new int [arcs.size()];然后,错误在以下循环中弹出: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]; } }我认为这是因为y[arcs.size()]具有列表大小的维度,而不是它的元素。我的问题是是否有任何方法可以将ylike定义为一个Arc不arcs.size()这样的数组:int[] y = new int [Arc(i,j)];
1 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
如果你输入y一个二维数组
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);
在这种情况下,您应该在类中定义正确的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
提交
取消