我想從文件讀取矩陣數據,我無法弄清楚什麼是錯的。這是不工作的代碼:從Java中的文件讀取時,hasNextDouble()返回false
protected static double[][] getArrayFromFile(int new_rows, int new_cols,
String file)
{
double[][] A = new double[new_rows][new_cols];
try {
Scanner fileReader = new Scanner(new File(file));
for (int i = 0; i < new_rows; i++)
for (int j = 0; j < new_cols; j++)
{
if(fileReader.hasNextDouble())
A[i][j] = fileReader.nextDouble();
else
{
System.out.println("missing numbers in file");
break;
}
}
fileReader.close();
}
catch (FileNotFoundException e1) {
e1.printStackTrace();
}
return A;
}
此方法接收文件以及要讀取的列數和行數。它根本不是健壯的 ,但它應該工作,如果你正確地通知參數。 經過測試和打印矩陣後,我只得到零。我已經將 絕對路徑傳遞給數據文件,並且我非常確定該程序在 之前發現它,因爲當我傳遞一個不存在的路徑時,它會顯示一條錯誤消息。在運行調試時,我發現fileReader.hasNextDouble()
總是返回false,所以沒有數字正在讀取。這是爲什麼發生?我有 另一種從字符串讀取文件的方法,看起來就像這樣並且完美地工作。
這就是:
protected double[][] getArrayFromString(int new_rows, int new_cols,
String numbers)
{
Scanner stringReader = new Scanner(numbers);
stringReader.useDelimiter("[^\\p{Alnum},\\.-]");
double[][] A = new double[new_rows][new_cols];
for (int i = 0; i < new_rows; i++)
for (int j = 0; j < new_cols; j++)
{
if(stringReader.hasNextDouble())
A[i][j] = stringReader.nextDouble();
else
{
stringReader.close();
throw new RuntimeException("\n"+""
+ "missing numbers on string");
}
}
stringReader.close();
return A;
}
我一直在編程相當長一段時間與Ç和C++和我剛開始使用Java,所以也許有一些愚蠢的事,我做。任何人都可以看到我犯的錯誤嗎?
編輯
這是我試圖讀取文件:
23.0 0.84825
188.5 6.87425
269.0 10.9595
321.0 13.08725
恩......文本文件好嗎?或至少是文件的開始和接下來的10-20行數據。 –
'hasNextDouble()'返回false意味着你不在你認爲你在文件中的位置。這真的很簡單。 –
掃描儀不能識別您的數據爲雙倍,也許是由於區域差異? –