Tratamento de Erros (Try Catch)

Estou com uma dúvida no código abaixo, fiz o tratamento quando o usuário digita uma letra, até ai tudo bem…mais quando o usuário digita uma letra e depois uma delete ele da outro erro, ai eu tratei ele tb, só que quando o usuário digita uma letra e depois o delete ele da erro no idade = Integer.parseInt(letra);
se eu tratar esse tb, ele vai dar erro no outro pois eu preciso que o usúario digite um número para a idade…como resolver esse problema?

package erro;

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

public class Principal {

public static void main(String[] args) {
	
	Scanner sc = new Scanner(System.in);
	int idade = 0;
	try {
	System.out.println("Digite sua idade");
	idade = sc.nextInt();
	} catch (InputMismatchException e) {
		System.out.println("Você digitou uma letra!");
		System.out.println("Digite sua idade novmente!");
		String letra = sc.nextLine();
		while(!letra.substring(0).matches("[1-9]*")) {
			System.out.println("Digite só números!");
			letra = sc.nextLine();
		}
		idade = Integer.parseInt(letra);
	} catch (NumberFormatException e) {
		System.out.println("Você digitou uma letra!");
		System.out.println("Digite sua idade novmente!");
		String letra = sc.nextLine();
		while(!letra.substring(0).matches("[1-9]*")) {
			System.out.println("Digite só números!");
			letra = sc.nextLine();
		}
		idade = Integer.parseInt(letra);
	}
	
	
	System.out.println("Sua idade é: " + idade);

}

}

public class ExemploIdade {

	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		
		int idade = preencherIdade(sc);
		System.out.println("Sua idade é: " + idade);
		
		sc.close();
	}
	
	private static int preencherIdade(Scanner scanner) {
		try {
			System.out.print("Digite sua idade: ");
			return Integer.parseInt(scanner.next());
		} catch (NumberFormatException ex) {
			System.out.print("A idade informada não é válida. ");
			return preencherIdade(scanner);
		}
	}
}
1 curtida

@Lucas_Camara obrigado pela sua ajuda, para tratar os erros que o usuário digita, essa é a única forma? poderia me explicar?

Vai depender da forma como vc quer que o sistema se comporte. Nesse exemplo que fiz, o sistema vai ficar perguntando a idade até que o usuário informe um valor válido, infinitamente. Mas se fosse o caso de perguntar apenas uma vez, ficaria assim:

public class Main {

	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);
		
		try {
			System.out.print("Digite sua idade: ");
			int idade = Integer.parseInt(scanner.next());
			System.out.println("Sua idade é: " + idade);
		} catch (NumberFormatException ex) {
			System.out.print("A idade informada não é válida.");
		}
		
		scanner.close();
	}
}

Veja:

public class Main {

	public static void main(String[] args) {
		Teclado teclado = new Teclado();
		
		System.out.print("Digite um código: ");
		int op = teclado.lerNumero();
		
		do {
			switch (op) {
			case 1:
				System.out.print("Digite outro código: ");
				op = teclado.lerNumero();
				break;
				
			case 2:
				System.out.println("Opção 2");
				op = 0;
				break;
			}
		} while (op != 0);
	}
}
import java.util.Scanner;

public class Teclado {
	
	Scanner sc = new Scanner(System.in);

	public int lerNumero() {
		int op = preencher(sc);
		return op;
	}

	private int preencher(Scanner sc2) {
		try {
			return Integer.parseInt(sc2.next());
		} catch (NumberFormatException e) {
			System.out.println("Só números");
			return preencher(sc2);
		}
	}
}