Программа не будет продолжаться при нажатии Enter. Как я могу исправить эту ошибку? - PullRequest
1 голос
/ 08 мая 2019

Я работаю над заданием по домашнему заданию по изучению java. Я сделал с программой, и я успешно скомпилировал ее. Я запустил файл, и он выглядел так, как будто он работал. Это дает мне меню, и я выбираю переменную, например, R, и когда я нажимаю ввод, он ничего не делает, но переходит на следующую строку. Я нажимаю клавишу ввода еще раз, и она выдает ошибку индекса из-за границ, которую я предполагаю, потому что во второй раз у нее не было переменной для использования. Как мне заставить программу двигаться вперед? Программа должна проигрываться пять раз, а затем возвращать победителя. Заранее спасибо. Это изображение, которое я получаю, когда запускаю программу и дважды нажимаю клавишу ввода

package Rock;
import java.util.Scanner;




public class RPSG {




public static void main(String[] args) {

    String[] computerHandArray = {"R","P","S"};
    String computerHand ="", thisWinner="", theFinalWinner="";
    int index=0;
    int timesIWon=0;
    int timesComputerWon=0;
    Scanner in = new Scanner(System.in);
    System.out.println("\tMenu\n\n(R) Rock\n(P) Paper\n(S) Scissors" + "\n\nEnter Your Hand (R, P, or S): ");
    for (int i=0; i<5; i++) {
        String myHandString = in.nextLine();
        String myHand = myHandString.substring(0,1);
        myHand = myHand.toUpperCase();
        index = (int)(Math.random() * 10) % 3;
        computerHand = computerHandArray[index];
        thisWinner = theWinnerofOneGame(myHand, computerHand);

        if(thisWinner.equals("ME")){
            timesIWon++;
        }
            else if(thisWinner.equals("COMPUTER")) {
                timesComputerWon++;
        }
    }

        if(timesIWon == timesComputerWon)
        theFinalWinner = "TIE";
    else if(timesIWon > timesComputerWon)
            theFinalWinner = "ME";
    else if(timesComputerWon > timesIWon)
        theFinalWinner = "COMPUTER";
    System.out.println("I won :" + timesIWon);
    System.out.println("I won :" + timesComputerWon);
    System.out.println("The Final Winner after 5 games is:" +theFinalWinner);
    }
private static String theWinnerofOneGame(String myHand, String computerHand){
    String theWinner = "Tie";
    if(myHand.equals(computerHand)) {
        theWinner = "Tie"; 
}
    else if(myHand.equals("R")) {
        if (computerHand.equals("P")) {
            theWinner = "COMPUTER";
        }
    }

    else if(computerHand.equals("S")) {
        theWinner = "ME";
    }

else if(myHand.equals("P")) {
    if (computerHand.equals("R")) {
        theWinner = "ME";
    }
    else if(computerHand.equals("S")) {
        theWinner = "COMPUTER";
        }
    }
else if(myHand.equals("S")) {
    if (computerHand.equals("R")) {
        theWinner = "COMPUTER";

    }

    else if(computerHand.equals("P")) {
        theWinner = "ME";
    }
}
    return theWinner;
    }

}

1 Ответ

3 голосов
/ 08 мая 2019

Вы выводите подсказку для ввода только один раз, то есть перед циклом for. Теперь, когда вы вводите свой первый ввод, содержимое цикла будет выполнено. Поскольку вы ничего не печатаете внутри цикла, подсказка для следующего раунда отсутствует. После второго нажатия клавиши ввода in.nextLine() возвращает пустую строку, а затем метод substring вызывает исключение.

Вы, вероятно, должны сделать что-то вроде этого (обратите внимание на отмеченные линии):

System.out.println("\tMenu\n\n(R) Rock\n(P) Paper\n(S) Scissors" + "\n\n");
    for (int i=0; i<5; i++) {
>        System.out.println("Enter Your Hand (R, P, or S): ");
        String myHandString = in.nextLine();
        String myHand = myHandString.substring(0,1);
        myHand = myHand.toUpperCase();
        index = (int)(Math.random() * 10) % 3;
        computerHand = computerHandArray[index];
        thisWinner = theWinnerofOneGame(myHand, computerHand);

        if(thisWinner.equals("ME")){
            timesIWon++;
>            System.out.println("You won.");
        } else if(thisWinner.equals("COMPUTER")) {
            timesComputerWon++;
>            System.out.println("The computer won.");
        }
    }

И, что еще лучше, проверьте правильность ввода пользователя, прежде чем вычислять подстроку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...