Почему мой код не печатает ничего, кроме 3 или 7? - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь построить игру в крэпс, в которой, если компьютер автоматически получит пару костей и если процессор бросит 7 или 11, выиграет пользователь.Однако, если пользователь бросает 2, 3 или 12, они автоматически проигрывают.И если пользователь выбрасывает любое другое число (4, 5, 6, 8, 9, 10), то это «точка», и он должен попытаться снова выпустить эту точку.(если они не бросают 7, то они проигрывают.) Я пытаюсь заставить свой цикл while продолжать катиться, если компьютер катит число, отличное от 7 или «точка», единственное, что запускается, - «поздравляю, вы бросили 7, вы»мы выиграли "или" вы бросили 3, вы любите "

это то, что у меня сейчас ..

public class CrapsPractice {
    public static void main(String[] args) {

        int d1 = (int) (6 * Math.random() + 1);
        int d2 = (int) (6 * Math.random() + 1);
        int roll = (d1 + d2);
        int point = roll;

        if (roll == 7 || roll == 11)

        {
            System.out.println("You rolled a" + roll);
            System.out.println("Congrats! You've immediately won!");

        }

        else if (roll == 2 || roll == 3 || roll == 12) {
            System.out.println("you rolled a " + roll);
            System.out.println("You lose!");

            while (roll != 7 && roll != point) {
                int d3 = (int) (6 * Math.random() + 1);
                int d4 = (int) (6 * Math.random() + 1);
                roll = d3 + d4;

                System.out.println("your point is" + point);

            }
        }

    }

}

Ответы [ 4 ]

1 голос
/ 23 сентября 2019

Вы фигурные скобки неправильно размещены.Вы закрываете, вы else if после того, как ваш while начался.Вы должны переформатировать что-то вроде этого:

public class crapsPractice{
public static void main(String[]args){   


   int d1 = (int) (6 * Math.random() + 1);
   int d2 = (int) (6 * Math.random() + 1);
   int roll = (d1 + d2);
   int point = roll; 




       if (roll == 7 || roll == 11) 

       {
         System.out.println("You rolled a" + roll); 
         System.out.println("Congrats! You've immediately won!");

       }

       else if (roll == 2 || roll == 3 || roll == 12)
       {
         System.out.println("you rolled a " + roll);
         System.out.println("You lose!");
       }

    while(roll != 7 && roll != point )
    {
    int d3 = (int) (6 * Math.random() + 1);
    int d4 = (int) (6 * Math.random() + 1);
    roll = d3 + d4;

    System.out.println("your point is" + point);

    }


}


} 
0 голосов
/ 23 сентября 2019

Как отмечалось во многих комментариях / ответах, у вас определенно есть фигурные скобки.

Плюс, когда пользователь сразу выиграл или проиграл, я предполагаю, что вы хотите остановить выполнение, а не входить в цикл while.Для этого либо окружите цикл блоком else, либо используйте оператор return; для завершения программы.

Edit: Также, как указывали другие, ваше условие while(roll != 7 && roll != point) никогда не выполняется , поскольку на данном этапе бросок все еще составляет equal до point.Это можно исправить, либо заново установив значение roll на значение по умолчанию (например, 0), либо с помощью цикла do-while .

Используя цикл do-while, тело цикла всегда будет выполняться один раз перед проверкой на соответствие условию.

public class CrapsPractice{
    public static void main(String[]args){   


        int d1 = (int) (6 * Math.random() + 1);
        int d2 = (int) (6 * Math.random() + 1);
        int roll = (d1 + d2);
        int point = roll; 




        if (roll == 7 || roll == 11) 

        {
          System.out.println("You rolled a" + roll); 
          System.out.println("Congrats! You've immediately won!");
          return; //terminate the main function

        }

        else if (roll == 2 || roll == 3 || roll == 12)
        {
          System.out.println("you rolled a " + roll);
          System.out.println("You lose!");
          return; //terminate the main function

        }

        //do-while loop: execute and then check for condition
        //and then if condition holds, execute a second time and so on
        do {
            int d3 = (int) (6 * Math.random() + 1);
            int d4 = (int) (6 * Math.random() + 1);
            roll = d3 + d4;

            System.out.println("your point is" + point);

        } while(roll != 7 && roll != point );
    }
}

Что касается примечания, кажется, что вы всегда печатаете одно и то же в цикле while, не так ли?значит печатать roll вместо point?

0 голосов
/ 23 сентября 2019

Вы забыли добавить остальную часть, и поэтому не печатаете другие числа.Также имя класса всегда начинается с заглавной буквы.

public class CrapsPractice {
        public static void main(String[] args) {

            int d1 = (int) (6 * Math.random() + 1);
            int d2 = (int) (6 * Math.random() + 1);
            int roll = (d1 + d2);
            int point = roll;

            if (roll == 7 || roll == 11)

            {
                System.out.println("You rolled a" + roll);
                System.out.println("Congrats! You've immediately won!");

            }

            else if (roll == 2 || roll == 3 || roll == 12) {
                System.out.println("you rolled a " + roll);
                System.out.println("You lose!");

                while (roll != 7 && roll != point) {
                    int d3 = (int) (6 * Math.random() + 1);
                    int d4 = (int) (6 * Math.random() + 1);
                    roll = d3 + d4;

                    System.out.println("your point is" + point);

                }
            }
            else 
            {
                System.out.println("your point is " + point);
            }

        }

    }
0 голосов
/ 23 сентября 2019

NotZack - это правильно, проверьте ваши скобки, но также у вас есть это:

while(roll != 7 && roll != point )

Не равно roll и point одинаково, поэтому никогда не будетзапустить цикл while

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...