Я работаю над карточной игрой с 1-4 игроками. Когда я начну новую игру, он создаст экземпляр класса DialogCreator
, который попросит вас ввести количество игроков, которое вы хотите. Вот код для DialogCreator:Приложение Java Swing, проверка диалогового окна для номера в диапазоне
private class DialogCreator {
/**
* Creates a dialog for the input of how many players you want in the game.
* Takes an integer between 1 and 4.
* @param msg
* @return
*/
int createIntDialog(String msg) {
String inValue = null;
String error_msg = "";
int v = 0;
while ((inValue = JOptionPane
.showInputDialog(msg + error_msg + ":")) != null) {
error_msg = "";
int inVal = Integer.parseInt(inValue);
try {
if(inVal >= 1 && inVal <= 4)
v = inVal;
break;
} catch (NumberFormatException nfe) {
error_msg = "(Entered values can only be integers between 1 and 4)";
}
}
return v;
}
}
Я думал, что этот код будет пытаться установить v = inVal
только если 1 <= inVal
>= 4
и если inVal
является < 1 или> 4 она будет идти, чтобы поймать и дать мне сообщение об ошибке. Это не работает, и я получаю IndexOutOfBoundsException
, если я ввожу число, которое не находится между 1 и 4. Он отлично работает, чтобы проверить, вводя ли я String
, который не может быть проанализирован до int
. Может ли кто-нибудь сказать мне, что я здесь делаю неправильно?
Сообщение об ошибке изменяется только в том случае, если вы не вводите целое число, а не если 'inVal' равно <1 or > 4. Вам нужно добавить блок else после' if (inVal> = 1 && inVal <= 4) ' блок для этого. Кроме того, 'int inVal = Integer.parseInt (inValue);' должен находиться внутри блока try, иначе блок catch не будет иметь эффекта. Я не знаю, почему вы получаете «IndexOutOfBoundsException», после изменения кода немного все работает для меня. –
Есть ли особая причина для использования обработки исключений в качестве управления потоком? На самом деле это не хороший стиль. Я бы проверил ввод с некоторым регулярным выражением, по крайней мере, сделав «TryParse» вместо того, чтобы сделать бросок, что приводит к исключению в блоке catch. – Kai
Это единственный метод, с которым я знаком, и я спешу завершить этот проект. Вот почему я не искал лучших способов обработки исключений. Спасибо, что указали на это. Я буду исследовать другие методы для будущих проектов. –