java程序设计 实验三、异常处理程序设计

实验目的了解Java中异常处理(exception)的作用及常用的异常类,掌握异常处理的设计方法。

实验内容:

*1、用try-catch-finally结构实现异常处理。编译并运行程序,写出程序运行结果。

package cn.qi.text31;
public class ExceptionTest {
    public static void main(String[] args) {
        int i=0;
        String greeting[]={"Hello","Only","Test"};
        while(i<4){
            try{
                System.out.println(greeting[i]);
            }catch(ArrayIndexOutOfBoundsException e){
                System.out.println("数组越界");
            }finally {
                System.out.println("总会运行");
            }
            i++;
        }
    }
}

运行结果:

2、设计一个Java程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”,则抛出一个异常信息“This is a XYZ”,如果从命令行输入ABC,则没有抛出异常。(只有XYZ和ABC两种输入)。

Main类:

package cn.qi.text32;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) throws MyException{
        String s;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入");
        s = scanner.next();
        if(s.equals("XYZ"))
            throw new MyException();
        System.out.println("输入正常");
    }
}

MyException类:

package cn.qi.text32;
public class MyException extends Exception{
    public String toString(){
        return "This is a XYZ";
    }
}

运行结果:

3、声明一个Average接口,继续完善学生信息录入程序,其中约定求平均值的方法;声明多个类实现Average接口,分别给出求平均值的方法实现。例如,在一组数值中,一种算法是,全部数值相加后求平均值,另一种算法是,去掉一个最高分和一个最低分后,再将总分求平均等;使用键盘输入数据时,对于不能转换成数值的字符串进行异常处理。

Main类:

package cn.qi.text33;

import cn.qi.text33.Student;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Student[] students = new Student[10];
        System.out.println("请输入10位学生的姓名、年龄、出生年月日、java课程实验成绩(年月日以空格分开)");
        int[] age = new int[10];
        double[] score = new double[10];
        double sumage = 0;
        double sumscore = 0.0;
        Scanner scanner = new Scanner(System.in);
        for(int i=0;i<10;i++){
            students[i] = new Student();
            try{
                students[i].setName(scanner.next());
                age[i] = scanner.nextInt();
                students[i].setAge(age[i]);
                students[i].setYear(scanner.nextInt());
                students[i].setMonth(scanner.nextInt());
                students[i].setDay(scanner.nextInt());
                score[i] = scanner.nextDouble();
                students[i].setScroe(score[i]);
                }catch (Exception e){
                    throw new MyException();     
        }
            while(!MyDate.judgeOfMonth(students[i].getYear(), students[i].getMonth(), students[i].getDay())){
                students[i].setYear(scanner.nextInt());
                students[i].setMonth(scanner.nextInt());
                students[i].setDay(scanner.nextInt());
            }
            sumage += age[i];
            sumscore += score[i];
        }
        Average1 average1 = new Average1();//求和求平均
        Average2 average2 = new Average2();//去最值求平均
        System.out.println("平均年龄: " + average1.average(age));
        System.out.println("平均成绩: " + average1.average(score));
        System.out.println("去掉最大值和最小值后的平均年龄: " + average2.average(age));
        System.out.println("去掉最大值和最小值后的平均成绩: " + average2.average(score));
    }
}

Studen类:

package cn.qi.text33;
public class Student {
    private String name;
    private int age;
    private  double scroe;
    private  int year;
    private  int month;
    private  int day;
    public Student(){
    }
    public Student(String name, int age, double scroe, int year, int month, int day) {
        this.name = name;
        this.age = age;
        this.scroe = scroe;
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public double getScroe() {
        return scroe;
    }
    public void setScroe(double scroe) {
        this.scroe = scroe;
    }
    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }
    public int getMonth() {
        return month;
    }
    public void setMonth(int month) {
        this.month = month;
    }
    public int getDay() {
        return day;
    }
    public void setDay(int day) {
        this.day = day;
    }
}

MyDate类:

package cn.qi.text33;
public class MyDate{
    public static int isLeapYear(int year){
        if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            return 1;
        }
        else{
            return 0;
        }
    }
    public static boolean judgeOfDay1(int month,int day,boolean isTrue){
        if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
            if(day < 1 || day > 31){
                System.out.printf("非法输入日期,%d月没有第%d天,请仅重新输入年月日\n",month,day);
                isTrue = false;
            }
        }
        else if(month == 4 || month == 6 || month == 9 || month == 11) {
            if(day < 1 || day > 30){
                System.out.printf("非法输入日期,%d月没有第%d天,请仅重新输入年月日\n",month,day);
                isTrue = false;
            }
        }
        return isTrue;
    }
    public static boolean judgeOfMonth(int year,int month,int day){
        boolean isTrue = true;
        if(month < 0 || month > 12) {
            System.out.printf("非法输入日期,没有第%d个月,请仅重新输入年月日\n",month);
            isTrue = false;
        }
        else {
            if(month == 2) {
                if(isLeapYear(year) == 1) {
                    if(day < 1 || day > 29) {
                        System.out.printf("非法输入日期,闰年%d月没有第%d天,请仅重新输入年月日\n", month, day);
                        isTrue = false;
                    }
                }
                else {
                    if(day < 1 || day > 28) {
                        System.out.printf("非法输入日期,非闰年%d月没有第%d天,请仅重新输入年月日\n", month, day);
                        isTrue = false;
                    }
                }
            }
            else{
                isTrue = judgeOfDay1(month,day,isTrue);
            }
        }
        return isTrue;
    }
}

Average接口:

package cn.qi.text33;
public interface Average{
    double average(int[] s);
    double average(double[] s);
}

Average1类:

package cn.qi.text33;
public class Average1 implements Average{
    //总体求和求平均
    @Override
    public double average(double[] s) {
        double sum = 0;
        for(int i=0;i<10;i++){
            sum += s[i];
        }
        return sum/10;
    }
    public double average(int[] s) {
        double sum = 0;
        for(int i=0;i<10;i++){
            sum += s[i];
        }
        return sum/10;
    }
}

Average2类:

package cn.qi.text33;
import java.util.Arrays;
import java.util.Collection;
public class Average2 implements Average{
    //去掉最大值和最小值
    public double average(double[] s) {
        double sum = 0;
        Arrays.sort(s);
        for(int i=1;i<9;i++){
            sum += s[i];
        }
        return sum/8;
    }
    public double average(int[] s) {
        double sum = 0;
        Arrays.sort(s);
        for(int i=1;i<9;i++){
            sum += s[i];
        }
        return sum/8;
    }
}

MyException类:

public class MyException extends Exception {
        public String toString(){
            return "年龄请输入整数,年月日请输入整数,成绩请输入浮点数或整数";
        }
}

运行结果:

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值