Java 改写程序,添加异常处理机制

import java.util.Scanner;
public class Score
{
          public static void main(String[] args)
          {
          System.out.println("请输入学生人数:");
          Scanner sn = new Scanner(System.in);
          int r = sn.nextInt();
          double[][] arrScore = new double[r][3];

          System.out.println("Number"+"\t"+"Chinese"+"\t"+"Math"+"\t"+"English"+"\t"+"Sum"+"\t"+"Average");
          for (int i = 0; i < r; i++)
          {
                double sumScore = 0;
                System.out.println("请依次输入此名同学三门科目的成绩:");
                for (int j = 0; j < 3; j++)
                {
                      arrScore[i][j]=sn.nextInt();
                      sumScore +=  arrScore[i][j];
                }
                System.out.print("学生"+(i + 1)+"\t"+ arrScore[i][0] +"\t"+ arrScore[i][1] +"\t"+ arrScore[i][2] +"\t"+ sumScore +"\t");
                System.out.println(sumScore / 3); 
          }
          System.out.print("Average"+"\t"+(arrScore[0][0]+arrScore[1][0]+arrScore[2][0]+arrScore[3][0]+arrScore[4][0])/5+"\t");
          System.out.print((arrScore[0][1]+arrScore[1][1]+arrScore[2][1]+arrScore[3][1]+arrScore[4][1])/5+"\t");
          System.out.print((arrScore[0][2]+arrScore[1][2]+arrScore[2][2]+arrScore[3][2]+arrScore[4][2])/5);
          }
}
 

改写这个程序,添加异常处理机制,使得:如果输入的学生人数不是整数或者不是正数,则进行相应的异常处理,并提示重新输入(自定义非正数异常类),如果输入的成绩不是数值类型或者范围不在0~100之间,则进行相应的异常处理,并提示重新输入(自定义成绩范围类)

求写出完整代码,非常着急!!救救孩子吧乌乌,谢谢各位了!!重谢!

亲自测试可执行,希望能够帮助到你,如果有疑问请直接私信,如果没有疑问望采纳。运行结果和代码如下:可以直接复制运行

 

package com.example.demo;

import java.util.Objects;
import java.util.Scanner;

public class Score {
    public static void main(String[] args) throws Exception {
        System.out.println("请输入学生人数:");
        Scanner sn = new Scanner(System.in);
        int r;
        while (true) {
            // 先试用String接收,判断是否输入的是整数,如果是则转为正数,如果不是直接抛出自定义的异常,提示重新输入
            String input = sn.next();
            // 通过正则表达式判断输入的值是否是正数,
            if (Objects.nonNull(input) && input.matches("^[0-9]*$")) {
                r = Integer.parseInt(input);
                break;
            } else {
                try {
                    throw new PositiveNumberException("输入的数值并不是正数");
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                    System.out.println("请【重新】输入学生人数:");
                }
            }
        }
        double[][] arrScore = new double[r][3];
        System.out.println("Number" + "\t" + "Chinese" + "\t" + "Math" + "\t" + "English" + "\t" + "Sum" + "\t" + "Average");
        for (int i = 0; i < r; i++) {
            double sumScore = 0;
            System.out.println("请依次输入此名同学三门科目的成绩:");
            for (int j = 0; j < 3; j++) {
                String next;
                double tempScore;
                while (true) {
                    // 等待输入成绩,判断是否属于数值类型
                    next = sn.next();
                    if (Objects.nonNull(next) && next.matches("^[1-9]\\d*\\.?\\d*|0\\.?\\d*[1-9]\\d*$")) {
                        tempScore = Double.parseDouble(next);
                        // 判断输入的数值范围是否在0到100之间(自定义的成绩范围类)
                        String validResult = ScoreRangeNumber.validScoreRange(tempScore);
                        if(Objects.isNull(validResult)){
                            // 满足条件,则跳出循环
                            break;
                        } else {
                            // 不满足条件则抛出异常
                            try {
                                throw new PositiveNumberException(validResult);
                            } catch (Exception e) {
                                System.out.println(e.getMessage());
                                System.out.println("请【重新】输入此名同学的科目成绩:");
                            }
                        }
                    } else {
                        try {
                            throw new PositiveNumberException("输入的不是数值类型");
                        } catch (Exception e) {
                            System.out.println(e.getMessage());
                            System.out.println("请【重新】输入此名同学的科目成绩::");
                        }
                    }
                }
                arrScore[i][j] = tempScore;
                sumScore += arrScore[i][j];
            }
            System.out.print("学生" + (i + 1) + "\t" + arrScore[i][0] + "\t" + arrScore[i][1] + "\t" + arrScore[i][2] + "\t" + sumScore + "\t");
            System.out.println(sumScore / 3);
        }
    }
}

/**
 * 正数异常类
 */
class PositiveNumberException extends Exception {

    /**
     * 异常类的构造方法
     */
    public PositiveNumberException() {
    }

    public PositiveNumberException(String message) {
        super(message);
    }

}

/**
 * 成绩范围类
 */
class ScoreRangeNumber {

    /**
     * 提供方法判断输入的成绩是否在0到100之间
     *
     * @param score
     * @return
     */
    public static String validScoreRange(double score) {
        if (score < 0 || score > 100) {
            return "输入成绩范围不在0到100之间,输入错误";
        }
        return null;
    }

}

 

package exception;

import java.util.Scanner;

public class Score {
    public static void main(String[] args) {
        System.out.println("请输入学生人数:");
        Scanner sn = new Scanner(System.in);
        int r;

        while (true) {
            try {
                String str = sn.next();
                if (str != null && !"".equals(str.trim())) {
                    if (!str.matches("^[0-9]*$")) {
                        throw new NumberException();
                    } else {
                        r = Integer.parseInt(str);
                        break;
                    }
                }
            } catch (NumberException e) {
                System.out.println("人数不是整数或者不是正数 请重新输入");
            }
        }
        double[][] arrScore = new double[r][3];
        System.out.println("Number" + "\t" + "Chinese" + "\t" + "Math" + "\t" + "English" + "\t" + "Sum" + "\t" + "Average");
        for (int i = 0; i < r; i++) {
            double sumScore = 0;
            System.out.println("请依次输入此名同学三门科目的成绩:");
            for (int j = 0; j < 3; j++) {
                int score;
                while (true) {
                    try {
                        String str = sn.next();
                        if (str != null && !"".equals(str.trim())) {
                            if (!str.matches("^[0-9]*$")) {
                                throw new NumberException();
                            } else {
                                score = Integer.parseInt(str);
                            }
                            if (score < 0 || score > 100) {
                                throw new ScoreException();
                            } else {
                                break;
                            }
                        }
                    } catch (NumberException e) {
                        System.out.println("成绩不是整数 请重新输入");
                    } catch (ScoreException e) {
                        System.out.println("成绩范围不在0~100之间 请重新输入");
                    }
                }
                arrScore[i][j] = score;
                sumScore += arrScore[i][j];
            }
            System.out.print("学生" + (i + 1) + "\t" + arrScore[i][0] + "\t" + arrScore[i][1] + "\t" + arrScore[i][2] + "\t" + sumScore + "\t");
            System.out.println(sumScore / 3);
        }
        System.out.print("Average" + "\t" + (arrScore[0][0] + arrScore[1][0] + arrScore[2][0] + arrScore[3][0] + arrScore[4][0]) / 5 + "\t");
        System.out.print((arrScore[0][1] + arrScore[1][1] + arrScore[2][1] + arrScore[3][1] + arrScore[4][1]) / 5 + "\t");
        System.out.print((arrScore[0][2] + arrScore[1][2] + arrScore[2][2] + arrScore[3][2] + arrScore[4][2]) / 5);
    }
}

class ScoreException extends Exception {
    private static final long serialVersionUID = 1L;

    public ScoreException() {
    }
}

class NumberException extends Exception {

    private static final long serialVersionUID = 1L;

    // 提供无参数的构造方法
    public NumberException() {
    }

}

 

import java.util.Scanner;

public class Score {
    /**
     * 非正数异常
     */
    static class PositiveNumberException extends RuntimeException {
    }

    /**
     * 超出范围 0~100 异常
     */
    static class OutOfRangeException extends RuntimeException {
    }

    public static void main(String[] args)
    {
        System.out.println("请输入学生人数:");
        Scanner sn = new Scanner(System.in);
        int r = 0;
        while (true) {
            try {
                r = Integer.parseInt(sn.nextLine());
                if (r < 0) {
                    throw new PositiveNumberException();
                }
                break;
            } catch (PositiveNumberException e) {
                System.out.println("您输入的成绩不是正数,请重新输入:");
            } catch (Exception e) {
                System.out.println("您输入的成绩不是整数,请重新输入:");
            }
        }
        double[][] arrScore = new double[r][3];

        System.out.println("Number" + "\t" + "Chinese" + "\t" + "Math" + "\t" + "English" + "\t" + "Sum" + "\t" + "Average");
        for (int i = 0; i < r; i++) {
            double sumScore = 0;
            System.out.println("请依次输入此名同学三门科目的成绩:");
            for (int j = 0; j < 3; j++) {
                try {
                    arrScore[i][j] = Integer.parseInt(sn.nextLine());
                    if (arrScore[i][j] < 0 || arrScore[i][j] > 100) {
                        throw new OutOfRangeException();
                    }
                    sumScore += arrScore[i][j];
                } catch (OutOfRangeException e) {
                    System.out.println("您输入的成绩范围不在0~100之间,请重新输入:");
                    j--;
                } catch (Exception e) {
                    System.out.println("您输入的成绩不是数值类型,请重新输入:");
                    j--;
                }
            }

            System.out.print("学生" + (i + 1) + "\t" + arrScore[i][0] + "\t" + arrScore[i][1] + "\t" + arrScore[i][2] + "\t" + sumScore + "\t");
            System.out.println(sumScore / 3);
        }

        System.out.print("Average" + "\t" + (arrScore[0][0] + arrScore[1][0] + arrScore[2][0] + arrScore[3][0] + arrScore[4][0]) / 5 + "\t");

        System.out.print((arrScore[0][1] + arrScore[1][1] + arrScore[2][1] + arrScore[3][1] + arrScore[4][1]) / 5 + "\t");
        System.out.print((arrScore[0][2] + arrScore[1][2] + arrScore[2][2] + arrScore[3][2] + arrScore[4][2]) / 5);
    }
}

 

博主如果遇到其他问题,也可以私信我!

输入人数哪里已经校验了是否是整数哦!!