Не работает программа на Java. Не запускается остальная часть кода
Почему то не компилируется часть кода после System.out.println("Бот выбрал "+randS); Программа завершается.
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.println("Напиши одно из трёх: Камень, Ножницы, Бумага");
Scanner scan = new Scanner (System.in);
String Check = scan.nextLine();
System.out.println("Игрок выбрал "+Check);
List<String> game = new LinkedList<>();
game.add("Камень");
game.add("Ножницы");
game.add("Бумага");
Random random = new Random();
int i = random.nextInt(3);
String randS = game.get(i);
System.out.println("Бот выбрал "+randS);
if (Objects.equals(randS, Check))
switch (Check) {
case "Камень":
if (Check.equals(randS)) {
System.out.println("Ничья");
} else if (randS == "Бумага") {
System.out.println("Победил бот");
} else if (randS == "Ножницы") {
System.out.println("Победил игрок");
}
break;
case "Бумага":
if (Check == randS) {
System.out.println("Ничья");
} else if (randS == "Ножницы") {
System.out.println("Победил бот");
} else if (randS == "Камень") {
System.out.println("Победил игрок");
}
break;
case "Ножницы":
if (Check == randS) {
System.out.println("Ничья");
} else if (randS == "Камень") {
System.out.println("Победил бот");
} else if (randS == "Бумага") {
System.out.println("Победил игрок");
}
break;
}
}
}
Ответы (1 шт):
Как было указано, основная проблема -- с логикой программы, так как оператор switch выполняется после проверки что введённое значение пользователем и случайный выбор являются одинаковыми. В принципе, после этого повторное сравнение в операторе switch вполне бессмысленно. Также, строки положено сравнивать при помощи String::equals/String::equalsIgnoreCase.
Возможное решение: сначала проверить равенство введённого варианта и случайного выбора, если разные - определить победителя при помощи одной промежуточной булевой переменной. Также здесь используется более лаконичная форма switch expression вместо привычного оператора:
public static void main(String[] args) {
System.out.println("Напиши одно из трёх: Камень, Ножницы, Бумага");
Scanner scan = new Scanner (System.in);
String playerInput = scan.nextLine();
System.out.println("Игрок выбрал " + playerInput);
List<String> game = new LinkedList<>();
game.add("Камень");
game.add("Ножницы");
game.add("Бумага");
Random random = new Random();
String bot = game.get(random.nextInt(game.size()));
System.out.println("Бот выбрал " + bot);
if (Objects.equals(bot, playerInput)) {
System.out.println("Ничья");
} else {
Boolean botWin = switch (playerInput) {
case "Камень" -> bot.equalsIgnoreCase("Бумага");
case "Бумага" -> bot.equalsIgnoreCase("Ножницы");
case "Ножницы" -> bot.equalsIgnoreCase("Камень");
default -> null;
};
if (null == botWin) {
System.out.println("Неверный ввод: " + playerInput);
} else if (botWin) {
System.out.println("Выиграл бот!");
} else {
System.out.println("Выиграл игрок!");
}
}
}