Что бы я сделал, это прочитал всю строку, используя Scanner.nextLine (). Затем создайте другой сканер, который читает возвращенную строку.
String line = reader.nextLine();
Scanner sc = new Scanner(line);
Это сделает вашу функцию семпла примерно такой:
public int readInt(String msg) {
int num = 0;
boolean loop = true;
while (loop) {
try {
System.out.println(msg);
String line = reader.nextLine();
Scanner sc = new Scanner(line);
num = sc.nextInt();
loop = false;
} catch (InputMismatchException e) {
System.out.println("Invalid value!");
}
}
return num;
}
Таким образом, у вас есть один сканер, который получает ввод, и один, который проверяет его, так что вам не нужно беспокоиться о том, что читатели будут заботиться о том, правильно ли они вводят данные.