Estou tendo problemas para criar um Loop com um Try-Catch dentro

No código abaixo eu estou tentando fazer com que enquanto o usuário não colocar um número, repetir a acão dentro do While, mas pelo visto, acabou gerando um Loop Infinito e eu não estou conseguindo contornar isso…

[ Código ]

//Início

import java.util.InputMismatchException;
import java.util.Scanner;

public class RefactorException {
public static void main(String[] args) {

	Scanner teclado = new Scanner(System.in);
	boolean flag = false;
	
	try {
	System.out.println("Eu sei dividir!");
	System.out.println("Informe o primeiro valor: ");
	int x = teclado.nextInt();
	
	System.out.println("Informe o segundo valor: ");
	int y = teclado.nextInt();
	double z = ( x/y );
	System.out.println("O resultado da soma é " + z);
	}
	
	catch (ArithmeticException erroDivisãoPorZero) {
		System.out.println("Erro: divisão por zero!");
	}
	
	catch(NumberFormatException erro){  
        System.out.println("Insira apenas números." + "\nErro!");  
    } 
	
	catch (InputMismatchException erroString){
		System.out.println("Operação inválida!"
				+ "\nDivisão por caractere inválido.");
	}
	
	while(!flag) {
		try {
			System.out.println("Eu sei dividir!");
			System.out.println("Informe o primeiro valor: ");
			int x = teclado.nextInt();
			
			System.out.println("Informe o segundo valor: ");
			int y = teclado.nextInt();
			double z = ( x/y );
			System.out.println("O resultado da soma é " + z);
			
			flag = true;
		}
		
		catch(InputMismatchException erro) {
			flag = false;
			System.out.println("\n---------Erro!---------"
					+ "\n---Insira um número!---");
			
		} 
	}
	

}

}

Se você quer lançar uma exceção, precisa definir em que momento isso ocorrerá. Em geral, você valida o campo que deseja e lança a exceção.

Mas tá dando um loop, eu lancei, e roda e tal, mas tá infinito, e eu preciso que, fique infinito, até o usuário colocar uma entrada de dados válida… Tendeu agora?

Faz o seguinte…
primeiro troca o !flag por flag == false…as vezes funciona… se não funcionar
coloca o valor nos dois, como se estivesse de acordo.
Coloca um breakpoint pra debugar na linha do while.
O que vem no flag? sabe fazer isso?

Nessa parte do código aqui

while(!flag) {
		try {
			System.out.println("Eu sei dividir!");
			System.out.println("Informe o primeiro valor: ");
			int x = teclado.nextInt();
			
			System.out.println("Informe o segundo valor: ");
			int y = teclado.nextInt();
			double z = ( x/y );
			System.out.println("O resultado da soma é " + z);
			
			flag = true;
		}
		
		catch(InputMismatchException erro) {
			flag = false;
			System.out.println("\n---------Erro!---------"
					+ "\n---Insira um número!---");
			
		} 
	}

Se eu fosse você, iria do mais básico possível, pois da para vê que é algo para aprender.
não precisa colocar um try catch ai.

//tira o !
while(flag) {

			System.out.println("Eu sei dividir!");
			System.out.println("Informe o primeiro valor: ");
			int x = teclado.nextInt();
			
			System.out.println("Informe o segundo valor: ");
			int y = teclado.nextInt();
			double z = ( x/y );
			System.out.println("O resultado da soma é " + z);

                        //pergunte se quer continuar
                       System.out.println(""Deseja continuar s apra sim e n para não");
                       String opcao = in.NextLine();

                       //verifique se quer continuar                      
                       if(!opcao.equals("s"))
			    flag = false;		
		}		
	}

Então, é… Essa parte é um pedaço de uma questão de exercício mas é sobre “Try-Catch”, aí por isso o uso dele, por que a gente tava tentando capturar as possíveis exceções que poderiam ocorrer sobre um programa de cálculo ou qualquer outra coisa envolvida com entrada de dados…