Não sei qual autor você leu, mas posso te dizer que uma melhor abordagem seria colocar o try/catch fora do laço de repetição, apenas pela questão de desempenho.
Eu sempre tenho um pé atrás com a palavra “elegante” pois acho isso bem subjetivo.
Mas analisando seu código, nós podemos identificar que tem duas coisas acontecendo nele:
Você recebe um número que o usuário digita e divide por 0 (aliás, isso sempre vai dar erro, mas enfim…)
Você tem um mecanismo para ficar tentando múltiplas vezes até o usuário acertar (nesse caso impossível)
Podemos dizer que a primeira parte é sua lógica de negócio e a segunda parte é uma estrutura de controle.
No java 8, você pode passar funçoes como argumentos e usar lambdas. Isso te permite criar estruturas de controles que nao existem prontas na linguagem.
Uma soluçao nesse caso, seria criar um método para cuidar da parte de repetiçao em caso de falha, enquanto deixa sua lógica de negócio intacta, sem flags como continueLoop poluindo seu código.
Algo assim:
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(System.in);
continueTentando(() -> {
System.out.print("Entre com o numero: ");
int num1 = input.nextInt();
System.out.println((1 / num1));
});
}