2015-10-12 4 views
0

Написал программу roshambo, запустил ее один раз, работал нормально, снова запустил ее, и появились следующие ошибки:JAVA: Почему я продолжаю получать эти ошибки во время выполнения?

RoShamBo!

  1. Play Game
  2. Показать Score
  3. Бросить

Что вы выбираете?

  1. Рок
  2. Бумага
  3. Ножницы

Что вы выбираете?

  1. Рок
  2. Бумага
  3. Ножницы

Неверная запись, пожалуйста, попробуйте еще раз.

Exception in thread "main" java.util.NoSuchElementException 

at java.util.Scanner.throwFor(Unknown Source) 

at java.util.Scanner.next(Unknown Source) 

at RoShamBo.getUserChoice(RoShamBo.java:82) 

at RoShamBo.winner(RoShamBo.java:112) 


at RoShamBo.main(RoShamBo.java:27) 

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

благодарит заранее.

import java.util.Scanner; 

public class RoShamBo 
{ 
public static void main(String[] args) 
{ 
    System.out.println("RoShamBo!"); 
    System.out.println("1. Play Game"); 
    System.out.println("2. Show Score"); 
    System.out.println("3. Quit"); 
    Scanner userInput = new Scanner(System.in); 

    if(userInput.hasNextInt()) 
    { 
     int userIn = userInput.nextInt(); 
     if(userIn == 1) 
     { 
      getUserChoice(); 
      getCompChoice(); 
      winner(); 
     } 
     else if(userIn == 2) 
     { 
      scores(); 
     } 
     else if(userIn == 3) 
     { 
      System.out.println("Qutiing: Final Score was: "); 
      scores(); 
      userInput.close(); 
     } 
     else 
     { 
      System.out.println("Invalid Entry, Please Try Again."); 
      userInput.next(); 
     } 
    } 
    else 
    { 
     System.out.println("Invalid Entry, Please Try Again."); 
     userInput.next(); 
    } 
}  
public static String getUserChoice() 
{ 
    // ask player for a move : playerMove 
    System.out.println("Which do you choose?"); 
    System.out.println("1. Rock"); 
    System.out.println("2. Paper"); 
    System.out.println("3. Scissors"); 

    Scanner input = new Scanner(System.in); 
    String userChoice = " "; 

    if (input.hasNextInt()) 
    { 
     int userInput = input.nextInt(); 
     switch(userInput) 
     { 
      case 1: 
        userChoice = "Rock"; 
        break; 
      case 2: 
        userChoice = "Paper"; 
        break; 
      case 3: 
        userChoice = "Scissors"; 
        break; 
     } 

    } 
    else 
    { 
     System.out.println("Invalid Entry, Please Try Again."); 
     input.next(); 
    } 
    input.close(); 
    return userChoice; 
} 
private static String getCompChoice() 
{ 
    //Method for getting Computers move 
    int compChoice = (int) (1 + (Math.random() * 3)); 
    String compMove = " "; 
    switch(compChoice) 
    { 
     case 1: 
       compMove = "Rock"; 
       break; 
     case 2: 
       compMove = "Paper"; 
       break; 
     case 3: 
       compMove = "Scissors"; 
       break; 
    } 

    return compMove; 
} 

public static String winner() 
{ 
    String winnerIs = " "; 
    String comp = getCompChoice(); 
    String user = getUserChoice(); 
    if(user.equals("Rock") && comp.equals("Scissors") || 
     user.equals("Paper") && comp.equals("Rock") || 
     user.equals("Scissors") && comp.equals("Paper")) 
    {   
     System.out.println("You Win!"); 
    } 
    else 
    { 
     System.out.println("You Lose"); 
    } 
    return winnerIs; 
} 
public static void scores() 
{ 
    int compCount = 0; 
    int userCount = 0; 
    if (winner().equals("You Win!")) 
    { 
     userCount++; 
    } 
    else 
    { 
     compCount++; 
    } 
    System.out.println("Player = " + userCount); 
    System.out.println("Computer = " + compCount); 
} 
} 
+1

Показать ввод – Jens

+0

Вы знакомы с понятием цикла, правильно? Из того, что я вижу, должно быть хотя бы одно место, если вы хотите, чтобы пользовательский ввод читался более одного раза. – zubergu

+0

Когда пользователь хочет играть, вы вызываете 'getUserChoice();' и 'getCompChoice();', не сохраняя результат, а затем в 'winner()' вы вызываете их еще раз, пользователь должен играть дважды! – StephaneM

ответ

2

Вероятно, здесь

{ 
     System.out.println("Invalid Entry, Please Try Again."); 
     input.next(); 
    } 

вы делаете next() без проверки has*().

2

Ваш стек дает один намек.

at java.util.Scanner.next(Unknown Source). 

и

Exception in thread "main" java.util.NoSuchElementException 

Обращаясь к документации здесь:

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#next%28%29

часть, которая представляет интерес для вас:

Броски: NoSuchElemen tException - если не больше лексем доступны

Вы называете .next() , но то, что вы хотите прочитать? Есть ли что-нибудь в буфере ввода? Кроме того, см. Мой комментарий, что означает, что ваша логика разрушена.Rethink ваша логика игры, а не ее фиксация.

Дает полный ответ, который заставит ваш код работать, как предполагается, будет означать запись большей части вашего кода, я не пойду так. Вместо этого, вы должны использовать один из самых мощных методов отладки, известных людей и сделать это самостоятельно:

https://en.wikipedia.org/wiki/Rubber_duck_debugging

удачи и наслаждайтесь;)

Смежные вопросы