Kod koji si napisao bi trebalo to i da radi. Šta je tačno problem? Ako hoćeš da imaš različite poruke u zavnsnosti od tipa greške, onda umesto catch(Exception e) {...} moraš ubaciti nekoliko uzastopnih catch blokova od kojih svaki hvata određeni tip greške. Otprilike ovako:
try { ... }
catch(InputMismatchException e) {...} //za unet string
catch(IllegalArgumentException e) {...} //za deljenje nulom