Я делаю проект кодирования для базовой нерекурсивной, не GUI-формы Minesweeper. Одним из требований является то, что входные команды должны быть строго отформатирован следующим образом:Как проверить форматированный вход?
Для маркировки команд (раскрыть, догадаться, марка): [ "показать"/"г"] [INT] [Int]
Для справки и выхода: только ["help"/"h"] или ["quit"/"q"]
Любые входные данные за пределами этих ограничений должны считаться неформатированными. Мой код для показа выглядит примерно так:
case "reveal":
case "r":
roundsCompleted ++;
if(input.hasNextInt()){
par1 = input.nextInt();
}
else{
commandIn = null;
}
if(input.hasNextInt()){
par2 = input.nextInt();
correctInput = true;
}
else{
commandIn = null;
}
if(correctInput && isInBounds(par1, par2)){
reveal(par1, par2);
где все это внутри оператора коммутатора, конечно. Операторы commandIn = null предназначены для создания случая по умолчанию, который печатает «команда не распознана». Я понимаю, что часть моей проблемы здесь состоит в том, что они находятся в двух отдельных операторах if-else. Другая проблема заключается в том, что input.hasNextInt(), по-видимому, не оценивает значение false, когда после первого нет int.
Суть этой проблемы заключается в полном ограничении этих команд форматами, перечисленными выше. Может ли кто-нибудь дать мне некоторое представление об этой проблеме? Благодарю.
Или вы могли бы избежать необходимости в 'hasNextInt' от используя регулярное выражение? Что-то вроде '/^[a-z] + \ d {2} $ /'? Извиняюсь, если это неправильно, мое регулярное выражение ржавое. –