设计一个求 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;
else
return 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-9999
this.year = year;
if(month > 0 && month < 13) //月份在1-12
this.month = month;
if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0) //闰年则monthdays[2]=29
this.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;
else
return false;
}
public static void main(String[] args) {
Scanner In = new Scanner(System.in);
while(true){
String s = In.next(); //输入日期 格式为yyyy/mm/dd
String[] 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);
else
throw new InputMismatchException("格式错误");
}
}
}