2016-09-25 10 views
-1
package baker; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 


public class FileReader { 

    public static void main(String[] args) throws FileNotFoundException { 
     String name; 
     double height; 
     double inches; 
     double idealWeight; 

     Scanner fileReader; 
     fileReader = new Scanner(new FileInputStream("Data/patients.txt")); 
     while (fileReader.hasNext()) { 

      name = fileReader.next(); 
      System.out.println("Name: "); 
      height = fileReader.nextInt(); 
      inches = fileReader.nextInt(); 

      fileReader.nextLine(); 
      idealWeight = 110 + (height - 5) * 5 + inches * 5; 
      System.out.println("Ideal Weight: " + idealWeight); 


    } 
    } 
} 

このコードは、次のエラースロー:、私の知る限りInputMismatchExceptionスキャナを使用しようとすると、何が欠けていますか?

height = fileReader.nextInt(); 

:次の行である22行目にエラー箇所の

Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Scanner.java:864) 
    at java.util.Scanner.next(Scanner.java:1485) 
    at java.util.Scanner.nextInt(Scanner.java:2117) 
    at java.util.Scanner.nextInt(Scanner.java:2076) 
    at baker.FileReader.main(FileReader.java:22) 
C:\Users\SFU\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 
BUILD FAILED (total time: 0 seconds) 

最後の行を、入力ミスマッチエラーの理由はありません。助言がありますか?私は問題のファイル(patients.txt)を下に掲載しました。

+0

FileInputStreamとは関係ありません。 *入力データと関係があります。* – EJP

答えて

1

理由はnameの割り当てのためです。あなたは、次の操作を行います

name = fileReader.next(); 

事実はnext戻り、デフォルトではスペースで区切られた次のトークンです。 Javadocsパー:だから

public String next()

Finds and returns the next complete token from this scanner. A complete token is preceded and followed by input that matches the delimiter pattern.

、あなたは今、最初と最後の名前が問題となる可能性があることがわかります。たとえば、あなたがファイルでこれを持っていた場合:

John Smith 

そして、あなたがやった:それは、次の完全なトークンだとスペースで区切られているので

scanner.next(); 

あなたは、唯一のJohnになるだろう。あなたが整数をスキャンする場合それは意味:

scanner.nextInt(); 

スキャナはSmith(文字列)を発生し、InputMismatchExceptionがスローされます。代わりに、行全体を受け取るために:

name = fileReader.nextLine(); 

を使用してください。これはJohn Smithとなります。その詳細についてはhereをご覧ください。

関連する問題