Помещение двух логических контроллеров в выражение 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;
}
}