在 Java 中索引类的问题

我碰巧在定义一个数组时遇到问题,其中索引应该是类的元素,如下所示:


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)];


狐的传说
浏览 145回答 1
1回答

神不在的星期二

如果你输入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:@Overridepublic boolean equals(Object x) {&nbsp; if (!(x instanceof Arc)) return false;&nbsp; Arc that = (Arc) x;&nbsp; return this.i == that.i && this.j == that.j;}@Overridepublic int hashCode() {&nbsp; return this.i + 31*this.j;}否则,HashMap如果您尝试通过将Arc具有相同组件的新实例传递给它来获取它们,则将找不到任何值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java