kontrola wejścia użytkownika tylko int

Staram się, aby moje dane wejściowe użytkownika nie załamały mojego programu, ograniczając to, co użytkownik może wprowadzić, takie jak:

tylko bycie intbędąc pomiędzy 1-30

Kod, który napisałem, działa tylko do pewnego momentu. Jeśli wpiszesz coś, co nie jest int, sprawdzi to i poprosi o ponowne wpisanie. Potem znowu, jeśli nadal będziesz pisał cokolwiek poza int. Mam kolejną pętlę while, jeśli wpisuje int, i jeśli jest poza strefą 1-30, poprosi użytkownika o ponowne wprowadzenie. Jednak po tym, jeśli użytkownik wpisze inny „cokolwiek oprócz int”, program ulegnie awarii. Próbowałem połączyć obasc.hasnextint() i sprawdzenie wejścia między stanem 1-30, ale jeśli umieściłemsc.nextint() przedsc.hasnextint() a użytkownik wprowadza cokolwiek poza int, program ulega awarii. Jeśli umieściłem go po pętli condtion, to wejście użytkownika nie zostanie zadeklarowane.

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