2017-01-05 3 views
-1

私は数ヶ月の経験を持つ比較的新しいJavaプログラマです。JavaスキャナNextIntがテキストファイル内のすべての整数を出力しない

私は現在、対話型GUIを備えたDijkstraベースのパスファインダーを作成しているCollegeプロジェクトに取り組んでいます。私がこの部分で作業を始めるためには、まず、値を自分で入力することを常に必要とするのではなく、グラフ自体の無向重みを表すあらかじめ定義された隣接行列を読むことができるようにしたかったのです。

このため、問題のテキストファイルをすばやく読み取るためにスキャナと区切りパターンを使用することにしました。私の主な目標は、テキストファイル内の各値を取り出し、それを2D整数配列に追加して効率的にデータを利用できるようにすることです。

私の主な問題は、スキャナ自体がテキストファイル内の最初の3つの整数だけを読み込み、読み込みを停止してプログラムが終了することです。私のデリミタでは、うまく動作しているように見えるスペース文字( "")を使用していますが、問題の原因となっている行末と関係があると思いますか?

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. 
} 

多くのおかげで、

  • マイケル
+4

外部リンクを提供するのではなく、質問内にコードを含めるようにしてください。 – user2004685

+7

あなたが提供するものがスクリーンダンプであれば、私たちは自分自身でこれをテストすると思いますか?実際のコードとデータを質問にコピー&ペーストしてください。実際のコードとテキストであり、イメージではありません。私たちはあなたの仕事を再入力するための忍耐を持っていません。 –

+1

'useDelimeter'行を削除します – Michael

答えて

0

私はあなたの2次元配列が最初の行にあるどのように多くの数字に基づいており、このような何かをするだろう。一度に1つの数字だけを読むと、コード内でマジックナンバーを使用する必要が生じる可能性があります。このメソッドは、単に最初の行にいくつの数値があるかに依存します。

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. 
} 
関連する問題