Estou tentando fazer um pequeno programa que dado um número o programa calcule a tabuada desse número até que seja digitado o zero. Fiz um tratamento para não aceitar letras, apenas números, mas quando digito uma letra ele mostra a msg de erro e termina o programa ou então entra num loop infinito (depende das pequenas modificações que faço). Quero que ele continue a rodar dando a chance do usuário digitar um outro valor que esteja de acordo com o estabelecido. Pesquisei um monte e ainda não encontrei a solução. Muito obrigado. 
import java.util.*;
public class Tabuada{
public static void main(String argumento[]){
int num = 0;
Scanner leitura = new Scanner(System.in);
do{
System.out.print("\n Entre com um numero: ");
try{
num = leitura.nextInt();
if (num < 0 || num > 10){
System.out.println("\n\n\n Digite um numero valido!");
}else if(num != 0){
System.out.print("\n");
for(int x = 1; x <= 10; x ++){
System.out.println(" " + num + " x " + x + " = " + num * x);
}
}
}catch(InputMismatchException e){
System.err.println(" Digite somente numeros!");
}
}while(num != 0);
}
}
Resolver não seria bem o nome, pois eu contornei o problema trocando o exception InputMismatchException pela exception NumberFormatException. Também tive que trocar a forma de leitura de nextInt() para nextLine() fazendo o cast com Integer.parseInt(leitura.nextLine()). Segue o novo código que está funcionando.
import java.util.*;
public class Tabuada {
public static void main(String argumento[]) {
int num = 0;
Scanner leitura = new Scanner(System.in);
do {
System.out.print("\n Entre com um numero: ");
try {
num = Integer.parseInt(leitura.nextLine());
if (num < 0 || num > 10) {
System.out.println("\n\n\n Digite um numero valido!");
} else if (num != 0) {
System.out.print("\n");
for (int x = 1; x <= 10; x++) {
System.out.println(" " + num + " x " + x + " = " + num * x);
}
}
} catch (NumberFormatException e) {
System.out.println("\n\n\n A T E N C A O\n\n Digite somente numeros!");
}
} while (num != 0);
}
}
Mais uma maneira com a exceção InputMismatchException sem problemas com os tipos int e String
import java.util.*;
public class Tabuada {
public static void main(String argumento[]) {
int num = 0;
Scanner leitura = new Scanner(System.in);
do {
System.out.print("\n Entre com um numero: ");
try {
num = leitura.nextInt();
if (num < 0 || num > 10) {
System.out.println("\n\n\n Digite um numero valido!");
} else if (num != 0) {
System.out.print("\n");
for (int x = 1; x <= 10; x++) {
System.out.println(" " + num + " x " + x + " = " + num * x);
}
}
}catch(InputMismatchException e){
System.out.println("\n\n\n A T E N C A O\n\n Digite somente numeros!");
leitura.nextLine();
}
} while (num != 0);
}
}
O único problema com as duas soluções apresentadas é que se a primeira coisa digitada for uma letra o programa pára, se a primeira coisa digitada for um número aí tudo funciona como deveria. Ou seja depois de digitar um número pode inserir quantas letras quiser que tudo funciona bem, tratando os erros corretamente.