2023-2024-2Java面向对象程序设计-阶段性测试2

填空题(总分:10.00)

1、Java程序中使用【 import 】关键字导入外部的包。

2、使用【 final 】关键字声明的类不能有子类。

4、JVM是【 Java Virtual Machine 】的英文简写。

5、面向对象编程思想的三个特性是【封装】、【继承】、【多态】。
编程题 (总分:70.00)

1、编程题一一话费及其异常处理 (分值:30.00)

【问题描述】

(1) 定义了一个接口Pay Able,包含计算电话话费的方法pay(),该方法抛出Pay Exception类型异常。

(2) 定义抽象电话类Phone,包括属性号码code。

(3) 定义手机类Mobile Phone继承Phone类,包含属性有通话时间time,话费单价price;定义三个参数的构造方法,完成号码、通话时间、话费的初始化;Mobile Phone类实现Pay Able接口计算话费。话费计算方法:手机类话费=通话时间*话费单价+上网费用+短信费用。

(3 )自定义异常类Pay Exception,表示话费小于0的异常,计算话费时如果小于0则抛出异常。

(4) 定义测试类,声明一个手机号码为13988888888的手机,并在测试类中处理异常。

【输入形式】输入通话时长,话费单价

【输出形式】话费结果或者异常

【样例输入】10 0.5

【样例输出】Fee=5.0

【样例输入】0 0.7

【样例输出】

Exception isPayException:Fee is 0!
Fee=0.0

【样例说明】
【评分标准】

package com.考试测试.Demo01;

import java.util.Scanner;

/**
 * 1、编程题一一话费及其异常处理	(分值:30.00)
 *
 * @author 为一道彩虹
 */
public class Solution01
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        int time = scanner.nextInt();
        float price = scanner.nextFloat();
        scanner.close();

        MobilePhone mobilePhone = new MobilePhone("13988888888", time, price);
        float Fee = 0;
        try {
            Fee = mobilePhone.pay();
            System.out.println("Fee=" + Fee);
        } catch (PayException e) {
            System.out.println("Exception isPayException:"+ e.getMessage());
            System.out.println("Fee=" + Fee);
        }

    }
}

interface PayAble
{
    // 计算话费
    float pay() throws PayException;
}

abstract class Phone
{
    // 号码
    String code;

    public Phone(String code)
    {
        this.code = code;
    }
}

class MobilePhone extends Phone implements PayAble
{
    int time;
    float price;


    public MobilePhone(String code, int time, float price)
    {
        super(code);
        this.time = time;
        this.price = price;
    }

    @Override
    public float pay() throws PayException
    {
        float Fee = time * price + 0 + 0;
        if (Fee <= 0)
        {
            throw new PayException("Fee is 0!");
        }

        return Fee;
    }
}

class PayException extends Exception
{
    public PayException(String message)
    {
        super(message);
    }
}

2、交换两个数(分值:20.00)

【问题描述】输入两个数,实现两个数的交换,并输出交换后的结果。

【输入形式】输入两个整数,放在一行,空格隔开
【输出形式】输出交换后的整数,放在两行,先输出后输入的整数
【样例输入】

2 14

【样例输出】
14

2

【样例说明】无

package com.考试测试.Demo01;

import java.util.Scanner;

/**
 * 2、交换两个数(分值:20.00)
 *
 * @author 为一道彩虹
 */
public class Solution02
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();

        // 方式1 使用临时变量
//        int temp = n;
//        n = m;
//        m = temp;
//        System.out.println(n);
//        System.out.println();
//        System.out.println(m);

        // 方式2 使用加减法
        n = n + m;
        m = n - m;
        n = n - m;
        System.out.println(n);
        System.out.println();
        System.out.println(m);

    }
}

3、编程实现类图(分值:20.00)

【问题描述】编程实现如下所示类图:

在这里插入图片描述

(1) 对于Shape:类的getArea方法,可以是空函数,而对于Rectangle和Circle类的getArea方法,需要真正实现其功能,即计算相应图形的面积,题中PI=3.1415926。

(2) Rectangle和Circle类的构造函数需要实现

(3) 定义测试类,需要测试以下情形,单个对象(Rectangle、Circle)、数组化(即定义一个对
象数组,包含若干个Rectangle、Circle的对象),依次接收数据,不同对象之间的数据用逗号分隔,输出对应的面积。

【输入形式】
图形个数和图形属性,属性用空格隔开,不同对象用逗号分隔

【输出形式】面积
【样例输入1】1 3 4
【样例输出1】12.0

【样例输入2】1 2
【样例输出2】12.56

【样例输入2】2 3 4,2
【样例输出2】24.56

【样例说明】
【评分标准】

package com.考试测试.Demo01;

import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.Scanner;

/**
 * 3、编程实现类图(分值:20.00)
 *
 * @author 为一道彩虹
 */
public class Solution03
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        String[] array = null;
        double area = 0;

        DecimalFormat decimalFormat = new DecimalFormat("#.##");
        decimalFormat.setRoundingMode(RoundingMode.DOWN);

        // 如果 n范围(n-1>n && n <= 1]
        if (n == 1)
        {
            array = scanner.nextLine().trim().split(" ");
            if (array.length != 1)
            {
                Rectangle rectangle = new Rectangle(Double.parseDouble(array[0]), Double.parseDouble(array[1]));
                area = rectangle.getArea();
                System.out.println(area);
            }
            else
            {
                Circle circle = new Circle(Double.parseDouble(array[0]));
                area = Double.parseDouble(decimalFormat.format(circle.getArea()));
                System.out.println(area);
            }
        }
        else
        {
            array = scanner.nextLine().trim().split(",");
            Shape[] shapes = new Shape[n];

            for (int i = 0; i < array.length; i++)
            {
                String[] arr = array[i].split(" ");
                if (arr.length != 1)
                {
                    Rectangle rectangle = new Rectangle(Double.parseDouble(arr[0]), Double.parseDouble(arr[1]));
                    shapes[i] = rectangle;
                }
                else
                {
                    Circle circle = new Circle(Double.parseDouble(arr[0]));
                    shapes[i] = circle;
                }
            }

            for (Shape shape : shapes)
            {
                area += shape.getArea();
            }
            System.out.println(decimalFormat.format(area));
        }
    }
}

class Shape
{
    private double area;

    public double getArea()
    {
        return area;
    }
}

class Rectangle extends Shape
{
    double length;
    double width;

    public Rectangle(double length, double width)
    {
        this.length = length;
        this.width = width;
    }

    @Override
    public double getArea()
    {
        return length * width;
    }
}

class Circle extends Shape
{
    double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    @Override
    public double getArea()
    {
        return Math.PI * radius * radius;
    }
}

接口编程题
显示Person子类学生类信息2

【问题描述】

设计学生类Student,继承类Person,显示学生姓名和成绩。测试类Test在驱动代码中,无需再重新编写。

增加Student类,运行Test类。

public class Test
{
    public static void main(String[] args)
    {
        Person s = new Student("lisi", 23, 86.0);
        s.display();
    }
}

[注意要点本类接口文件可以直接下载,只需编写Student类目类文件需存放在默认包中。

[输入形式】无
【输出形式】
Name=lisi
Grade=86.0
【样例输入】
【样例输出】
【样例说明】
【评分标准】

package com.考试测试.Demo01;

/**
 * 接口编程题
 *
 * 显示Person子类学生类信息2
 *
 * @author 为一道彩虹
 */
public class Solution04
{
    public static void main(String[] args)
    {
        Person s = new Student("lisi", 23, 86.0);
        s.display();
    }
}

class Person
{
    String name;
    int age;

    public Person(String name, int age)
    {
        this.name = name;
        this.age = age;
    }

    public void display()
    {
    }
}

class Student extends Person
{
    double grade;

    public Student(String name, int age, double grade)
    {
        super(name, age);
        this.grade = grade;
    }

    @Override
    public void display()
    {
        System.out.println("Name=" + name);
        System.out.println("Grade=" + grade);
    }
}

先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值