После того, как Сканер выдает исключение, существующее значение остается "неиспользованным". Чтобы избежать этого, вам нужно добавить строку s c .next (), чтобы использовать существующий ввод и заставить Scanner ожидать следующего значения от пользователя.
do {
try {
a = sc.nextInt();
} catch (InputMismatchExpression e) {
sc.next(); // this "consumes" the invalid input and throws away
System.out.println("This is not integer");
}
} while(a < 1 || a > 10);