#java
Вопрос:
Цель игры состоит в том, чтобы использовать цикл while. В этом цикле он определит, кто выиграет игру, на основе введенного числа. Цифры от 1 до 20. Вызов-это переменная, установленная на 10. Если Если > бросить вызов, монстр теряет очко. Тот, кто первым потеряет 3 очка, проигрывает игру. Мне не нужно генерировать случайные числа, мне просто нужны входные данные с помощью функции сканера.
Я думал, что переменные необходимы для сканера, поэтому я добавил переменные Dice. Они не используются, и я в замешательстве, нужны ли они мне или нет, чтобы заставить сканер работать, чтобы пользователь мог вводить данные.
Я также не понимаю, как отказаться от игрока и монстра, когда они получают удар. Вот почему я устанавливаю переменные под каждым блоком для количества очков, которые у них есть. Это неправильно, но я застрял в том, как правильно это отобразить.
Мне удалось вывести на экран несколько сообщений, но любое число дало бы мне тот же результат, что и -1 для первого игрока.
По сути, я застрял на том, как написать это в коде отсюда. Мы будем очень признательны за любую помощь.
import java.util.Scanner;
public class Task3 {
public static void main(String[] args) {
task3(20);
}
public static void task3(int challenge) {
challenge = 10;
int player = 3;
int monster = 3;
Scanner sc = new Scanner(System.in);
System.out.println("Enter your dice roll");
int diceRollOne = sc.nextInt();
while (player <= challenge) {
System.out.println("Monster misses");
System.out.println("Enter your dice roll");
int diceRollTwo = sc.nextInt();
continue;
if (player <= challenge) {
System.out.println("-1 for player");
player = 2;
System.out.println("Enter your dice roll");
int diceRollThree = sc.nextInt();
} else if (player > challenge) {
System.out.println("-1 for monster");
monster = 2;
System.out.println("Enter your dice roll");
int diceRollFour = sc.nextInt();
continue;
if (player <= challenge) {
System.out.println("-1 for player");
player = 1;
System.out.println("Enter your dice roll");
int diceRollFive = sc.nextInt();
continue;
if (player > challenge) {
System.out.println("-1 for monster");
monster = 1;
System.out.println("Enter your dice roll");
int diceRollSix = sc.nextInt();
continue;
} else if (player <= challenge) {
System.out.println("-1 for player");
player = 0;
System.out.println("Monster Wins");
int diceRollSeven = sc.nextInt();
continue;
if (player > challenge) {
System.out.println("-1 for monster");
monster = 0;
System.out.println("Player wins!");
int diceRollEight = sc.nextInt();
}
}
}
}
}
}
}
Комментарии:
1. Вы знаете, что
continue
в четвертой строке цикла будет выполняться безоговорочно и переходить к следующей итерации, верно?2. @user16320675 действительно: я не могу скомпилировать этот код.
3. 1. Вы, вероятно, хотите сравнить
diceRollOne
иchallenge
вместоplayer
иchallenge
. 2. Вы, вероятно, захотите вычесть очки,player = player -1
вместо того чтобы каждый раз устанавливать точное значение. 3. Вы, вероятно, захотите использовать цикл, чтобы избежать написания повторяющихся кодов, но вы все еще пишете эти повторяющиеся коды в теле цикла с еще более сложной логикой и в конечном итоге все испортите.
Ответ №1:
Когда вы пишете цикл «время», вы должны сначала подумать о том, когда цикл завершится / когда цикл продолжится. В вашем случае вы хотите, чтобы цикл закончился, когда либо player
или monster
станет 0
. Поэтому условие для продолжения выполнения цикла while является противоположным, т. е. они оба > 0
.
Затем подумайте о том, что вы хотите делать в каждой итерации. В вашем случае повторяющиеся задачи
- Считывание целого числа из пользовательского ввода
- сравните целое число с
challenge
- вычтите 1 балл из соответствующей переменной
Наконец, после завершения цикла вы можете использовать значение player
и monster
для определения результата и распечатать его.
import java.util.Scanner;
public class Task3 {
public static void main(String args[]) {
task3(10);
}
public static void task3(int challenge)
{
int player = 3;
int monster = 3;
int dice = 0;
Scanner sc = new Scanner(System.in);
while(player > 0 amp;amp; monster > 0)
{
System.out.println("Enter your dice roll");
dice = sc.nextInt();
if(dice > challenge)
{
monster--;
}
else
{
player--;
}
}
if(player > monster)
{
System.out.println("Player wins!");
}
else
{
System.out.println("Monster wins!");
}
}
}
P.S. Попробуйте понять код вместо того, чтобы просто копировать и вставлять в свою домашнюю работу 🙂
Комментарии:
1. Спасибо, я пытаюсь понять это, поэтому я опубликовал то, над чем работал. Просто я застрял на этом.
Ответ №2:
Вам не нужно иметь отдельную переменную, чтобы получать каждый ввод от сканера.
Вы можете получать входные данные каждый раз в цикле while и сравнивать значение с вызовом.
мы выйдем из цикла только тогда, когда игрок или монстр станет равным нулю. оказавшись вне цикла, вы можете проверить, кто выиграл, и распечатать результат соответствующим образом.
import java.util.Scanner;
public class Task3 {
public static void main(String[] args) {
task3(10);
}
public static void task3(int challenge) {
int player = 3;
int monster = 3;
Scanner sc = new Scanner(System.in);
int diceRoll;
while (player == 0 || monster == 0) {
System.out.println("Enter your dice roll");
diceRoll = sc.nextInt();
if(player < challenge)
player--;
else
monster--;
}
if(player < monster)
System.out.println("Player wins!");
else
System.out.println("Monster Wins");
}
}
если вы хотите, чтобы в качестве входных данных использовались только числа от 1 до 20, вам также следует добавить условие if, которое проверяет это после получения входных данных