Java Scanner NextInt不输出文本文件中的所有整数

时间:2017-01-05 19:11:10

标签: java java.util.scanner delimiter

我是一位相对较新的Java程序员,只有几个月的经验,所以请原谅我所犯的任何错误。

我目前正在研究一个大学项目,我正在创建一个基于Dijkstra的路径查找器和交互式GUI。为了让我开始研究这一部分,我首先想要能够读入一个预定义的Adjacency Matrix来表示图形本身的无向权重,而不是自己不断地输入值。

为此,我决定使用扫描仪和分隔模式,以便我快速阅读相关文本文件。我的主要目标是取出文本文件中的每个值,然后将其附加到2D整数数组,以便我有效地利用数据。

我的主要问题是扫描器本身只读取文本文件中的前3个整数,然后停止读取并终止程序。对于我的分隔符,我使用的是Space字符("")似乎工作正常,但我认为它与行尾有问题导致问题?

public static void readMatrixFromFile() throws IOException {

    File file = new File("Matrix.txt"); //Instance of File with parameter of filename in default location.
    Scanner myScan = new Scanner(file);
    myScan.useDelimiter(" ");

    while(myScan.hasNextInt()){ //Checks whether or not there is a next token within the Text file.
        System.out.println(myScan.nextInt()); //Prints out next item within text file, with respect to Delimiter being ignored.
    }

    myScan.close(); //Safely closes Scanner.
}

非常感谢,

  • 迈克尔

1 个答案:

答案 0 :(得分:0)

我会这样做,所以你的2D数组基于第一行有多少数字。一次只读一个数字就可能导致必须在代码中使用幻数。此方法仅依赖于第一行中有多少个数字。

public static void readMatrixFromFile() throws IOException {

    File file = new File("Matrix.txt"); //Instance of File with parameter of filename in default location.
    Scanner myScan = new Scanner(file);
    Double[][] matrix = null;
    int rowNumber = 0;

    while(myScan.hasNextLine()){ //Checks whether or not there is a next token within the Text file.
        String[] rowOfNumbers = myScan.nextLine().split(" ");
        if(matrix == null)
        {
            matrix = new Double[rowOfNumbers.length][rowOfNumbers.length];
        }

        for(int i = 0; i < rowOfNumbers.length; i++)
        {
            if(rowOfNumbers[i].matches("\\d+"))
                matrix[rowNumber][i] = Double.parseDouble(rowOfNumbers[i]);
        }
        rowNumber++;
    }

    myScan.close(); //Safely closes Scanner.
}