weixin_56933384 2021-06-26 23:54 采纳率: 50%
浏览 123
已采纳

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之间,则进行相应的异常处理,并提示重新输入(自定义成绩范围类)

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

  • 写回答

5条回答 默认 最新

  • IT学习日记 后端领域优质创作者 2021-06-27 08:39
    关注

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

     

    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;
        }
    
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置