我是一位相对较新的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.
}
非常感谢,
答案 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.
}