2016-03-20 3 views
-1

テキストファイルから読み込み、データを使用して保存ゲームを再開しようとしています。しかし、ファイルから読み込むコードの最初の行に到達すると、そのような要素の例外はスローされません。おそらく誰が私にこのことが起こっているのかのヒントを与えることができますか?私はテキストファイルをチェックして、そこからデータを読み込みます。以下はテキストファイルから読み取るときにそのような要素の例外はありません

が使用するコードです:

public void readSave() { 

      int p1Turn = 0; 
      int p2Turn = 0; 

      try { 
       FileReader fr = new FileReader("snorkels.txt"); 
       BufferedReader reader = new BufferedReader(fr); 
       String line = reader.readLine(); 
       Scanner scan = null; 

       int playerNumber = 0; 


       while (line != null) { 
        scan = new Scanner(line); 
        playerNumber = scan.nextInt(); // No such element exception 

        if (playerNumber == 1) { 
         player1.setName(scan.next()); 
         player1.setColour(scan.next()); 
         p1Turn = scan.nextInt(); 
        } 

        if(playerNumber == 2){ 
         player2.setName(scan.next()); 
         player2.setColour(scan.next()); 
         p2Turn = scan.nextInt(); 
        } 

        line = reader.readLine(); 
       } 


       reader.close(); 

      } catch (FileNotFoundException e) { 
       System.out.println("Couldnae find the file"); 
      } catch (IOException e) { 
       System.out.println("Wee problem reading from file"); 
      } 


     } 

私は最初のintを読んしようとすると、例外がスローされます。

テキストファイルは、このデータが含まれています

1ジャックP 0

2 AI G 0

+1

これは、判読不能でフォーマットされていないコードの壁です。誰もそれを読んでみたくないでしょう。 [ask]を通って[mcve]を作ってください。 – Tunaki

+1

デバッガを使用して、行にブレークポイントを置き、 'line'の値を表示します。それは明らかにあなたが思うものを含んでいません。 – Andreas

答えて

0

は例外があるため、ファイルである、あなたは 1ジャックP 02 AI G 0の間に空行を持っているので、ときにスキャナ空の行のnexIntを取得しようとすると、例外がスローされます。

削除すると正常に機能します。

0

あなたはおそらく、あなたの番号を取得するためにスキャナを使用しないでください。

保存ファイルの行が文字列であるため、文字列を分割して別の要素を取得する必要があります。助け

int playernumber = Integer.parseInt(line.split(" ")[0]); 
int turn = Integer.parseInt(line.split(" ")[3]); 

希望...

+0

私はこれをやってみましたが、そのような要素の例外もスローしません。私は文字列を分割する前に行の内容を表示し、それはまさに私が期待していた通りです - "1 scott P 0"。なぜ非常に "int playernumber = Integer.parseInt(line.split(" "[0]);;" intが読み込まれている場合は例外が発生しますか? –

関連する問題