Как остановить цикл в Java, если значение увеличивается последовательно три раза?
Я новичок в Java. Я пишу образец игры ножницы рок-бумаги. пользовательский ввод 0,1,2 для камня, бумаги, ножниц соответственно. программа случайным образом сгенерировала результат. мне почти удалось заставить его работать, но единственное, что я застрял в том, как STOP THE FOR LOOP IF ONE OF THE SIDE WINS CONSECUTIVELY FOR THREE TIMES
,
ЭТО ОРИГИНАЛЬНЫЙ ВОПРОС
Напишите программу, которая играет в игру "ножницами". Правило состоит в том, что ножницы выигрывают у бумаги, камень - у ножниц, а бумага - у камня. Программа представляет ножницы как 0, камень как 1 и бумагу как 2. Игра должна вестись между компьютером и игроком. Программа предложит пользователю ввести количество раундов, чтобы выиграть. Например, если пользователь вводит 4, то победитель должен выиграть как минимум 3 из 4 раундов. Если одна из сторон выигрывает 3 раза подряд, игра заканчивается без четвертого раунда. Если пользователь участвует в 5 раундах, победитель должен выиграть как минимум 3 из 5 раундов. То же правило последовательных 3-х побед также применяется. После того, как пользователь ввел число раундов, компьютер случайным образом генерирует число от 0 до 2. Затем программа предлагает пользователю ввести число 0, 1 или 2. После последнего раунда (с учетом вышеупомянутых ранее победитель-правило), программа отображает сообщение, указывающее, выиграл ли компьютер или пользователь, проиграл или выиграл.
Это мой код.
package assignment1;
import java.util.Scanner;
import java.util.Random;
public class question1_9 {
// This program is used to play scissor-rock-paper game.
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Random random = new Random();
int scissor = 0, rock = 1, paper = 2, round, userinput,comprand, userresult = 0, compresult = 0, control,j,k;
// Variables used in this program is declared and initialized.
/* Number of rounds wished to be play are obtained from user. */
System.out.println("WELCOME TO ROCK PAPER SCISSOR GAME. ");
System.out.println("PLEASE ENTER THE NUMBER OF ROUND YOU WANT TO PLAY: ");
round = scan.nextInt();
control = (round/2)+1;
for(int i = 0; i<round; i++)
{
if (compresult == control | userresult == control)
{
break;
}
System.out.println("ROUND " + (i+1));
System.out.println("PLEASE ENTER:\n 0 for scissor \n 1 for rock \n 2 for paper \n");
userinput = scan.nextInt();
comprand = random.nextInt(3);
if (userinput == 0)
{
if (comprand == 0)
{
System.out.println("COMPUTER IS SCISSOR");
System.out.println("DRAW!!!");
i--;
}
else if (comprand == 1)
{
System.out.println("COMPUTER IS ROCK");
System.out.println("COMPUTER WINS!!!");
compresult++;
}
else
{
System.out.println("COMPUTER IS PAPER");
System.out.println("YOU WIN!!!");
userresult++;
}
}
else if (userinput == 1)
{
if (comprand == 0)
{
System.out.println("COMPUTER IS SCISSOR");
System.out.println("COMPUTER WINS!!!");
compresult++;
}
else if (comprand == 1)
{
System.out.println("COMPUTER IS ROCK");
System.out.println("YOU WIN!!!");
userresult++;
}
else
{
System.out.println("COMPUTER IS PAPER");
System.out.println("DRAW!!!");
i--;
}
}
else
{
if (comprand == 0)
{
System.out.println("COMPUTER IS SCISSOR");
System.out.println("YOU WIN!!!");
userresult++;
}
else if (comprand == 1)
{
System.out.println("COMPUTER IS ROCK");
System.out.println("DRAW!!!");
i--;
}
else
{
System.out.println("COMPUTER IS PAPER");
System.out.println("COMPUTER WINS!!!");
compresult++;
}
}
}
if(compresult == userresult)
System.out.println("\n\nFINAL RESULT IS DRAW!!!");
else if (compresult > userresult)
System.out.println("\n\nFINAL RESULT IS COMPUTER WIN!!!");
else
System.out.println("\n\nFINAL RESULT IS YOU WIN!!!");
}
}
2 ответа
Использование break;
заявление, когда вы хотите выйти из текущего цикла.
В верхней части цикла,
хранить победы в массиве
String[] results=new String[rounds];
сохранить результаты как "пользователь" или "комп" для каждого раунда и в конце цикла сделать это
if((results[i].equals("user") && results[i-1].equals("user") && results[i-2].equals("user") || (results[i].equals("comp") && results[i-1].equals("comp") && results[i-2].equals("comp")))
{
break;
}
Как сказал шрейас, используйте break
заявление, когда вы хотите выйти из цикла.
Я бы поставил compresult
обнулить всякий раз, когда игрок выигрывает раунд, и установить userresult
в ноль всякий раз, когда компьютер побеждает. Затем в верхней части цикла, сразу после {
добавлять:
if(userResult == 3 || computerResult == 3 || round/2 > 10)
{
break;
}
Некоторый код взят из оригинального поста Шрея.