【问题标题】:Java Scanner NextInt not outputting all Integers within Text FileJava Scanner NextInt 未输出文本文件中的所有整数
【发布时间】:2017-01-05 19:11:10
【问题描述】:

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

我目前正在从事一个大学项目,我正在为此创建一个基于 Dijkstra 的带有交互式 GUI 的探路器。为了让我开始这部分的工作,我首先希望能够读取一个预定义的邻接矩阵,该矩阵表示图本身的无向权重,而不是自己不断地输入值。

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

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

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.
}

非常感谢,

  • 迈克尔

【问题讨论】:

  • 请尝试在问题中包含代码,而不是提供外部链接。
  • 如果您提供的只是屏幕转储,您希望我们如何自行测试?请将实际代码和数据复制/粘贴到问题中。作为实际的代码和文本,而不是图像。我们没有耐心重新输入您的工作。
  • 删除useDelimeter
  • 最简单的方法是在扫描仪 hasNextLine 时简单地使用 getLine ,然后一旦你有了这条线,只需将字符串拆分为 " " 并遍历 split 返回的数组并将每个元素添加到您的二维数组中每行都是二维数组中的一行
  • 正如@Michael 所说,您必须摆脱useDelimeter 才能阅读所有内容。

标签: java java.util.scanner delimiter


【解决方案1】:

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

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.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2016-11-23
    • 1970-01-01
    相关资源
    最近更新 更多