2016-04-12 12 views
-1

スキャナでファイルを読み取り、いくつかの変数を取得しようとしています。ここでは、ファイルがどのように見えるか(中間の余分な行を無視)である:スキャナを使用してファイルを読み取るときにエラーが発生しました

ControlType:1

FIRE、387.0

FIRE 252.0 @、541.0 @ 198.0

PANT 522.0、174.0 @

268.0 @ PANT、399.0

HERO 397.0、287.0

@

私がする必要があるのは、コントロールの型を取得して格納し、オブジェクトの型(fireなど)を取得して、座標を浮動体として取得することです。これまでのところ私はスタートだと思っていますが、私はポップアップするエラーを理解していません。私はフロートの間のコンマで何かするかもしれないと思う?これは私のコードです:

// Create a scanner 
    Scanner in = new Scanner(level); 
    // Move past initial text 
    in.next(); 
    // Get control type 
    int controlType = in.nextInt(); 

    // While there is something to read 
    while (in.hasNextLine()) { 
     String a = in.next(); 
     System.out.println(a); 

     if (a.equals("FIRE")) { 
      in.next(); 
      float x = in.nextFloat(); 
      float y = in.nextFloat(); 
      fires.add(new Fire(x, y, randGen)); 
     } else if (a.equals("HERO")) { 
      in.next(); 
      float x = in.nextFloat(); 
      float y = in.nextFloat(); 
      hero = new Hero(x, y, controlType); 
     } else if (a.equals("PANT")) { 
      in.next(); 
      float x = in.nextFloat(); 
      float y = in.nextFloat(); 
      pants.add(new Pant(x, y, randGen)); 
     } 
    } 

(スキャナが新しいファイルなどのための必要はありません、ファイルのすべての内容を含む文字列「レベル」から読んでいる。)そして、これが出力されます。

FIRE 

そして、これらのエラー:あなたが入力中@を持ってbeacause

Exception in thread "Animation Thread" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextFloat(Unknown Source) 
    at Game.loadLevel(Game.java:184) 
    at Game.<init>(Game.java:53) 
    at Application.setup(Application.java:90) 
    at processing.core.PApplet.handleDraw(PApplet.java:2373) 
    at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1523) 
    at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:316) 
+2

は '@'有効な浮動小数点数ではありません。 – Berger

+0

in.next()を追加してもエラーが発生することを修正しました – dj1121

答えて

1

あなたがエラーを取得します。 nextFloat()メソッドはそれを取得し、それを浮動小数点として解析しようとしましたが失敗します。したがって、例外が表示されます。

解決する方法の1つは、@を消費するために、別のin.next()をコードに追加することです。

例:

while(in.hasNextLine()){ 
    String a = in.next(); 
    System.out.println(a); 
    in.next(); //consume the @ 
    //rest of code 

編集

あなたはまだ例外を取得することを言います。これは、あなたの番号が,で区切られているためです。あなたもそれを消費する必要があります。あなたがこれを行うことができます

if(a.equals("FIRE")){ 
    in.next();// for @ 
    String num[] = in.nextLine().split(","); 
    float x = Float.parseFloat(num[0].trim()); 
    float y = Float.parseFloat(num[1].trim()); 
    fires.add(new Fire(x, y, randGen)); 
} 
+0

浮動小数点数を取得するにはどうすればそれを消費できますか? – dj1121

+0

スキャナによって読み込まれた値から文字を取り除く必要があります。それを文字列として読み込み、手動で解析します。 – ManoDestra

+0

保存した直後にxを印刷しようとしましたが、取得できなかったようです。私はまだエラーが発生します。 @ – dj1121

関連する問題