2012-04-21 77 views
0

我正在嘗試從文本文件創建矩陣。問題是,當Buffered Reader函數readline()完成解析文件的第一行時,它會到達第二行,但它將其讀取爲空,但不是。來自文件的矩陣

void covar() 
    { 
     double [][]covar=new double[10][5]; 
     int i=0; 
     int j=0; 
     try 
     { 
      FileInputStream fstream = new FileInputStream("class 1\\feature_vector.txt"); 
      DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      String input; 

      while((input=br.readLine())!= null) 
      {    
       String [] temp=input.split(","); 
       //System.out.println(input.split(",").length); 
       covar[i][j]= new Double(temp[0]); 
       covar[i+1][j]=new Double(temp[1]); 
       covar[i+2][j]=new Double(temp[2]); 
       covar[i+3][j]=new Double(temp[3]); 
       covar[i+4][j]=new Double(temp[4]); 
       //i=0; 
       j++; 
      } 

      in.close(); 
     } 
     catch(Exception e) 

     { 
      e.printStackTrace(); 

     } 

以上是代碼。文件名是完美的,沒有什麼錯誤的東西。你們能幫我解決這個問題嗎?

下面是該文件的內容:

0.75,321.0,0.22429906,0.97507787,1.966202512778112 
0.33333334,135.0,-0.014814815,1.0,5.323770568766052 
0.64285713,311.0,0.025723472,1.0,4.764298570227433 
0.6,188.0,0.03723404,1.0,4.7349608150168105 
0.25,189.0,0.16931216,0.98941797,7.15681209803803 
0.71428573,194.0,-0.26804122,0.96391755,5.1654456838422425 
0.6,173.0,0.028901733,1.0,6.54275787030257 
0.2857143,257.0,0.031128405,1.0,6.095356508899233 
0.23076923,197.0,-0.04568528,1.0,3.784908227189768 
0.18181819,231.0,0.17316018,0.987013,5.956322938602553 
+0

我此前認爲我應該逼我到0,然後意識到,這是沒有必要按我的要求,所以我把它放在註釋。 – user1347525 2012-04-21 03:07:56

+1

這與問題無關,但是:DataInputStream是完全不必要的,請將其刪除。 – leonbloy 2012-04-21 03:08:03

+0

如果我刪除DataInputStream,那麼我將如何從文件中獲取數據流? – user1347525 2012-04-21 03:10:26

回答

1

有兩件事情是明顯的錯誤:

  • 你不需要變量i,因爲其中一個維度是固定的,你「展開」循環五次
  • 你換了索引:j應該先去,那是從0改爲9的那個。

例如:

String [] temp=input.split(","); 
covar[j][0] = new Double(temp[0]); 
covar[j][1] =new Double(temp[1]); 
covar[j][2] =new Double(temp[2]); 
covar[j][3] =new Double(temp[3]); 
covar[j][4] =new Double(temp[4]); 

你可以把環回縮短你的代碼:

String [] temp=input.split(","); 
for (int i = 0 ; i != 5 ; i++) { 
    covar[j][i] = new Double(temp[i]); 
} 
+0

感謝您的回覆。我想要做的是從一個文件中獲取數據的格式如第一行(1,2,3,4,5)第二行(6,7,8,9,10)現在我需要將這些數據按大小2X5的順序添加到矩陣中。我試圖按照上面所述的方式去做,但顯然我錯過了一些東西。請指教。再次感謝 – user1347525 2012-04-21 03:26:14

+0

@ user1347525然後你的矩陣應該是'[2] [5]'。 – trutheality 2012-04-21 03:29:16

+0

@ user1347525當您修改代碼以符合上述要求時,是否會收到錯誤?項目是否按錯誤順序排列?請更具體地說明您看到的錯誤。 – dasblinkenlight 2012-04-21 03:30:22

1

看起來你是爲你矩陣使用了錯誤的indicies,我認爲這應該是這樣的:

int i = 0; 
while((input=br.readLine())!= null) {    
    String [] temp=input.split(","); 
    //System.out.println(input.split(",").length); 
    covar[i][0]= new Double(temp[0]); 
    covar[i][1]=new Double(temp[1]); 
    covar[i][2]=new Double(temp[2]); 
    covar[i][3]=new Double(temp[3]); 
    covar[i][4]=new Double(temp[4]); 
    ++i; 
} 
0

您的文件mig ht有一些奇怪的行結束符讓讀者認爲有一個額外的行。

你可以嘗試只是讓你的代碼跳過空白行:

while((input=br.readLine())!= null) { 
    if(input.length() > 0){ 
     String [] temp=input.split(","); 
     for (int i = 0 ; i != 5 ; i++) { 
      covar[j][i] = new Double(temp[i]); 
     } 
    } 
    ++j; 
} 
+0

謝謝你真的幫助。 – user1347525 2012-04-21 04:30:51