Я знаю, что было много вопросов по проверке входных данных для Java, но независимо от того, что я читаю, я просто не могу заставить это работать.Я хотел бы, чтобы пользователь вводил дату рождения как (ММ ДД ГГГГ).Я хотел проверить, что
- только введенные пользователем цифры
- они сделали правильное количество цифр и
- цифры попали в правильный диапазон.
В моей первой попытке у меня были переменные типа int, но я не мог объединить hasNextInt()
с длиной и диапазоном цифр.Затем я увидел сообщение, в котором говорится, что нужно использовать строковую переменную, а затем использовать Integer.parseInt()
.Я думал, что это будет хорошо работать, если я использую (!month.matches("0[1-9]") || !month.matches("1[0-2]")
, потому что он, кажется, удовлетворяет все мои пожелания проверки.Я попробовал это в заявлении while, но оно попало в неопределенный цикл.Затем я попытался преобразовать этот код в оператор if ... else и окружить его оператором while(false)
.Тем не менее, теперь он выдает ошибку вместо того, чтобы перейти к моему утверждению, в котором говорится исправить вашу ошибку.Вот как выглядит мой код на данный момент:
import java.util.Scanner; //use class Scanner for user input
public class BD {
private static Scanner input = new Scanner(System.in); //Create scanner
public static void main(String[] args){
//variables
String month;
int birthMonth;
String day;
int birthDay;
String year;
int birthYear;
boolean correct = false;
//prompt for info
System.out.print("Please enter your date of birth as 2 digit "+
"month, 2 digit day, & 4 digit year with spaces in-between"+
" (MM DD YYYY): ");
month = input.next();
//System.out.printf("%s%n", month); //test value is as expected
day = input.next();
year = input.next();
//validate month value
while (correct = false){
if(!month.matches("0[1-9]") || !month.matches("1[0-2]")){
System.out.println("Please enter birth month as "+
"a 2 digit number: ");
month = input.next();
//System.out.printf("%s%n", month);
}
else {
correct = true;
}
}
//turn strings into integers
birthMonth = Integer.parseInt(month);
birthDay = Integer.parseInt(day);
birthYear = Integer.parseInt(year);
//check values are correct
System.out.printf("%d%d%d", birthMonth, birthDay, birthYear);
}
}
Любая помощь будет принята с благодарностью.Я также хотел бы попытаться выполнить эту проверку без каких-либо блоков try / catch, поскольку они кажутся слишком громоздкими.Спасибо!