2011-11-22 10 views
3

私のコードはforループを2回繰り返すようです。私は一日中これを見てきました。私は、何らかのエラーが発生した場合に私は目が見えません。助けていただければ幸いです。Javaのforループスキップは2回実行されます

ノルウェー人が残っているのは申し訳ありませんが、問題には関係ありません。

public static void verb(){ 
    System.out.print("Oppgi navn på verbfil: "); 
    Scanner input = new Scanner(System.in); 
    String fileName = input.nextLine(); 
    File textFile = new File(fileName); 
    try{ 
     Scanner fileInput = new Scanner(textFile); 
     System.out.print("\nVelkommen til programmet som tester deg i bøyning av engelske verb.\nDu kan velge opp til 88 verb å bli testet i.\nDu vil få en vurdering når testen er ferdig\n\n"); 
     System.out.print("Ønsker du å prøve dette? (ja/nei) "); 
     String yesNo = input.next(); 
     if (yesNo.toLowerCase().equals("ja")){ 
      System.out.print("\nOppgi ønsket antall verb: "); 
      int points = 0; 
      int amountVerbs = input.nextInt(); 
      for (int i = 1; i <= amountVerbs; i++){ 
       String verb1 = fileInput.next(); 
       String verb2 = fileInput.next(); 
       String verb3 = fileInput.next(); 
       int verbSelect = randomGen(3); 
       if (verbSelect == 1){ 
        System.out.print("... " + verb2 + " - " + verb3); 
        System.out.print("\nSkriv inn formen som mangler: "); 
        String answer = input.nextLine(); 
        if (answer.toLowerCase().equals(verb1)){ 
         points+= 1; 
        } 
       } 
       if(verbSelect == 2){ 
        System.out.print(verb1 + " - " + "..." + " - " + verb3); 
        System.out.print("\nSkriv inn formen som mangler: "); 
        String answer = input.nextLine(); 
        if (answer.toLowerCase().equals(verb2)){ 
         points+= 1; 
        } 
       } 
       if(verbSelect == 3){ 
        System.out.print(verb1 + " - " + verb2 + " - " + "..."); 
        System.out.print("\nSkriv inn formen som mangler: "); 
        String answer = input.nextLine(); 
        if (answer.toLowerCase().equals(verb3)){ 
         points+= 1; 
        } 
       } 
      } 
      System.out.print("Oppgi navnet ditt: "); 
      String name = input.nextLine(); 
      System.out.print(name + "\n" + "Score: " + points + " av " + amountVerbs); 
     } else{ 
      System.out.print("Greit det."); 
     } 
    } catch (FileNotFoundException exc) { 
     System.out.println("Feil filnavn!"); 
    } 
} 

public static int randomGen(int randMax){ 
    Random generator = new Random(); 
    int verbSelect = generator.nextInt(randMax) + 1; 
    return verbSelect; 
} 

} 
+0

どうしたらいいですか? –

+0

入力を許可する前に 'Skriv inn formen som mangler:'を2回印刷しますか? – flesk

答えて

4

あなたの問題は、Scannerオブジェクトの使用と、EOL(End Of Line)トークンの処理方法に起因する可能性があります。このトークンを扱うのはScanner#nextLine()であり、next()nextInt()nextDouble()などではないことに注意してください。ユーザーに数値を入力させた場合、数値入力を取得した直後にnextLine()を呼び出すことは価値があります。

int amountVerbs = input.nextInt(); 
:この

String yesNo = input.nextLine(); // handles EOL. 

これに

String yesNo = input.next(); 

例えば、

Scanner input = new Scanner(System.in); 
int myInt = input.nextInt(); 
input.nextLine(); // added to swallow the EOL token 

は、これを変更することを検討しますこれまで10

:スキャナのあなたの他の用途のため

int amountVerbs = input.nextInt(); 
input.nextLine(); // to swallow the EOL token. 

とその前後。

+0

乾杯、それを解決! – Ceteareth

+0

@IArrPirate:クール!私はこの問題に何度もぶつかってきました。 –

+0

ハァッ、それはあなたのものの1つと判明しました!ちょっと、今私はあなたがEOLの食卓を避けるために - > 'double d = Double.parseDouble(input.nextLine());'をどのように感じるかを聞くことができますか? – ChiefTwoPencils

関連する問題