2017-09-09 28 views
-3

非常に簡単な練習をしていて、コードで間違いを見つけることができません。スキャナを使用して浮動小数点数を.txtから浮動小数点数に変換する

私はこのようになりますテキストファイルを持っている:

230.24415 134.34523 166.47234

192.02849 138.28403 294.12875

198.97356 256.49284 140.41526

最初に(intこの場合は3x3であり、以下の値は、スペースと改行で区切られた小数点以下5桁の浮動小数点数であり、それらを操作するために行列に設定する必要があります。それがこの練習の主な問題です。

import java.io.File; 
import java.io.IOException; 
import java.util.Scanner; 

public class fileToMatrix { 

    public static void main(String[] args) throws IOException { 

     File f = new File("./src/floatMat.txt"); 
     Scanner s = null; 

     int m=-1; 
     float value = -0.1f; 

     try { 

      s = new Scanner(f); 

      if(s.hasNextLine()) { // Firstly, read the dimension number 
       m = s.nextInt(); 
       System.out.println("Dimension of the matrix = " + m + "x" + m); 

      } 

      float [][] mat = new float[m][m]; //creates a matrix of dimension m 
      for(int i=0; i< m; i++){ //and initializes to 0 
       for(int j=0; j< m; j++){ 
        mat[i][j] = 0.0f; 
       }    
      } 

      if(s.hasNextLine()) { 
       for(int r=0; r< m; r++){ 
        for(int c=0; c< m; c++){ 
         value = s.nextFloat(); //PROBABLY HERE'S THE MISTAKE!!!!! 
         mat[r][c] = value; //set value on the current cell of the array 
        }    
       } 
      } 

      for(int i=0; i< m; i++){ //print the matrix 
       for(int j=0; j< m; j++){ 
        System.out.print(mat[i][j]+ " "); 
       } 
       System.out.println(); 
      } 


     } catch (Exception ex) { 
      System.out.println("Message catch: " + ex.getMessage()); 
     } finally { 
      if (s != null) 
        s.close(); 
     } 
    } 
    } 

私の.txtファイルの浮動小数点数を認識しないようですので、私は、ミスがミスを通知する私のコメントの周りにあることを確信している:ここで

コードがあります。実際、もし私の.txtファイルに整数値を入れれば、それはほとんど動作します!!

"Dimension of the matrix = 3x3"だけを出力しますが、 "Message catch:null"と表示され、塗りつぶされた行列も印刷されません。

ありがとうございます、私はあなたの助けに感謝します!あなたは次の行に進めるために、ここでs.nextLine()を必要とするので、この時点で

+0

'のSystem.out.println( "メッセージキャッチ:"()+ ex.getMessage)置き換える;') 'ex.printStackTrace(とし;'例外が何であるか、それを投げる何行を確認してください。 – Oleg

答えて

1
if(s.hasNextLine()) { 
    for(int r=0; r< m; r++){ 
     for(int c=0; c< m; c++){ 
      value = s.nextFloat(); //PROBABLY HERE'S THE MISTAKE!!!!! 
      mat[r][c] = value; //set value on the current cell of the array 
     }    

は、あなたは、すべての3つ(N)がライン上に浮かぶ読みました。

} 
} 
+0

私は次の行に向かう必要があることは事実です。また、 'if(s.hasNextLine())'の前に 's.nextLine()'を置く必要があります。しかし、それはまだ動作しません、主な問題は、プログラムが浮動小数点数を読んでいないということです...とにかくありがとう、@EJP – 0xGolovkin

+0

私のために働く。あなたは間違っていたに違いない。 – EJP

関連する問題