#java
Вопрос:
У меня проблема с бесконечным циклом, и я не на 100% уверен, в чем проблема.
Я не уверен, есть ли проблема в моем заявлении «while» или есть неправильный знак или скобка.
Я делаю это впервые, и, похоже, ему не нравится, что мой пост «в основном кодовый», поэтому не обращайте внимания на этот абзац, в котором я печатаю, чтобы удалить сообщение 🙂
import java.util.Random; // Needed for the Random class import java.util.Scanner; // Needed for the Scanner class /** This class simulates rolling a pair of dice 10,000 times and counts the number of times doubles of are rolled for each different pair of doubles. */ public class RollDice { public static void main(String[] args){ final int NUMBER = 10000; // Number of dice rolls // A random number generator used in // simulating the rolling of dice Random generator = new Random(); int die1Value; // Value of the first die int die2Value; // Value of the second die int count = -1; // Total number of dice rolls int snakeEyes = 0; // Number of snake eyes rolls int twos = 0; // Number of double two rolls int threes = 0; // Number of double three rolls int fours = 0; // Number of double four rolls int fives = 0; // Number of double five rolls int sixes = 0; // Number of double six rolls int runAgain = 0; // Sentinel variable Scanner keyboard = new Scanner(System.in); //Scanner Object while(runAgain == 0){ //This is a sentinel loop // TASK #1 Enter your code for the algorithm here while(count lt; NUMBER) { // Roll both dice die1Value = generator.nextInt(6) 1; die2Value = generator.nextInt(6) 1; // Check to see if both dice are equal if(die1Value == die2Value) { // Check dice values and update counts if(die1Value == 1) snakeEyes ; else if(die1Value == 2) twos ; else if(die1Value == 3) threes ; else if(die1Value == 4) fours ; else if(die1Value == 5) fives ; else sixes ; } count ; } // Display the results System.out.println ("You rolled snake eyes " snakeEyes " out of " count " rolls."); System.out.println ("You rolled double twos " twos " out of " count " rolls."); System.out.println ("You rolled double threes " threes " out of " count " rolls."); System.out.println ("You rolled double fours " fours " out of " count " rolls."); System.out.println ("You rolled double fives " fives " out of " count " rolls."); System.out.println ("You rolled double sixes " sixes " out of " count " rolls."); } // Reset all counts [Every time you want to run again] snakeEyes = 0; twos = 0; threes = 0; fours = 0; fives = 0; sixes = 0; count = 0; // Ask the user if they wish to run again, 0 = yes, -1 = no System.out.println("Do you wish to run again?"); System.out.println("Enter a 0 for yes or a -1 for no"); // Read user's response runAgain = keyboard.nextInt(); } }
Комментарии:
1. Похоже, вы не обновляете
runAgain
переменную. Если это так, то ваше коварное условиеrunAgain == 0
всегда верно, и цикл никогда не заканчивается2. Просто примечание: использование переменной для каждой стороны слишком перегружено. Вместо этого используйте целочисленный массив.
Ответ №1:
Я отформатировал ваш код, и в дополнение к тому, что говорит Бракке Бавианан, эта часть вашего кода должна находиться внутри цикла while:
// Reset all counts [Every time you want to run again] snakeEyes = 0; twos = 0; threes = 0; fours = 0; fives = 0; sixes = 0; count = 0; // Ask the user if they wish to run again, 0 = yes, -1 = no System.out.println("Do you wish to run again?"); System.out.println("Enter a 0 for yes or a -1 for no"); // Read user's response runAgain = keyboard.nextInt();
В настоящее время находится снаружи, поэтому он продолжает зацикливаться, так как вы никогда не сможете обновить переменную runAgain
Комментарии:
1. Спасибо за аббревиатуру и за усилия по переформатированию кода(наградил его 1). Если мой ответ был вам полезен, обязательно поднимите голос!
Ответ №2:
Вы используете переменную sentinel. Переменная sentinel-это переменная, которая управляет завершением цикла. В вашем случае, как указано в комментарии, переменная sentinel runAgain никогда не обновляется, поэтому цикл будет продолжаться бесконечно.
Boolean sentinel = true; while(sentinel){ doSomething(); if(someCondition == true){ sentinel = false; //loop will end after function reaching this point };
Ответ №3:
Сброс количества должен быть внутри первого времени.