2016-11-02 14 views
1

コインフリッププログラムのネストされたwhileループを書くと、私のコードがコンパイルされない理由がわかりません。 最後のユーザー入力は私に範囲外のエラーのインデックスを与えています。誰かがこれを修正する方法を教えてもらえますか?文字列インデックスが範囲外です。

Scanner lit = new Scanner(System.in); 
int numHeads = 0; 
int numTails = 0; 
int counter = 0; 
boolean tryAgain = false; 
String replayResponse = ""; 
char replay = '0'; 

System.out.println("Enter how many times a coin should be flipped"); 
int numFlipped = lit.nextInt(); 

do { 

    do{ 


    if (Math.random() > 0.5){ 
     System.out.println("H"); 
     numHeads++; counter++; 
    } 

    else if (Math.random() < 0.5){ 
     System.out.println("T"); 
     numTails++; counter++; 
    } 


} while(counter < numFlipped); 

    tryAgain = true; 

} while (!tryAgain); 

System.out.println("Number of heads is " + numHeads); 
System.out.println("Number of tails is " + numTails); 
System.out.println(""); 
System.out.println(" Would you like to play again? : Y/N "); 


    replayResponse = lit.nextLine(); 
    replay = replayResponse.charAt(0); 
    if (replay == 'Y' || replay == 'y') { 
     tryAgain = false; 
    } else { 
     tryAgain = true; 


    } 

     lit.close(); 
     System.out.println(); 
     System.out.println("You exited out of the game."); 
     System.out.println("Goodbye!"); 
    } 
+0

どのラインでエラーが発生していますか? – Giovane

+0

これはreplayResponse.charAt(0)の行です。私はBlackhatSamuraiのおかげで今スキャナを閉じましたが、入力ミスマッチ例外が発生しているようです –

答えて

1

intをスキャンするときは、入力をリセットする必要があります。現在、スキャナは次のintを探しています。だから、そのようlit.nextLine();を追加します。

lit.nextLine(); 
replayResponse = lit.nextLine(); 
    replay = replayResponse.charAt(0); 
    if (replay == 'Y' || replay == 'y') { 
     tryAgain = false; 
    } else { 
     tryAgain = true; 

    } 

あなたはまた、行うことができます。

if(lit.hasNextInt()) 
{ 
    numFlip = lit.nextInt(); 
} 

型の不一致例外を解決するために。

+0

それを修正しました!今私はYを入力してプログラムを試してみると入力ミスマッチの例外が出るようです。別のスキャナーエラーですか? –

+0

@EricSmith intの文字列などを使用すると、スキャナはちょっと厄介です。スキャナと関係がありますので、スキャナを閉じてからもう一度再生したい場合は、再度開きます。 – BlackHatSamurai

+0

私はもうコンパイルエラーはありません!私はYを入力すると私の出口ゲームライン –

関連する問題