2016-11-02 15 views
1

Написание вложенного цикла для программы переворачивания монет, и я не могу узнать, почему мой код не будет компилироваться. Пользовательский ввод в конце дает мне ошибку индекса вне диапазона. Может кто-нибудь сказать мне, как это исправить?Почему мой индекс строки выходит за пределы диапазона?

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, она выводит мою выходную линию игры –