Всем привет. Написал свою первую программу - "Камень, ножницы, бумага". Вроде всё работает, кроме одного НО: в цикле while не выполняется условие и программа не завершается. Помогите разобраться
public class Stone_scissors_paper {
public static int PersonCount;
public static int BotCount;
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.println("What's your name?");
String name = scn.nextLine();
System.out.println("Hello " + name + ". Let's play an interesting game? Say Yes or No?");
String answer = scn.next();
// Check the entered answer
while (!answer.equalsIgnoreCase("Yes")){
System.out.println("Your answer is incorrect, try once more)");
answer = scn.next();
}
System.out.println("Okay, let's go. You first");
String BotChoose;
int round = 0;
int[] game = new int[1];
// Game till 3 wins
while ((PersonCount != 3) || (BotCount != 3)) {
round ++;
System.out.println("Round " + round + " is:");
String Mychoose = scn.next();
if (Mychoose.equalsIgnoreCase("Stone"))
{
System.out.println("You pick " + Mychoose);
BotChoose = Bot.ChooseBot();
System.out.println("My pick is " + BotChoose);
game = Compare.CompareGame(Mychoose, BotChoose);
}
else if (Mychoose.equalsIgnoreCase("Scissors"))
{
System.out.println("You pick " + Mychoose);
BotChoose = Bot.ChooseBot();
System.out.println("My pick is " + BotChoose);
game = Compare.CompareGame(Mychoose, BotChoose);
}
else if (Mychoose.equalsIgnoreCase("Paper"))
{
System.out.println("You pick " + Mychoose);
BotChoose = Bot.ChooseBot();
System.out.println("My pick is " + BotChoose);
game = Compare.CompareGame(Mychoose, BotChoose);
}
else {
System.out.println("You input incorrect word, please try once more");
}
System.out.println("PersonCount = " + PersonCount + " BotCount = " +
BotCount);
System.out.println("Round " + round + " is over\n");
// Программа корректно работает только с этим условием, хотя оно лишнее
if(PersonCount == 3 || BotCount == 3)
break;
}
if(game[0] == 3)
System.out.println("Damn, you win!!!");
else
System.out.println("Ahaha, you lost!!!");
}
}
Также прикладываю 2 метода, которые используются в программе. Может быть в них закралась какая-то ошибка, я не знаю. Метод CompareGame класса Compare:
public class Compare {
public static int[] CompareGame(String PersonChoose, String BotChoose){
if (PersonChoose.equalsIgnoreCase("Stone")){
if (BotChoose.equals("Stone")){
System.out.println("Draw, please try once more");
}
if (BotChoose.equals("Scissors")){
System.out.println("You win");
Stone_scissors_paper.PersonCount += 1;
}
if (BotChoose.equals("Paper")){
System.out.println("I win");
Stone_scissors_paper.BotCount += 1;
}
}
if (PersonChoose.equalsIgnoreCase("Scissors")){
if (BotChoose.equals("Scissors")){
System.out.println("Draw, please try once more");
}
if (BotChoose.equals("Paper")){
System.out.println("You win");
Stone_scissors_paper.PersonCount += 1;
}
if (BotChoose.equals("Stone")){
System.out.println("I win");
Stone_scissors_paper.BotCount += 1;
}
}
if (PersonChoose.equalsIgnoreCase("Paper")) {
if (BotChoose.equals("Paper")) {
System.out.println("Draw, please try once more");
}
if (BotChoose.equals("Stone")) {
System.out.println("You win");
Stone_scissors_paper.PersonCount += 1;
}
if (BotChoose.equals("Scissors")) {
System.out.println("I win");
Stone_scissors_paper.BotCount += 1;
}
}
return new int[] {Stone_scissors_paper.PersonCount, Stone_scissors_paper.BotCount};
}
}
Метод ChooseBot класса Bot:
public class Bot {
private static String PickBot;
private static String[] BotPick = {"Stone", "Scissors", "Paper"};
private static Random RandNum = new Random();
public static String ChooseBot(){
// Возвращает числа от 0 до 2
int rnd = RandNum.nextInt(3);
switch (rnd){
case 0:
PickBot = BotPick[0];
return PickBot;
case 1:
PickBot = BotPick[1];
return PickBot;
case 2:
PickBot = BotPick[2];
return PickBot;
default:
System.out.println("Something went wrong");
return "error";
}
}
}
Буду благодарен за любую помощь. Спасибо.
Абсолютно бесполезная штука : int[] game = new int[1]
import java.util.Scanner;
public class Stone_scissors_paper {
public static int PersonCount;
public static int BotCount;
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.println("What's your name?");
String name = scn.nextLine();
System.out.println("Hello " + name + ". Let's play an interesting game? Say Yes or No?");
String answer = scn.next();
// Check the entered answer
while (!answer.equalsIgnoreCase("Yes")) {
System.out.println("Your answer is incorrect, try once more)");
answer = scn.next();
}
System.out.println("Okay, let's go. You first");
String BotChoose;
int round = 0;
// Game till 3 wins
while (PersonCount < 3 || BotCount < 3) {
round++;
System.out.println("Round " + round + " is:");
String Mychoose = scn.next();
if (Mychoose.equalsIgnoreCase("Stone")
|| Mychoose.equalsIgnoreCase("Scissors")
|| Mychoose.equalsIgnoreCase("Paper")) {
System.out.println("You pick " + Mychoose);
BotChoose = Bot.ChooseBot();
System.out.println("My pick is " + BotChoose);
Compare.CompareGame(Mychoose, BotChoose);
} else {
System.out.println("You input incorrect word, please try once more");
}
System.out.println("PersonCount = " + PersonCount + " BotCount = " + BotCount);
System.out.println("Round " + round + " is over\n");
if (PersonCount == 3) {
System.out.println("Damn, you win!!!");
break;
} else if (BotCount == 3) {
System.out.println("Ahaha, you lost!!!");
}
}
}
}
Переписать метод на
public static void CompareGame(String PersonChoose, String BotChoose)
он все равно меняет вашу глобальную переменную, не надо ему ничего возвращать типа вашего извращения :) Compare класс:
public class Compare {
public static void CompareGame(String PersonChoose, String BotChoose) {
if (PersonChoose.equalsIgnoreCase("Stone")) {
if (BotChoose.equals("Paper")) {
System.out.println("I win");
Stone_scissors_paper.BotCount += 1;
} else if (BotChoose.equals("Scissors")) {
System.out.println("You win");
Stone_scissors_paper.PersonCount += 1;
} else {
System.out.println("Draw, please try once more");
}
}
if (PersonChoose.equalsIgnoreCase("Scissors")) {
if (BotChoose.equals("Paper")) {
System.out.println("You win");
Stone_scissors_paper.PersonCount += 1;
} else if (BotChoose.equals("Stone")) {
System.out.println("I win");
Stone_scissors_paper.BotCount += 1;
} else {
System.out.println("Draw, please try once more");
}
}
if (PersonChoose.equalsIgnoreCase("Paper")) {
if (BotChoose.equals("Stone")) {
System.out.println("You win");
Stone_scissors_paper.PersonCount += 1;
} else if (BotChoose.equals("Scissors")) {
System.out.println("I win");
Stone_scissors_paper.BotCount += 1;
} else {
System.out.println("Draw, please try once more");
}
}
}
}
Бот класс:
import java.util.Random;
public class Bot {
private static String[] BotPick = {"Stone", "Scissors", "Paper"};
private static Random RandNum = new Random();
public static String ChooseBot(){
// Возвращает числа от 0 до 2
int rnd = RandNum.nextInt(3);
switch (rnd){
case 0:
return BotPick[0];
case 1:
return BotPick[1];
case 2:
return BotPick[2];
default:
System.out.println("Something went wrong");
return "error";
}
}
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники