如何从另一个类的另一个数组方法获取数组方法

时间:2014-01-20 07:00:05

标签: java arrays methods

我很抱歉,我的项目中有一个名为test01.java的课程。我用Tadaki Graphlib的库包含了很多类。其中有Graph.java。

Test01.java:

    public class test01 extends Graph{

public test01(String name, int n) {
    super(name);
public test01(String name, int n) {
    super(name);

    graphLib.Vertex vList[] = new graphLib.Vertex[n];
    for (int i = 0; i < n; i++) {
        vList[i] = new graphLib.Vertex(String.valueOf(i));
        addVertex(vList[i]);
    }
    int deg = 0;
    System.out.println("<---------- Random val ---------->");
     addArc(vList[0], vList[1], String.valueOf(0));   deg++;
     addArc(vList[1], vList[0], String.valueOf(1));   deg++;
     System.out.println("Vertex-0 with Vertex-1");
     System.out.println("Vertex-1 with Vertex-0");
    int k = 2;
    int l;
    int m=0;
    Random randomval = new Random();
    int isAvailInt [] = new int[n];
    while (k<n) {
        for(l=0;l<k;l++){
                isAvailInt [l]= Integer.parseInt(vList[l].toString());
                m=isAvailInt[l];            
        }
        int chosen = randomval.nextInt(m);
        addArc(vList[k], vList[chosen], String.valueOf(k));
        System.out.println("Vertex-"+k+" with Vertex-"+chosen+
                " exp = " + String.valueOf(k));

        k++;
    }

}public static void main(String args[]) {
    int n;
    String num = JOptionPane.showInputDialog("Masukkan nilai jumlah iterasi = ");
    String degnum = null;        
    n = Integer.parseInt(num);
    int deg []= new int [n];
    test01 t = new test01("test",n);

    System.out.println("<---------- Vertex-i = Degree-i ------------>");
    graphLib.Graph g= new Graph("test");

    int [][]adj = g.getAdjacent();

    System.out.println(adj[0][0]);
    for (int i=0; i<t.getSize();i++){
        for (int j=0; j<t.getSize();j++){
        }          
    }}

和另一个名为Graph.java的类

public class Graph extends GraphBase { int adjacent[][] = null;

public Graph(String name) {
    this.name = name;
    vertexes = Utils.createVertexList();
    arcs = Utils.createArcList();
    a2vHead = new HashMap<>();
    a2vTail = new HashMap<>();
    v2a = new HashMap<>();
}
public int[][] getAdjacent() {
    int n = vertexes.size();
    adjacent = new int[n][];
    for (int i = 0; i < n; i++) {
        adjacent[i] = new int[n];
        for (int j = 0; j < n; j++) {
            adjacent[i][j] = 0;
        }
    }
    if (directed) {
        for (int i = 0; i < n; i++) {
            Vertex v = vertexes.get(i);
            for (Arc a : v2a.get(v)) {
                Vertex t = a2vTail.get(a);
                int l = vertexes.indexOf(t);
                adjacent[l][i]++;
            }
        }
    } else {
        for (int i = 0; i < n; i++) {
            Vertex v = vertexes.get(i);
            for (Arc a : v2a.get(v)) {
                Vertex t = a2vTail.get(a);
                if (!t.equals(v)) {
                    int l = vertexes.indexOf(t);
                    adjacent[i][l]++;
                    adjacent[l][i]++;
                }
            }
        }

    }
    checkConnectedness();
    return adjacent;
}}

从上面,method - int [] [] Adjacent() - 有一个数组返回值:

return adjacent;

然后我希望用声明的数组变量接收它:

int [][]adj = g.getAdjacent();

但是当我运行程序时,代码:

System.out.println(adj[0][0]);

出现了错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

我在Graph.java中声明了从其他类GraphBase.java扩展的变量顶点:

 vertexes = Utils.createVertexList();

如何从Graph.java中的相邻变量获取数组值到test01.java,如何使用System.out.println()显示它?

2 个答案:

答案 0 :(得分:1)

您还没有在vertexes中显示Graph初始化(甚至声明)的位置。我怀疑它是空的,所以当你执行这段代码时:

public int[][] getAdjacent() {
    int n = vertexes.size();
    adjacent = new int[n][];
    ...
    return adjacent;
}

...你最终得到一个空数组。这会导致你看到的问题。您可以使用main方法轻松检查尺寸:

System.out.println(adj.length);

我怀疑你会发现它是0.或者adj[0].length是0。

您不希望Graph如何找到任何顶点 - 您不会提供任何顶点,甚至n的值。您只需使用字符串调用构造函数:

graphLib.Graph g= new Graph("test");

除非那意味着是在构造函数中加载的文件的名称,否则无法从中获取数据。您需要退后一步,考虑您希望数据来自何处,然后确保它实际上可以流经您的程序。问题不是将数组引用返回到main - 问题是数组是空的。

答案 1 :(得分:1)

我怀疑这条线路返回0。

int n = vertexes.size();

您可以通过运行以下代码

来重现此问题
    int adjacent[][] = new int[0][];
    System.out.println(adjacent[0][0]);

您将获得相同的异常

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

解决此问题

在继续vertexes之前确保具有预期值。