пользовательский ввод проверяет только int

Я пытаюсь, чтобы мой пользовательский ввод не приводил к сбою моей программы, ограничивая то, что пользователь может вводить, например:

only being an int being between 1-30

Код, который я написал, работает только до определенного момента. Если вы введете что-то, что не является int, оно проверит это и попросит вас войти снова. Опять же, если вы продолжаете печатать что-либо, кроме int. У меня есть другой цикл while, если он вводит тип int, и если он выходит за пределы зоны 1-30, тогда он попросит пользователя ввести снова. Однако после этого, если пользователь вводит другое "что-нибудь, кроме int" программа вылетит. Я пытался объединить обаsc.hasnextint() и проверка ввода между 1-30 условием, но если я положуsc.nextint() передsc.hasnextint() и пользователь вводит что угодно, кроме int, программа вылетает. Если я поставлю его после цикла condtion, то пользовательский ввод не будет объявлен.

int choose;
System.out.print("type an integer: ");
Scanner sc=new Scanner(System.in);

while (!sc.hasNextInt() ) { 
    System.out.println("only integers!: "); 
    sc.next(); // discard 
} 

choose=sc.nextInt();

while (choose<=0 || choose>30)
{
    System.out.print("no, 1-30: ");
    choose=sc.nextInt();
}
sc.close();