Ввод нечувствителен к регистру и любые советы по улучшению - PullRequest
0 голосов
/ 08 мая 2018

Я работаю над проектом игры в ножницы из каменной бумаги и хотел бы узнать, как разрешить пользователю вводить несколько типов одного и того же слова. Если пользователь набрал «ROCK», «rock» или «RoCk», я хочу, чтобы программа позволила ему продолжить работу в качестве допустимого ввода. Кроме того, это мой первый проект, и если у вас есть какие-либо советы или замечания, пожалуйста, дайте мне знать. Я хочу стать лучше в программировании и с удовольствием приму любой совет. Спасибо.

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    //Displays what the game is
    System.out.println("Rock! Paper! Scissors!");

    String[] random = {"Rock", "Paper", "Scissors"};

    //Making the computer choice random
    String randomString = random[(int) (Math.random() * random.length)];

    //Telling the user to chose between rock paper and scissors
    System.out.println("Rock Paper or Scissors?");

    //User input
    String User;

    //If User doesn't enter Rock, Paper, or Scissors they will get an error message and have to try again
    do {
        User = input.nextLine();
        if (!User.equals("Rock") && !User.equals("Paper") && !User.equals("Scissors")) {
            System.out.println("ERROR Please enter \"Rock\" \"Paper\" or \"Scissors\" ");
        }
    } while (!User.equals("Rock") && !User.equals("Paper") && !User.equals("Scissors"));

    //Displays what the user chose
    if (User.equals("Rock")) {
        System.out.println("User has chosen: Rock!");
    }
    if (User.equals("Paper")) {
        System.out.println("User has chosen: Paper!");
    }
    if (User.equals("Scissors")) {
        System.out.println("User has chosen: Scissors!");
    }

    //Telling the user what the computer has chosen
    System.out.println("Computer has chosen: " + randomString + "!");

    //If the user's choice equals the computers choice the game is a tie
    if (User.equals("Rock") && randomString.equals("Rock")) {
        System.out.println("It is a tie!");
    }
    if (User.equals("Paper") && randomString.equals("Paper")) {
        System.out.println("It is a tie!");
    }
    if (User.equals("Scissors") && randomString.equals("Scissors")) {
        System.out.println("It is a tie!");
    }

    //Deciding who wins if both User and computer chose something different
    if (User.equals("Rock") && randomString.equals("Paper")) {
        System.out.println("Computer has won!");
    }
    if (User.equals("Rock") && randomString.equals("Scissors")) {
        System.out.println("User has won!");
    }
    if (User.equals("Paper") && randomString.equals("Scissors")) {
        System.out.println("Computer has won!");
    }
    if (User.equals("Paper") && randomString.equals("Rock")) {
        System.out.println("User has won!");
    }
    if (User.equals("Scissors") && randomString.equals("Paper")) {
        System.out.println("User has won!");
    }
    if (User.equals("Scissors") && randomString.equals("Rock")) {
        System.out.println("Computer has won!");
    }

}

Ответы [ 2 ]

0 голосов
/ 08 мая 2018
do {
    User = input.nextLine();
    if (!User.equals("Rock") && !User.equals("Paper") && !User.equals("Scissors")) {
        System.out.println("ERROR Please enter \"Rock\" \"Paper\" or \"Scissors\" ");
    }
} while (!User.equals("Rock") && !User.equals("Paper") && !User.equals("Scissors"));

Вы повторяете здесь.

У вас уже есть массив со всеми опциями:

String[] random = {"Rock", "Paper", "Scissors"};

Так что просто используйте это:

while (true) {
    User = input.nextLine();
    Optional<String> r = Stream.of(random).findFirst(User::equalsIgnoreCase);
    if (r.isPresent()) {
      User = choice; // get in the expected case
      break;
    }
    System.out.println("ERROR Please enter \"" + String.join("\", \"", random) + "\"");
}
0 голосов
/ 08 мая 2018

String.equalsIgnoreCase(String str) соответствует вашим потребностям. Он будет сравнивать две строки без учета регистра.

Пример: В вашем случае вы можете использовать User.equalsIgnoreCase("Rock").

...