设计一个求 n! 的方法,结果为一个长整数。编写一个程序从键盘输入一个数给整数 K 赋值,
    然后调用求 n! 的方法求 K!,在程序中规划处理如下异常情况:
    1、 输入的数不是一个整数,而是实数,则不计算。
    2、 输入的数据是一个十六进制表示形式的串,则转换为十进制数,再进行计算。

    1. import java.util.Scanner;
    2. public class test9_1 {
    3. public static long fun(int n) {//求值函数,结果为一个长整数
    4. if (n == 0)
    5. return 1;
    6. else
    7. return n * fun(n - 1);//递归法
    8. }
    9. public static void main(String[] args) {
    10. Scanner IN = new Scanner(System.in);
    11. while(true){
    12. String K = IN.next();//因为输入是任意情况,所以用字符串
    13. try {
    14. try {
    15. int n = Integer.parseInt(K, 10);
    16. //parseInt(String s,int radix)就是求“int radix”进制数“String s”的十进制数是多少。
    17. System.out.println(fun(n));
    18. } catch (Exception e) {
    19. int n = Integer.parseInt(K, 16);//求16进制字符串的10进制数
    20. System.out.println(fun(n));
    21. }
    22. } catch (NumberFormatException e) {
    23. e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
    24. System.out.println("输入错误");
    25. }
    26. }
    27. }
    28. }

    从键盘输入一个十六进制数,将其转化为十进制数输出。
    如果输入的不是一个有效的十六进制数则抛出异常。

    1. import java.util.*;
    2. public class test9_2 {
    3. public static void main(String[] args) {
    4. System.out.println("请输入一个十六进制数:");
    5. Scanner In = new Scanner(System.in);
    6. while(true){
    7. String x = In.next();
    8. try {
    9. int n = Integer.parseInt(x, 16);//如果x不是十六进制数则会发生异常
    10. System.out.println(n);
    11. } catch (Exception e) {
    12. e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
    13. System.out.println(x + "不是一个有效的十六进制数");
    14. }
    15. System.out.println("结束");
    16. }
    17. }
    18. }

    编写一个方法将格式为“yyyy/mm/dd”的字符串转换为日期类型,如果日期数据非法,则抛出异常。
    对正常和异常输入的日期字符串分别进行验证,并输出转换后的日期对象

    1. import java.util.*;
    2. public class test9_3 {
    3. int year;
    4. int month;
    5. int days;
    6. int[] monthdays = new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
    7. public void Fun1(int year, int month, int day) {
    8. if(year > 0 && year < 10000) //年份在1-9999
    9. this.year = year;
    10. if(month > 0 && month < 13) //月份在1-12
    11. this.month = month;
    12. if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0) //闰年则monthdays[2]=29
    13. this.monthdays[2]=29;
    14. if(day > 0 && day <= monthdays[month])
    15. this.days=day;
    16. }
    17. public boolean Fun2(int year, int month, int day){
    18. if (this.year == year && this.month == month && this.days == day)
    19. return true;
    20. else
    21. return false;
    22. }
    23. public static void main(String[] args) {
    24. Scanner In = new Scanner(System.in);
    25. while(true){
    26. String s = In.next(); //输入日期 格式为yyyy/mm/dd
    27. String[] a = s.split("/"); // 以/为分隔符
    28. int y = Integer.parseInt(a[0]); //转换为int型
    29. int m = Integer.parseInt(a[1]);
    30. int d = Integer.parseInt(a[2]);
    31. test9_3 Temp=new test9_3();
    32. Temp.Fun1(y,m,d);
    33. if (Temp.Fun2(y,m,d))
    34. System.out.println(y+"-"+m+"-"+d);
    35. else
    36. throw new InputMismatchException("格式错误");
    37. }
    38. }
    39. }