Помещение двух логических контроллеров в выражение do while?

Новичок программист здесь. Я использую Java, чтобы попытаться создать игру с угадыванием чисел. Я хочу, чтобы цикл do while продолжался до тех пор, пока пользователь не введет правильный номер ИЛИ у него не закончатся догадки. Это то, что у меня есть, и я не могу понять, как использовать 2 логических контроллера для моей жизни.

do
    {System.out.println("Enter guess #1");
    userGuess = keyboard.nextInt();

    } while ((userGuess != actualNumber) || (remainingGuesses = guesses;       remainingGuesses >= 1; remainingGuesses--)); 

Любая помощь приветствуется!

3 ответа

Я думаю, что вы хотите что-то ближе к этому эффекту

remainingGuess = guesses;
do {
   System.out.println("Enter guess #1");
   userGuess = keyboard.nextInt();
} while ( userGuess != actualNumber || remainingGuesses-- > 0 )

Построчно:

remainingGuesses = guesses;

правопреемники guesses в remainingGuesses однажды, если бы вы делали это каждую итерацию цикла, это никогда не закончилось бы

userGuess != actualNumber || remainingGuesses-- > 0 

Продолжайте повторять, пока пользователь не угадал ИЛИ remainingGuesses больше чем 0,

remainingGuesses--

Оценивает текущее значение переменной remainingGuesses, затем после выражения уменьшает его на 1.

Инициализируйте оставшиеся догадки перед входом в цикл. Проверяйте только состояние во время парантеза "()"

reaminingGuesses = guesses;
do
    {System.out.println("Enter guess #1");
    userGuess = keyboard.nextInt();
    remainingGuess--;
    } while ((userGuess != actualNumber) || (remainingGuesses >= 1)); 

Если вы хотите сделать это как можно быстрее, я внесу несколько небольших изменений, и предположим, что у вас есть константы, определенные для таких вещей, как actualNumber и общее количество разрешенных догадок:

// break the calls into seperate methods, to make them easier to read in the long term and to 
// seperate logical concerns into discrete elements.
do {
//  get the user guess
   guess = getGuess();
// if shouldStop returns true you would stop, if it returns false you should continue, thus the !..
}  while (!shouldStop(guess)) {
   // decrement the guesses.
   --remainingGuesses;
}

///  define these methods somewhere..,
// get your guess
public int getGuess() {
   System.out.println("Enter guess #1");
   return keyboard.nextInt();
}


public boolean shouldStop(int guess) {
// condensed if statement syntax in java, very handy for this kind of thing
    // do we have enough remaining guess to keep going?  If so, compare the guess to the actual number
   // otherwise return true (the stop signal
   return remainingGuesses > 0 ? guess == actualNumber : true;
}

Если вы действительно хотите выполнить весь процесс, вы также можете разбить фактическое число догадки == на метод, но в этом случае его, вероятно, не нужно, поскольку это простая проверка на равенство.

Методы shouldStop можно определить несколько способов, однако...

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

public boolean shouldStop(int guess) {
  if(remainingGuesses <=0) {
     return true;
  }  else if(guess == actualNumber) {
     return true;
  }  else {
     return false;
}

}

Другие вопросы по тегам