java – Como repetir un bloque de try and catch

tengo una duda sobre como repetir cuantas veces se nesecita un codigo, hasta que el usuario agregue por completo los datos que son correctos. Les presento mi codigo para que sea mas entendible.

        boolean proceder_bloque1 = false;
    do{
        try{
            int cant_iniciales = scan.nextInt();
            int contador_programas_iniciales = 0; //para saber cuantos programas se han ingresado, servira tambien pera ir evaluando el bucle
            int posicion_programa_inicial = 0;//sirve para las posiciones en que se agregan los objetos, va aumentando en cada iteracion
            Memoria programas_iniciales() = new Memoria(cant_iniciales);//arreglo de tipo memoria que tiene como longitud la cantidad de programas iniciales    
            //se creara un bucle hasta que se cumpla la cantidad de programas iniciales a ejecutar
            do{
                //Usuario ingresa nombre
                System.out.println("Sin espacios por favor escriba el nombre del programa");
                String nombre_programa_inicial = scan.next();
                memoria.setNombrePrograma(nombre_programa_inicial);
                //Usuario ingresa el tiempo de ejecucion
                System.out.println("Ingrese tiempo de ejecucion que tendra el programa");
                int tiempo_ejecucion_programa_inicial = scan.nextInt();
                memoria.setTiempoEjecucion(tiempo_ejecucion_programa_inicial);
                //El usuario ingresara memoria que ocupa el programa inicial
                System.out.println("Ingrese memoria que ocupa el programa que desea ejecutar");
                int memoria_programa_inicial = scan.nextInt();
                memoria.setEspacio(memoria_programa_inicial);

                //se crea el arreglo de objeto memoria y se guarda la informacion dada por el usuario
                programas_iniciales(posicion_programa_inicial) = new Memoria(memoria.getNombrePrograma(),memoria.getEspacio(),memoria.getTiempoEjecucion());
                
                //en cada bucle se aumenta la posicion y el contador, para que el bucle no sea infinito y la posicion donde se agreguen los datos, no sean los mismos
                posicion_programa_inicial ++;
                contador_programas_iniciales ++;
            
            }while(contador_programas_iniciales < cant_iniciales);
            proceder_bloque1 = true;

        }catch(InputMismatchException e){
            System.out.println("No ha ingresado un dato valido, por favor vuelva a intentar, por favor revise y vuelva a intentar");
        }
    }while(proceder_bloque1 == false);

Lo que quiero hacer es de que haya una condicion de verificacion. Luego de eso que el programa verifique que el usuario este ingresando todos los datos correspondientes. Si el usuario agrega la informacion correspondiente con los datos correspondientes, entonces el programa sigue como si nada.

Pero si el usuario por ejemplo agrega una “p” donde debe ir un valor, quiero que el codigo que esta en try se repita hasta que el usuario deje de agregar letras donde van numeros y asi…pero no estoy seguro de como hacer el bucle, lo que he hecho hasta ahora solo me imprime infinitas veces que el dato no es valido. Cosa que nesecito solo una vez y que luego vuelva a intentar el codigo…me podrian ayudar?