我正在为学校做一个小程序,它读取数据文件并在控制台中输出结果。我无法弄清楚为什么我的对象数组在我完成 while 循环后没有继续执行。这是代码:
import java.io.*;
import java.util.*;
public class order{
private static Node nodes[];
public static void main(String[] args) throws FileNotFoundException {
String dataFile = "file.dat";
indegreeCompute(dataFile);
}
private static void indegreeCompute(String dataFile) throws FileNotFoundException {
Scanner scanFile = new Scanner(new File(dataFile));
nodes = new Node[scanFile.nextInt()];
while (scanFile.hasNextLine()) {
scanFile.nextLine();
int index = scanFile.nextInt();
System.out.print("node = " + index);
scanFile.next();
int NumOutDegree = scanFile.nextInt();
nodes[index].outDegree = NumOutDegree;
System.out.print(" outDegree = " + nodes[index].outDegree);
nodes[index].adjNodes = new int[NumOutDegree];
scanFile.next();
System.out.print(" adjNodes = [");
for ( int i = 0; i < nodes[index].outDegree; i ++ ) {
nodes[index].adjNodes[i] = scanFile.nextInt();
if (i < nodes[index].outDegree - 1)
System.out.print(nodes[index].adjNodes[i] + ", ");
else
System.out.print(nodes[index].adjNodes[i]);
}
System.out.print("]");
System.out.println();
}
for (int i = 0; i < nodes.length; i ++) {
int outDegree = nodes[i].outDegree;
for(int k = 0; k < outDegree; k ++) {
int adjNode = nodes[i].adjNodes[k];
nodes[adjNode].inDegree ++;
}
}
scanFile.close();
}
}
我特别遇到问题的部分是 for 循环的最后一部分。我正在尝试使用我在 while 循环中创建的数组中的信息,但是当我调试时,它显示我的节点数组有错误的值。
辅助类就是这样:
public class Node {
public static int inDegree, outDegree, adjNodes[];
}
任何有助于我理解的帮助或解释将不胜感激。谢谢!
文件内容如下:
14 //numNodes; space after '(' and before ')' to simplify reading the file
0 ( 1 ): 10 //node ( outdegree ): adjNodes in arbitrary order
1 ( 10 ): 0 5 8 10 6 9 7 11 12 13
2 ( 1 ): 7
3 ( 3 ): 1 10 11
4 ( 3 ): 0 1 5
5 ( 3 ): 6 7 10
6 ( 2 ): 7 10
7 ( 5 ): 8 10 12 11 13
8 ( 1 ): 13
9 ( 1 ): 0
10 ( 0 ):
11 ( 0 ):
12 ( 2 ): 10 11
13 ( 1 ): 12
最佳答案
以下应该适合您。
public class Node {
//public static int inDegree, outDegree, adjNodes[]; // static was causing the problem
public int inDegree, outDegree, adjNodes[];
}
public class order{
private static Node nodes[];
public static void main(String[] args) throws FileNotFoundException {
String dataFile = "file.dat";
indegreeCompute(dataFile);
}
private static void indegreeCompute(String dataFile) throws FileNotFoundException {
Scanner scanFile = new Scanner(new File(dataFile));
nodes = new Node[scanFile.nextInt()];
for(int l= 0 ; l <nodes.length ; l++) {
nodes[l] = new Node();
}
while (scanFile.hasNextLine()) {
scanFile.nextLine();
int index = scanFile.nextInt();
System.out.print("node = " + index);
scanFile.next();
int NumOutDegree = scanFile.nextInt();
nodes[index].outDegree = NumOutDegree;
System.out.print(" outDegree = " + nodes[index].outDegree);
nodes[index].adjNodes = new int[NumOutDegree];
scanFile.next();
System.out.print(" adjNodes = [");
for ( int i = 0; i < nodes[index].outDegree; i ++ ) {
nodes[index].adjNodes[i] = scanFile.nextInt();
if (i < nodes[index].outDegree - 1)
System.out.print(nodes[index].adjNodes[i] + ", ");
else
System.out.print(nodes[index].adjNodes[i]);
}
System.out.print("]");
System.out.println();
}
for (int i = 0; i < nodes.length; i ++) {
int outDegree = nodes[i].outDegree;
for(int k = 0; k < outDegree; k ++) {
int adjNode = nodes[i].adjNodes[k];
nodes[adjNode].inDegree ++;
}
}
scanFile.close();
}
}
问题出在辅助类中静态变量的使用上。 你在那里使用了引起问题的类(class)成员。我已将它们更改为对象范围以了解类范围请阅读以下内容 Class Members
关于java - 需要帮助理解 Java 中变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21719220/