我正在尝试用 Java 实现银行家算法,但在加载数组时遇到问题。这是我正在使用的代码
public static void main(String[] args) throws FileNotFoundException {
String filename = null;
int need[][];
int allocate[][];
int max[][];
int available[][];
int n = 0;
int m = 0;
int lineCount = 0;
Scanner in = new Scanner(System.in);
System.out.println("Enter the file name.");
filename = in.nextLine();
File textFile = new File(filename);
Scanner input = new Scanner(textFile);
max = new int[n][m];
allocate = new int[n][m];
need = new int[n][m];
available = new int[1][m];
n = input.nextInt();
m = input.nextInt();
System.out.print("Number of Processes: " + n);
System.out.print("\nNumber of Processes: " + m);
max = new int[n][m];
allocate = new int[n][m];
need = new int[n][m];
available = new int[1][m];
String line = input.nextLine();
while (line != null && lineCount < n) {
String[] temp = line.split(" ");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
allocate[i][j] = Integer.parseInt(line);
System.out.println("here");
}
line = input.nextLine();
lineCount++;
}
}
}
我的示例文件包含此数据。
5
4
0 0 1 2 1 0 0 0 1 3 5 4 0 6 3 2 0 0 1 4
0 0 1 2 1 7 5 0 2 3 5 6 0 6 5 2 0 6 5 6
1 5 2 0
1:0 4 2 0
所以,我在尝试执行此操作时遇到了许多不同的错误。现在我收到 NumberFormatException: For input string ""错误。非常感谢任何帮助。
最佳答案
你有一堆非常小的数组,并且你永远不会增加它们的大小:
int n = 0;
int m = 0;
...
max = new int[n][m]; // 0x0 array, unused
allocate = new int[n][m]; // 0x0 array, likely the culprit
need = new int[n][m]; // 0x0 array, unused
available = new int[1][m]; // 1x0 array, unused
在这些数组中,仅使用 allocate
,稍后您将在 for 循环中使用它:
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
// OutOfBounds is probably here:
allocate[i][j] = Integer.parseInt(line);
System.out.println("here");
}
line = input.nextLine();
lineCount++;
}
此外,您正在运行 Integer.parseInt(line)
,它试图解析整行。您应该一次只解析一个 token ,即 Integer.parseInt(temp[someindex])
。
关于java - 从文件读取,加载数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34010710/