第4章
课后习题练习
4.1 输入一个整数表示星期几,输出对应的英文单词。当输入的数据类型不匹配时(如输入的是字符串)会抛出异常,要求捕获该异常,显示提示信息“输入的数据类型不匹配”
4.2 定义二维数组储存m名学生n门功课的成绩,m和n的值及成绩都从键盘输入,然后计算每个同学的平均成绩。要求捕获以下几种异常:
(1)类型不匹配异常,如输入的是字符串等。
(2)输入的成绩不在正常范围内,如成绩>100或成绩<0
(3)计算平均成绩时,要考虑被0除的异常
3.face()方法的功能时求n!,阶乘是byte类型。当n!的值超出byte数据类型的范围时,抛出异常。在主方法中输入n的值,调用face()方法求n!的值。哟啊求风别用以下三种方式进行异常处理:
(1)fact()方法捕获异常
(2)fact()方法声明异常,主方法捕获异常
(3)fact()方法和主方法都声明异常
4.4 自定义异常类TriangleException表示三条边无法构成三角形的异常。在主方法中,输入三个整数,如果能构成三角形则求其周长和面积;如果无法构成三角形则抛出TriangleException异常,要求捕获这个异常,输出信息“输入的三条边不能构成三角形”
public class Week {
public static void main(String[] args) {
try {
int n;
String day = null;
Scanner s = new Scanner(System.in);
System.out.println("请输入想要查询的星期数:");
n = s.nextInt();
if (n == 1)
day = "Monday";
else if (n == 2)
day = "Tuesday";
else if (n == 3)
day = "Wednesday";
else if (n == 4)
day = "Thusday";
else if (n == 5)
day = "Friday";
else if (n == 6)
day = "Saturday";
else if (n == 7)
day = "Sunday";
else
throw new OutOfRangeException();
System.out.print(day);
} catch (InputMismatchException e) {
System.out.print("输入类型错误!");
} catch (OutOfRangeException e) {
System.out.print("输入数字错误!");
}
}
}
class OutOfRangeException extends Exception{
OutOfRangeException(){
super("输入类型错误");
}
}
4.2
public class Grade {
public static void main(String[] args) {
int m,n;
Double[][] g;
Scanner s = new Scanner(System.in);
System.out.print("请输入学生个数和考试科目数:");
try {
m = s.nextInt();
n = s.nextInt();
if(n == 0)
throw new ZeroException();
else {
g = new Double[m][];
for(int i = 0;i<m;i++) {
g[i] = new Double[n + 1];
g[i][n] = 0.00;
for(int j = 0;j<n;j++) {
g[i][j] = s.nextDouble();
if(g[i][j] <= 100 && g[i][j] >= 0)
g[i][n] = g[i][n] + g[i][j];
else
throw new OutOfRangeException();
}
}
for(int i = 0;i<m;i++) {
g[i][n] = g[i][n] / n;
System.out.print("\n" + "第" + (i + 1) + "个同学的平均成绩为:");
System.out.printf("%.2f",g[i][n]);
}
}
}catch(InputMismatchException e) {
System.out.print("输入类型有误!");
}catch(OutOfRangeException e) {
System.out.print("输入成绩范围有误!");
}catch(ZeroException e) {
System.out.print("无法计算平均成绩!");
}
}
}
class OutOfRangeException extends Exception{
OutOfRangeException(){
super("输入类型");
}
}
class ZeroException extends Exception{
ZeroException(){
super("0除");
}
}
4.3
public class Face {
int n;
byte sum = 1;
// 方一:
void face(int n){
try {
this.n = n;
if(n > 0) {
for(int i = 1;i <= n;i++)
sum = (byte) (sum * i);
if(sum > 0)
System.out.print("阶乘值为:" + sum);
else
throw new OutOfRangeException();
}else
throw new MismatchException();
}catch(OutOfRangeException e) {
System.out.print("超出byte范围!");
}catch(MismatchException e) {
System.out.print("输入数值有误无法计算!");
}
}
// 方二,方三的face()方法一样:
// void face(int n) throws OutOfRangeException,MismatchException{
// this.n = n;
// if(n > 0) {
// for(int i = 1;i <= n;i++)
// sum = (byte) (sum * i);
// if(sum > 0)
// System.out.print("阶乘值为:" + sum);
// else
// throw new OutOfRangeException();
// }else
// throw new MismatchException();
// }
public static void main(String[] args) {
int n;
Scanner s = new Scanner(System.in);
System.out.print("请输入n的值:");
n = s.nextInt();
Face f = new Face();
f.face(n);
}
// 方二:
// public static void main(String[] args) {
// int n;
// Scanner s = new Scanner(System.in);
// System.out.print("请输入n的值:");
// n = s.nextInt();
// Face f = new Face();
// try {
// f.face(n);
// } catch (OutOfRangeException e) {
// e.printStackTrace();
// } catch (MismatchException e) {
// e.printStackTrace();
// }
// }
// 方三:
// public static void main(String[] args) throws OutOfRangeException, MismatchException {
// int n;
// Scanner s = new Scanner(System.in);
// System.out.print("请输入n的值:");
// n = s.nextInt();
// Face f = new Face();
// f.face(n);
// }
}
class OutOfRangeException extends Exception{
OutOfRangeException(){
}
}
class MismatchException extends Exception{
MismatchException(){
}
}
4.4
public class Triangle {
public static void main(String[] args) {
int a,b,c;
double l,s;
Scanner sc = new Scanner(System.in);
System.out.println("请输入三边的长度:");
a = sc.nextInt();
b = sc.nextInt();
c = sc.nextInt();
try {
if((a + b)> c && (a + c)>b && (b + c)>a) {
l = a + b + c;
s = Math.sqrt((l/2 * (l/2 - a) * (l/2 - b) * (l/2 - c)));
System.out.print("该三角形的周长为:" + l + "\n面积为:" );
System.out.printf("%.2f",s);
}
else
throw new TriangleException();
}catch(TriangleException e) {
System.out.print("输入的三条边不能构成三角形");
}
}
}
class TriangleException extends Exception{
TriangleException(){
super("无法构成三角形");
}
}