尚学堂Java第六章编码题

尚学堂Java第六章编码题


原以为这一章十分的简单,但我看到题目后就没有这个念头了,可能上课不够认真,又重新认真的看了一次视频。相信大多数都是第三题有很多困惑。

编码题一

题目: 编写程序接收用户输入分数信息,如果分数在0—100之间,输出成绩。如果成绩不在该范围内,抛出异常信息,提示分数必须在0—100之间。(要求:使用自定义异常实现)
第一题在认真看完视频应该没有问题,自定义一个异常然后抛出即可。

package dylan.linger.exeption;

import java.util.Scanner;
/**
 * @author Linger
 * 输出自定义异常
 */
public class ShowGradeException {
    public static void main(String[] args) throws IllegalGradeException {
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入分数:");
    int grade = scanner.nextInt();
    Grade g = new Grade();
    g.setGrade(grade);
    System.out.println("您的分数是:"+ g.getGrade());
    }
}

class Grade{
    private int grade;
    public int getGrade() {
        return grade;
    }
    public void setGrade(int grade) throws IllegalGradeException {
        if (grade<0||grade>100){
            throw new IllegalGradeException("分数必须在0-100之间!");
        }else{
            this.grade = grade;
        }
    }
}

class IllegalGradeException extends Exception{
    public IllegalGradeException(){
    }
    public IllegalGradeException(String msg){//构造器重载
        super(msg);
    }
}

运行结果:
在这里插入图片描述

编码题二

题目: 写一个方法void isTriangle(int a,int b,int c),判断三个参数是否能构成一个三角形, 如果不能则抛出异常IllegalArgumentException,显示异常信息 “a,b,c不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数, 调用此方法,并捕获异常。
第二题跟第一题一样的做法,掌握了第一题,第二题也可以做出来的

package dylan.linger.exeption;

import java.util.Scanner;

/**
 * @author Linger
 * 判断是否能构成三角形,抛出异常
 */
public class CheckTriangle {
    public static void main(String[] args) throws IllegalArgumentException {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入三角形的第一条边的长度:");
        int a = scanner.nextInt();
        System.out.print("请输入三角形的第二条边的长度:");
        int b = scanner.nextInt();
        System.out.print("请输入三角形的第三条边的长度:");
        int c = scanner.nextInt();
        scanner.close();
        isTriangle(a,b,c);
    }
    static void isTriangle(int a,int b,int c) throws IllegalArgumentException {
        if(a+b>c&&b+c>a&&a+c>b){
            System.out.println("已构成三角形,三条边分别为:"+a+","+b+","+c+"。");
        }else {
            throw new IllegalArgumentException(a+","+b+","+c+"不能构成三角形。");
        }
    }
}

class IllegalArgumentException extends Exception{
    public IllegalArgumentException(){
    }
    public IllegalArgumentException(String msg){
        super(msg);
    }
}

看运行后:
在这里插入图片描述

编码题三

题目: 编写一个计算N个学生分数平均分的程序。程序应该提示用户输入N的值,如何必须输入所有N个学生分数。如果用户输入的分数是一个负数,则应该抛出一个异常并捕获,提示“分数必须是正数或者0”。并提示用户再次输入该分数。
(这题对于我来说确实是许多需要思考的地方的,有几个地方做的不好但没有解决方法,我理解的题目是需要抛出异常后重新输入学生个数或分数,继续执行,做完后再看代码感觉没有考到什么,希望师傅们可以指点指点!!!)

package dylan.linger.exeption;

import java.util.Scanner;
/**
 * @author DYLAN
 * 计算平均分
 */

public class FigureAverage {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入学生个数:");
        int num = scanner.nextInt();

        if(num<=0) {     //判断输入的学生个数是否是负数
            try {
                throw new IllageGradeException("学生个数必须大于1"); //抛出异常
            } catch (IllageGradeException e) {
                e.printStackTrace();
            }finally {
                System.out.print("请重新输入学生的个数:");    //执行更新学生个数操作
                int n = scanner.nextInt();
                num = n;
            }
        }

        double[] grade = new double[num];   //定义数组保存输入的分数

        for(int i=0; i<num;i++){
            System.out.print("请输入第"+(i+1)+"位学生的分数:");
            double gr = scanner.nextDouble();
            grade[i] = gr;  //将分数存储在数组中

            if(gr<0) {  //判断输入的分数是否为负数
                try {
                    throw new IllageGradeException("分数必须是正数或者0");//抛出异常
                } catch (IllageGradeException e) {
                    e.printStackTrace();
                }finally {
                    System.out.print("请重新输入第" + (i + 1) + "位学生的分数:");  //执行更新学生个数操作
                    double g = scanner.nextDouble();
                    grade[i] = g;
                }
            }
        }
        Average average = new Average(grade);
        average.average();//调用方法输出平均分
    }
}

class Average {
    double[] grade;
    double total = 0;//用来计算总数
    Average(double[] grade){
        this.grade = grade;
    }

    void average(){ //计算平均分并输出
        for (int i=0;i<grade.length;i++){
            total += grade[i];
        }
        System.out.println(grade.length+"位学生的平均分为:"+(total/grade.length));
    }
}

class IllageGradeException extends Exception{
    public IllageGradeException(){
    }
    public IllageGradeException(String msg){//构造器重载
        super(msg);
    }
}

看看执行结果把!
在这里插入图片描述
致敬英雄,缅怀同胞。

莎士比亚说:那脑袋里的智慧,就像打火石里的火花一样,,不去打它是不肯出来的。

(PS:也不知道自己理解和做的是否正确,希望师傅们指点。)
——by linger


版权声明:本文为dingdang_miao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。