一、往期知识回顾二、题目
1、写一个符合JavaBean规范的Student学生类,属性分别是:姓名、年龄、成绩、性别、是否毕业等,使用IDEA或者Eclipse工具生成对应的getter和setter方法。2、编写一个动物园管理员类Manager,有两个私有属性:饲养员和驯兽师;有方法feed饲养动物,有方法perform表演;3、 创建一个杯子对象,属性为颜色、价格和品牌,方法为:摔坏并价掉为0,盛水。 4、写一个图片类,具有属性:宽度、长度、路径、类型、大小;具有方法:显示、隐藏、获取信息、更改路径等。
5、使用继承实现:6、使用组合实现:7、编写一个形状类Shape,具有名字name属性,具有抽象方法getArea()计算面积,以及抽象方法getPerimeter()计算周长;要求:8、学生成绩管理系统中,学生可以注册账号;注册账号时进行账号激活-手机验证码、邮箱激活链接、人脸识别等操作9、学生成绩管理系统中,学生和管理员两个不同的人员进行登录同一个网页。10:我们家用电一般是220V,而手机用电是5V,假设:
一、往期知识回顾1、判断语句练习题:https://blog.csdn.net/m0_55586329/article/details/122441587
2、循环语句练习题:https://blog.csdn.net/m0_55586329/article/details/122451061
3、判断语句理论知识:https://blog.csdn.net/m0_55586329/article/details/116331989
4、数组理论实践知识:https://blog.csdn.net/m0_55586329/article/details/116840485
二、题目 1、写一个符合JavaBean规范的Student学生类,属性分别是:姓名、年龄、成绩、性别、是否毕业等,使用IDEA或者Eclipse工具生成对应的getter和setter方法。5、数组十道练习题:https://blog.csdn.net/m0_55586329/article/details/122482097
// 直接用快捷键ALT+SHILT+INSERT或者邮件进行生成getter和setter,一般固定的代码自动生成比较好。
public class Student {
private String name;
private int age;
private float score;
private String gender;
private boolean graduate;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public boolean isGraduate() {
return graduate;
}
public void setGraduate(boolean graduate) {
this.graduate = graduate;
}
}
2、编写一个动物园管理员类Manager,有两个私有属性:饲养员和驯兽师;有方法feed饲养动物,有方法perform表演;
// 思路:根据题目要求,有两个私有属性,以及两个方法,因此需要编写两个方法,难度不是很大。
public class Manager {
private String groom;
private String tamer;
public void feed() {
System.out.println("饲养");
}
public void perform() {
System.out.println("表演");
}
}
3、 创建一个杯子对象,属性为颜色、价格和品牌,方法为:摔坏并价掉为0,盛水。
public class Cup {
private String color;
private double price;
private String brand;
public void badCup() {
price = 0;
System.out.println("摔坏杯子");
}
public void fillWater() {
System.out.println("盛水");
}
}
4、写一个图片类,具有属性:宽度、长度、路径、类型、大小;具有方法:显示、隐藏、获取信息、更改路径等。
public class Images {
private double width;
private double height;
private String imagesURL;
private String type;
private double size;
public void display() {
System.out.println("显示图片");
}
public void hidden() {
System.out.println("隐藏路径");
}
public void getImagesInformation() {
System.out.println("获取图片的信息");
}
public void setImagesURL() {
System.out.println("更改图片的路径");
}
}
5、使用继承实现:
(一)编写一个动物园管理员类Manager,有方法feed饲养动物,有方法perform表演;(二)编写一个饲养员类Keeper,有方法feed饲养;继承于管理员;(三)编写一个驯兽师类Trainer,有方法perform表演;继承于管理员;(四)新建测试类,创建管理员调用方法进行测试。
(1)、动物园管理类Manager
public class Manager {
public void feed() {
System.out.println("eat");
}
public void perform() {
System.out.println("表演");
}
}
(2)、饲养员类Keeper
public class Keeper extends Manager {
@Override
public void feed() {
System.out.println("继承管理员的feed方法");
}
}
(3)、驯兽师类Trainer
public class Trainer extends Manager {
@Override
public void perform() {
System.out.println("狮子表演了");
}
}
(4)、测试类
public class TestManager {
public static void main(String[] args) {
Manager keeper = new Keeper();
Manager trainer = new Trainer();
keeper.feed();
trainer.perform();
}
}
运行结果:
(一)编写一个饲养员类Keeper,有方法feed饲养;(二)编写一个驯兽师类Trainer,有方法perform表演;(三)编写一个动物园管理员类Manager,有两个私有属性:饲养员和驯兽师;有方法feed饲养动物,有方法perform表演;(四)新建测试类,创建管理员调用方法进行测试。
思路:组合,说明将两个或者多个不同的类的功能组合在一起,构建出一共完整的功能,因为对象不同,所以功能也不同,因此我们使用组合的将对象组合就行了,相比于继承也会更加方便一些。
// 1、饲养员Keeper
public class Keeper {
public void feed() {
System.out.println("饲养员喂养食物");
}
}
// 2、驯兽师Trainer
public class Trainer {
public void perform() {
System.out.println("动物表演的方法");
}
}
// 3、管理员的方法
public class Manager {
private final Keeper keeper = new Keeper();
private final Trainer trainer = new Trainer();
public void feed() {
keeper.feed();
}
public void perform() {
trainer.perform();
}
}
测试类
public class TestManager {
public static void main(String[] args) {
Manager manager = new Manager();
manager.feed();
manager.perform();
}
}
7、编写一个形状类Shape,具有名字name属性,具有抽象方法getArea()计算面积,以及抽象方法getPerimeter()计算周长;要求:
(一)编写形状类的实现类圆形Circle,有属性半径;具体类长方形Rectangle,有属性长和宽,具体类三角形Triangle,有属性三条边(二)编写计算机类Computer,添加计算形状面积的方法calculateArea(Shape),以及计算形状周长的方法calculatePerimeter(Shape)(三)编写测试类,测试类添加静态方法:makeShape(int),根据参数返回不同的形状,使用计算机计算不同形状的面积和周长。注:三角形面积计算公式:S=sqrt[p(p-a)(p-b)(p-c)],其中sqrt为开平方根,Math类有该方法,p=(a+b+c)/2即三边之和的一半,严格来说,三边有两边之和不大于另一半那么可以直接返回面积0,这点可不做实现。
(1)、形状类Shape
public abstract class Shape {
private String name;
public abstract void getArea();
public abstract void getPerimeter();
}
(2)、圆形Circle
public class Circle extends Shape {
private double r;
public Circle() {
}
public Circle(double r) {
this.r = r;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
// 获取面积的方法
@Override
public void getArea() {
double area = 3.14 * r * r;
System.out.println("圆的面积=" + area);
}
// 计算圆的周长方法
@Override
public void getPerimeter() {
double length = 2 * Math.PI * r;
System.out.println("圆的周长为=" + length);
}
}
(3)、长方形
public class Rectangle extends Shape {
private double length;
private double width;
public Rectangle() {
}
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
// 长方形计算面积的方法
@Override
public void getArea() {
double rectangleArea = this.width * this.length;
System.out.println("长方形的面积为=" + rectangleArea);
}
// 计算周长的方法
@Override
public void getPerimeter() {
double rectanglePerimeter = 2 * (this.length + this.width);
System.out.println("长方形的周长为=" + rectanglePerimeter);
}
}
(4)、计算机Computer
public class Computer {
public void calculateArea(Shape shape) {
if (shape instanceof Rectangle) {
Rectangle rectangle = (Rectangle) shape;
rectangle.getArea();
} else if (shape instanceof Circle) {
Circle circle = (Circle) shape;
circle.getArea();
} else if (shape instanceof Triangle) {
Triangle triangle = (Triangle) shape;
triangle.getArea();
} else {
System.out.println("输入有误");
}
}
public void calculatePerimeter(Shape shape) {
if (shape instanceof Rectangle) {
Rectangle rectangle = (Rectangle) shape;
rectangle.getPerimeter();
} else if (shape instanceof Circle) {
Circle circle = (Circle) shape;
circle.getPerimeter();
} else if (shape instanceof Triangle) {
Triangle triangle = (Triangle) shape;
triangle.getPerimeter();
} else {
System.out.println("输入有误");
}
}
}
(6)、测试类
public class TestShape {
public static void main(String[] args) {
System.out.println("-----------计算面积系统------------");
System.out.println("------1、计算圆面积及周长-------");
System.out.println("------2、计算长方形的面积及周长-------");
System.out.println("------3、计算三角形的面积及周长-------");
System.out.print("请选择:");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
switch (number) {
case 1:
makeShape(1);
break;
case 2:
makeShape(2);
break;
case 3:
makeShape(3);
break;
default:
System.out.println("输入有误");
break;
}
}
public static void makeShape(int number) {
Computer computer = new Computer();
Scanner scanner = new Scanner(System.in);
if (number == 1) {
Circle circle = new Circle();
System.out.print("请输入圆的半径:");
double r = scanner.nextDouble();
circle.setR(r);
computer.calculateArea(circle);
computer.calculatePerimeter(circle);
} else if (number == 2) {
Rectangle rectangle = new Rectangle();
System.out.print("请输入长方形的宽:");
double width = scanner.nextDouble();
rectangle.setWidth(width);
System.out.print("请输入长方形的长:");
double length = scanner.nextDouble();
rectangle.setLength(length);
computer.calculateArea(rectangle);
computer.calculatePerimeter(rectangle);
} else if (number == 3) {
Triangle triangle = new Triangle();
System.out.print("请输入三角形的第一条边:");
double width = scanner.nextDouble();
triangle.setWidth(width);
System.out.print("请输入三角形的第二条边:");
double length = scanner.nextDouble();
triangle.setLength(length);
System.out.print("请输入三角形的第三条边:");
double height = scanner.nextDouble();
triangle.setHeight(height);
// 注意三角形有一些限制,两条边之和要大于第三边,即a+b>c 三角形面积计算公式:S=sqrt[p(p-a)(p-b)(p-c)],其中sqrt为开平方根,Math类有该方法,p=(a+b+c)/2即三边之和的一半,
if (width + length > height) {
if (length + height > width) {
if (width + height > length) {
computer.calculateArea(triangle);
computer.calculatePerimeter(triangle);
}
} else {
System.out.println("输入的三边不能构成三角形");
}
} else {
System.out.println("输入的三边不能构成三角形");
}
} else {
System.out.println("您输入的信息有误!");
}
}
}
(7)、运行结果
// 主要考察的是运行时多态问题
// 分析:学生在进行注册账号的时候可以进行账号验证以及邮件激活链接,说明得有这两个方法,账号注册的时候进行验证分析就好。
// 学生管理系统主类型
public class StudentLogin {
// 注册的方法
public void register(Device device) {
System.out.println("正在输入验证的信息");
String reg = device.sendVerifyInfo();
System.out.println("验证信息[" + reg + "]验证成功");
}
public static void main(String[] args) {
StudentLogin studentLogin = new StudentLogin();
Device phone = new Phone();
studentLogin.register(phone);
Device email = new Email();
studentLogin.register(email);
}
}
class Device {
// 设备的类型
public String sendVerifyInfo() {
System.out.println("正在输入验证信息");
return "default";
}
}
public class Phone extends Device {
// 发送验证码
@Override
public String sendVerifyInfo() {
System.out.println("手机正在发送信息");
return "phone";
}
}
public class Email extends Device {
// 发送激活链接
@Override
public String sendVerifyInfo() {
System.out.println("邮箱正在发送信息");
return "Email";
}
}
运行结果
// 难度不是很大,根据题目要求,主要考察设计时多态问题。
public class StudentManagement {
public void login(Management management) {
System.out.println("管理员进行登录...");
}
public void login(Student student) {
System.out.println("学生正在登录...");
}
public static void main(String[] args) {
StudentManagement studentManagement = new StudentManagement();
Management management = new Management();
Student student = new Student();
studentManagement.login(management);
studentManagement.login(student);
}
}
// 学生
public class Student {
}
// 管理员
public class Management {
}
10:我们家用电一般是220V,而手机用电是5V,假设:
(一)有一个接口表示220V:IVoltage220V,有方法int output220V()输出220伏电压(二)有实现了220V的插板:OutputVoltage220V类生成的插板对象,但是不能用于手机(三)手机Phone类,有充电方法charge(IVoltage5V),只能用5V的电压,这里有IVoltage5V接口作为参数(四)如何解决这个问题呢?可以买一个适配器Adapter,适配器需要一个220V插板作为供电方,有能力接受220V并转为5V输出(五)通过这个适配器,手机正常使用!请设计这些接口和类。
这道题考察的接口与适配器的使用
// 这是输入的是220V的电压
public interface IVoltage220V {
// 默认其输出220伏电压
default int output220V() {
return 220;
}
}
// 220v电压连接220V的插排进行通电
public class OutputVoltage220V implements IVoltage220V {
}
// 因为我手机充电用的是5V的电压,因此需要使用这个标准5V接口
public interface IVoltage5V {
int output5V();
}
// 有了5V的接口,我们就可以使用这个接口,将220V的电压通过适配器降压给手机充电。
public class IVoltageAdapter implements IVoltage5V {
// 适配器将220V的电压转为5V的电压对手机进行充电,因此需要将电压导入先
private IVoltage220V source;
public IVoltageAdapter(IVoltage220V source) {
this.source = source;
}
@Override
public int output5V() {
// 在这里将220V电压转为5V
return this.source.output220V() / 44;
}
}
// 给手机进行充电进行测试
public class Phone {
// 充电的方法
public void charge(IVoltage5V iVoltage5V) {
if (iVoltage5V.output5V() > 5) {
System.out.println("不能正常充电,当前电压是" + iVoltage5V.output5V());
} else {
System.out.println("正在充电,使用的电压是" + iVoltage5V.output5V());
}
}
}
// 我们220V的电压不可以直接给手机充电,因此需要适配器将电压降为5V在再给手机充电
public class TestMain {
public static void main(String[] args) {
OutputVoltage220V outputVoltage220V = new OutputVoltage220V();
Phone phone = new Phone();
IVoltageAdapter iVoltageAdapter = new IVoltageAdapter(outputVoltage220V);
phone.charge(iVoltageAdapter);
}
}
运行结果
小白一枚,如果有错误的地方,麻烦各位前辈指教一下,感谢!!!



