有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从文件读取,加载数组

我试图用Java实现Banker算法,但在加载数组时遇到了问题。这是我正在使用的代码

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++;
        }
    }
}

我的示例文件包含此数据

五,

四,

01 2 1 0 0 0 1 3 5 4 0 6 3 2 01 4

01 2 1 7 5 0 2 3 5 6 0 6 5 2 0656

1520

1:0420

所以,在尝试这样做时,我遇到了许多不同的错误。现在我得到一个NumberFormatException:For input string“”错误。非常感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    您有一组非常小的阵列,并且从不增加它们的大小:

    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),它正试图解析整行代码。您应该一次只解析一个令牌,它将是Integer.parseInt(temp[someindex])