2013-10-11 64 views
0

我想從文件讀取矩陣數據,我無法弄清楚什麼是錯的。這是不工作的代碼:從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 
+3

恩......文本文件好嗎?或至少是文件的開始和接下來的10-20行數據。 –

+0

'hasNextDouble()'返回false意味着你不在你認爲你在文件中的位置。這真的很簡單。 –

+2

掃描儀不能識別您的數據爲雙倍,也許是由於區域差異? –

回答

0

的區域設置比建議不是,你以爲你是在文件中似乎更容易,考慮到事實上getArrayFrom文件打開文件本身。

我建議在fileReader的聲明和初始化之後立即插入行fileReader.useLocale(Locale.US);。這會迫使Locale設置爲小數點爲「。」的地方,以解析數據。

或者,找出默認語言環境中的小數點,並編輯文本文件以使用它。

+0

解決了它。我還需要將java.util.Locale添加到導入的包中。謝謝大家的答案! – JuarezASF