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);
}
}
先赞后看,养成习惯!!!^ _ ^ ?? ?? ??
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!