设计一个求 n! 的方法,结果为一个长整数。编写一个程序从键盘输入一个数给整数 K 赋值,
然后调用求 n! 的方法求 K!,在程序中规划处理如下异常情况:
1、 输入的数不是一个整数,而是实数,则不计算。
2、 输入的数据是一个十六进制表示形式的串,则转换为十进制数,再进行计算。
import java.util.Scanner;public class test9_1 {public static long fun(int n) {//求值函数,结果为一个长整数if (n == 0)return 1;elsereturn n * fun(n - 1);//递归法}public static void main(String[] args) {Scanner IN = new Scanner(System.in);while(true){String K = IN.next();//因为输入是任意情况,所以用字符串try {try {int n = Integer.parseInt(K, 10);//parseInt(String s,int radix)就是求“int radix”进制数“String s”的十进制数是多少。System.out.println(fun(n));} catch (Exception e) {int n = Integer.parseInt(K, 16);//求16进制字符串的10进制数System.out.println(fun(n));}} catch (NumberFormatException e) {e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因System.out.println("输入错误");}}}}
从键盘输入一个十六进制数,将其转化为十进制数输出。
如果输入的不是一个有效的十六进制数则抛出异常。
import java.util.*;public class test9_2 {public static void main(String[] args) {System.out.println("请输入一个十六进制数:");Scanner In = new Scanner(System.in);while(true){String x = In.next();try {int n = Integer.parseInt(x, 16);//如果x不是十六进制数则会发生异常System.out.println(n);} catch (Exception e) {e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因System.out.println(x + "不是一个有效的十六进制数");}System.out.println("结束");}}}
编写一个方法将格式为“yyyy/mm/dd”的字符串转换为日期类型,如果日期数据非法,则抛出异常。
对正常和异常输入的日期字符串分别进行验证,并输出转换后的日期对象
import java.util.*;public class test9_3 {int year;int month;int days;int[] monthdays = new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};public void Fun1(int year, int month, int day) {if(year > 0 && year < 10000) //年份在1-9999this.year = year;if(month > 0 && month < 13) //月份在1-12this.month = month;if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0) //闰年则monthdays[2]=29this.monthdays[2]=29;if(day > 0 && day <= monthdays[month])this.days=day;}public boolean Fun2(int year, int month, int day){if (this.year == year && this.month == month && this.days == day)return true;elsereturn false;}public static void main(String[] args) {Scanner In = new Scanner(System.in);while(true){String s = In.next(); //输入日期 格式为yyyy/mm/ddString[] a = s.split("/"); // 以/为分隔符int y = Integer.parseInt(a[0]); //转换为int型int m = Integer.parseInt(a[1]);int d = Integer.parseInt(a[2]);test9_3 Temp=new test9_3();Temp.Fun1(y,m,d);if (Temp.Fun2(y,m,d))System.out.println(y+"-"+m+"-"+d);elsethrow new InputMismatchException("格式错误");}}}
