Почему этот цикл While не выполняется должным образом

#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 .

Затем подумайте о том, что вы хотите делать в каждой итерации. В вашем случае повторяющиеся задачи

  1. Считывание целого числа из пользовательского ввода
  2. сравните целое число с challenge
  3. вычтите 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, которое проверяет это после получения входных данных