entrada de usuário check int only

Estou tentando fazer com que a entrada do meu usuário não trava o meu programa restringindo o que o usuário pode inserir, como:

sendo apenas um intestar entre 1-30

O código que escrevi funciona apenas até certo ponto. Se você digitar algo que não seja um int, ele irá verificar e pedir para você entrar novamente. Então, novamente, se você continuar digitando qualquer coisa, mas um int. Eu tenho outro loop while se ele digitar um int, e se ele estiver fora da zona 1-30, ele pedirá ao usuário para entrar novamente. No entanto, depois disso, se o usuário digitar outro "nada, mas um int", o programa irá falhar. Eu tentei combinar tanto osc.hasnextint() e a verificação de entrada entre 1-30 condição, mas se eu colocar osc.nextint() antes de osc.hasnextint() e o usuário insere qualquer coisa, menos um int, o programa trava. Se eu colocá-lo após o loop de condição, a entrada do usuário não será declarada.

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();

questionAnswers(4)

yourAnswerToTheQuestion