我很抱歉,我的项目中有一个名为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()显示它?
答案 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
之前确保具有预期值。