Бьюсь об заклад, вы чувствуете, как будто вы так близко, что вы можете попробовать это ... и вы. Что нужно учитывать:
Давайте начнем с приглашения "Enter height using feet space inches (e.g., 5 6.25): "
. Лично я не твердо верю в состояние while (true) {
. Конечно, его можно использовать, но люди привыкли использовать его все время, и наступит время, когда практика укусят и вызовет головную боль. Так как в любом случае вам необходимо соответствовать определенным ограничениям со всеми входными данными, не мешало бы использовать логический флаг, тогда как, если все входные данные прошли ограничения, выход из цикла while , например:
boolean pass = false;
while (!pass) {
/* .... Your Prompt Code .... */
}
pass = false;
while (!pass) {
/* .... Your Other Prompt Code .... */
}
Для переменной heightFeet :
Очевидно, что если для точки маркера, в которой должны быть указаны ноги, указано что-либо, кроме значения Integer, то (1011 * NumberFormatException будет выброшено и перехвачено (this) будет включать числовое значение, которое содержит десятичную точку). Ваше сообщение для консоли отображается с указанием как таковой, и пользователь может повторить попытку, это хорошо. Но если область токена содержит значение меньше 4
или значение больше 7
, переменная заполняется этим значением и heightIn Переменная работает на следующем. Пока все хорошо , но имейте в виду, что вам не нужны значения меньше 4 или больше 7.
Для переменной heightIn :
Если следующая точка токена (второе предоставленное значение после предоставленного пробела) является чем-то отличным от целочисленного или двойного числового значения, то снова, NumberFormatException будет брошено и перехвачено, и снова ваше сообщение на консоль отображается с указанием как таковой, и пользователь может попробовать еще раз, это тоже хорошо. Но если эта область токена содержит числовое значение, которое меньше 0.0 (или 0) или больше 11.99, тогда да .... это значение будет добавлено к heightIn переменная. Это тоже хорошо, но сейчас самое время применить желаемые ограничения, прежде чем двигаться дальше. Вы хотите проверить значения, содержащиеся в переменных heightFeet и heightIn , чтобы убедиться, что они удовлетворяют необходимым критериям до выхода из while
петля.
Здесь вы можете использовать один или несколько операторов if , чтобы проверить состояние каждой переменной и убедиться, что они соответствуют ограничениям.
/* Is feet greater than 3 and less than 8 (4 to 7) and
is inches 0 or greater and less than 12 */
If (heightFeet > 3 && heightFeet < 8 && heightIn >= 0.0d && heightIn <= 11.9375d) {
// All is Good!
pass = true; // set to true so as to exit the while loop.
}
else {
// Hmmm....something's not right.
System.out.println("The height supplied (" + hightFeet + " " +
heightIn + ") is invalid! Try again:");
}
Конечно, вы бы избавились от оператора break;
, он больше не нужен.
Зачем использовать <= 11.9375d
как часть условия переменной heightIn ? Длина фута составляет 12 дюймов, поэтому все, что больше 11-15 / 16 дюймов, можно считать 1 футом. Имейте в виду, я не думаю, что кто-то измеряет человека с точностью до 16 дюймов, но на всякий случай. Конечно, это можно уменьшить еще больше, например, до 11,75 (11 и 3 дюйма на дюйм).
Теперь приглашение "Enter weight in pounds: "
:
Попробуйте использовать ту же концепцию, что и в предыдущем приглашении:)