第二次pta大作业的总结和反思

news/2025/1/20 21:54:01/文章来源:https://www.cnblogs.com/ygking-22/p/18238615

第二次pta大作业的总结和反思

目录

一.前言
二.题目分析
三.总结

一.前言

第二次作业说实话有点一言难尽啊,因为比较难的缘故吧,有的题甚至做了一个星期也没做完,所以blog有点无从下手,因为有很多题目是现想的,没有经过调试,不知道思路究竟对不对,可能会有一些理解上会些偏差,构造方法会有点偏简单复杂,还请理解。

二.题目分析

第四次pta作业
第二题

设计一个学生类(Student)和它的一个子类——本科生类(Undergraduate)。要求如下:
(1)Student类有姓名(name)和年龄(age)属性,两者的访问权限为protected;一个包含两个参数的构造方法,用于给姓名和年龄属性赋值;一个show( )方法用于输出Student的属性信息,输出格式为Student[name=XXX,age=XX]。
(2)Undergraduate类增加一个专业(major)属性,该属性的访问权限为private;有一个包含三个参数的构造方法,前两个参数用于给继承的年龄和姓名属性赋值,第三个参数给专业属性赋值;一个show( )方######法用于输出Undergraduate的属性信息,输出格式为Undergraduate[name=XXX,age=XXX,major=XXX]。
在测试类Main的main( )方法中,调用Student类的带参数的构造方法创建对象object1,调用Undergraduate类的带参数的构造方法创建对象object2,然后分别调用它们的show( )方法。

解析思路

这道题主要考察的是继承,父类和子类,学生类作为父类,本科生类作为子类,子类是要继承父类属性,首先创造学生类,访问权限为protected,并加入姓名和年龄的属性,并用一个show()方法将姓名和年龄输出,再创造一个子类Undergraduate类,访问权限就是private,继承父类的属性,并用show()方法输出。

代码展示
点击查看代码
import java.util.Scanner;class Student {protected String name;protected int age;public Student(String name, int age) {this.name = name;this.age = age;}public void show() {System.out.println("Student[name=" + this.name + ",age=" + this.age + "]");}
}class Undergraduate extends Student {private String major;public Undergraduate(String name, int age, String major) {super(name, age);this.major = major;}public void show() {System.out.println("Undergraduate[name=" + this.name +",age=" + this.age + ",major=" + this.major + "]");}
}public class Main {public static void main(String[] args) {Scanner cin = new Scanner(System.in);String name = cin.next();int age = cin.nextInt();Student student = new Student(name, age);name = cin.next();age = cin.nextInt();String major = cin.next();Undergraduate undergraduate = new Undergraduate(name, age, major);student.show();undergraduate.show();}
}
第三题

学校需要构建综合系统,使用者包含多种角色。角色Role分两类:学生Student和雇员Employee;雇员又分为教员Faculty和职员Staff。
每个角色都有姓名、性别。学生有学号、班级。一个雇员有工号、入职日期。教员有职称。职员有职位称号。
请以如下Main类为基础,构建各个角色类,将代码补充完整。

点击查看代码
public class Main {public static void main(String[] args) {Faculty fac = new Faculty("张三",32,"33006","2019","10","25","讲师");Student stu=new Student("李四",19,"20201103","202011");Staff sta = new Staff("王五",27,"32011","2015","06","17","教务员");        fac.show();sta.show();stu.show();}
}
解析思路

该题已经给出了Main类,利用逆向思维,通过Main类给出的基础对学生类Student和雇员类Employee类进行构造,其中Employee类分为Faculty和Staff类,可以先创造一个role类,将姓名和年龄的属性,将此作为输出,再构造Student类,Faculty类和Staff类并将三个类的属性通过role类输出

代码展示
点击查看代码
import java.util.Arrays;
import java.util.Scanner;class Role{String name;int age;Role(String name, int age){this.name = name;this.age = age;}
}class Faculty extends Role{private String id;private String f_name;private String year;private String month;private String day;Faculty(String name, int age, String id, String year, String month, String day, String f_name){super(name, age);this.id = id;this.year = year;this.month = month;this.day = day;this.f_name = f_name;}public void show(){System.out.println("我是" + super.name + ",年龄" + super.age + "岁。工号是" + this.id + "," + this.year + "年" + Integer.parseInt(this.month) + "月" + Integer.parseInt(this.day) + "日入职。是一名教师," + this.f_name + "职称。");}
}class Student extends Role{private String id;private String cl;Student(String name, int age, String id, String cl){super(name, age);this.cl = cl;this.id = id;}public void show(){System.out.println("我是" + super.name + ",年龄" + age + "岁。学号是" + id + ",来自" + cl + "班。");}
}class Staff extends Role{private String id;private String f_name;private String year;private String month;private String day;Staff(String name, int age, String id, String year, String month, String day, String f_name){super(name, age);this.id = id;this.year = year;this.month = month;this.day = day;this.f_name = f_name;}public void show(){System.out.println("我是" + super.name + ",年龄" + super.age + "岁。工号是" + this.id + "," + this.year + "年" + Integer.parseInt(this.month) + "月" + Integer.parseInt(this.day) + "日入职。是一名" + this.f_name + "。");}
}public class Main {public static void main(String[] args) {Faculty fac = new Faculty("张三",32,"33006","2019","10","25","讲师");Student stu=new Student("李四",19,"20201103","202011");Staff sta = new Staff("王五",27,"32011","2015","06","17","教务员");fac.show();sta.show();stu.show();}
}
第五次pta作业
功能:
  使用集合存储多个学生的信息(有序);获取学生总数,并按照存储顺序;按照存储顺序获取各个学生的信息并逐条输出

备注:请学生复制以下代码到编程区进行改错。
//1考查集合导包

点击查看代码
class Student{private String no;
private String name;public Student(String no, String name) {super();this.no = no;this.name = name;
}
public Student() {super();
}
public String getNo() {return no;
}
public void setNo(String no) {this.no = no;
}
public String getName() {return name;
}
public void setName(String name) {this.name = name;
}@Override
public String toString() {return "Student [no=" + no + ", name=" + name + "]";
}    
}

public class Main {

public static void main(String[] args) {
// 创建学生对象
Student stu1 = new Student("1001","zs");
Student stu2 = new Student("1002","ls");

//2考查集合接口的实例化
//创建有序集合List,并向集合中添加学生,
List students=new List();
students.add(stu1);
students.add(stu2);//计算学生人数,显示学生信息                    
for(int i=0;i<students.size();i++) {//3考查遍历方法和向下转型Student stu=students.get(i);System.out.println("no:"+stu.getNo()+"\t name:"+stu.getName());
}            

}
}

解析思路

该题是对给出的代码进行改错,其实操作很简单只用将题目中的代码复制粘贴到eclipse,根据eclipse上的提示进行修改,如果你要是够懒的话,也可以用点击eclipse代码旁的小灯提示,直接改,还不用自己打字,你说够不够懒。

代码展示
点击查看代码
import java.util.ArrayList;
class Student{private String no;
private String name;public Student(String no, String name) {super();this.no = no;this.name = name;
}
public Student() {super();
}
public String getNo() {return no;
}
public void setNo(String no) {this.no = no;
}
public String getName() {return name;
}
public void setName(String name) {this.name = name;
}@Override
public String toString() {return "Student [no=" + no + ", name=" + name + "]";
}    
}public class Main {public static void main(String[] args) {// 创建学生对象Student stu1 = new Student("1001","zs");Student stu2 = new Student("1002","ls");//2考查集合接口的实例化//创建有序集合List,并向集合中添加学生,ArrayList<Student> students=new ArrayList();students.add(stu1);students.add(stu2);//计算学生人数,显示学生信息                    for(int i=0;i<students.size();i++) {//3考查遍历方法和向下转型Student stu=students.get(i);System.out.println("no:"+stu.getNo()+"\t name:"+stu.getName());}            
}
}
第三题

功能需求:
使用集合存储3个员工的信息(有序);
通过迭代器依次找出所有的员工。
提示:学生复制以下代码到编程区,并按需求进行调试修改。

// 1、导入相关包

//定义员工类
class Employee {

private String name;
private int age;public Employee() {super();
}public Employee(String name, int age) {super();this.name = name;this.age = age;
}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 class Main {

public static void main(String[] args) {// 1、创建有序集合对象Collection c ;// 创建3个员工元素对象for (int i = 0; i < 3; i++) {Scanner sc = new Scanner(System.in);String employeeName = sc.nextLine();int employeeAge = sc.nextInt();Employee employee = new Employee(employeeName, employeeAge);c.add(employee);}			// 2、创建迭代器遍历集合Iterator it;//3、遍历while (it.hasnext) {//4、集合中对象未知,向下转型Employee e =  it.next();System.out.println(e.getName() + "---" + e.getAge());}
}

}

解析思路

这和上一个题目没什么区别吧牢底,包变脸的,就是把题目中的代码复制粘贴到eclipse上,根据eclipse的提示,对代码进行修改,但是要注意一个点就是非零返回,以为前几次修改,我都忘记了要用return返回属性的值,这是很低级的错误了吧。

代码展示
点击查看代码
import java.util.ArrayList;
import java.util.Collection;
import java.util.Scanner;
import java.util.HashMap;
//定义员工类
class Employee {private String name;
private String age;
public Employee(String name, String age) {this.name = name;
this.age = age;
}public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getAge() {
return age;
}public void setAge(String age) {
this.age = age;
}
}//主函数
public class Main {public static void main(String[] args) {
// 1、创建有序集合对象
ArrayList<Employee> users =new ArrayList<>();
String employeeAge;
String employeeName;
Scanner sc = new Scanner(System.in);
// 创建3个员工元素对象
for (int i = 0; i < 3; i++) {
employeeName = sc.nextLine();
employeeAge = sc.nextLine();
users.add(new Employee(employeeName, employeeAge));
}
for(int j=0;j<3;j++) {
System.out.println(users.get(j).getName() + "---" + users.get(j).getAge());
}
}
}
第四题

智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能。请根据如下要去设计一个智能家居强电电路模拟系统。

1、控制设备模拟

本题模拟的控制设备包括:开关、分档调速器、连续调速器。

开关:包括0和1两种状态。

开关有两个引脚,任意一个引脚都可以是输入引脚,而另一个则是输出引脚。开关状态为0时,无论输入电位是多少,输出引脚电位为0。当开关状态为1时,输出引脚电位等于输入电位。
分档调速器

按档位调整,常见的有3档、4档、5档调速器,档位值从0档-2(3/4)档变化。本次迭代模拟4档调速器,每个档位的输出电位分别为0、0.3、0.6、0.9倍的输入电压。
连续调速器

没有固定档位,按位置比例得到档位参数,数值范围在[0.00-1.00]之间,含两位小数。输出电位为档位参数乘以输入电压。
所有调速器都有两个引脚,一个固定的输入(引脚编号为1)、一个输出引脚(引脚编号为2)。当输入电位为0时,输出引脚输出的电位固定为0,不受各类开关调节的影响。

所有控制设备的初始状态/档位为0。

控制设备的输入引脚编号为1,输出引脚编号为2。

2、受控设备模拟

本题模拟的受控设备包括:灯、风扇。两种设备都有两根引脚,通过两根引脚电压的电压差驱动设备工作。

灯有两种工作状态:亮、灭。在亮的状态下,有的灯会因引脚电位差的不同亮度会有区别。
风扇在接电后有两种工作状态:停止、转动。风扇的转速会因引脚的电位差的不同而有区别。
本次迭代模拟两种灯具。

白炽灯:

亮度在0~200lux(流明)之间。
电位差为0-9V时亮度为0,其他电位差按比例,电位差10V对应50ux,220V对应200lux,其他电位差与对应亮度值成正比。白炽灯超过220V。
日光灯:

亮度为180lux。
只有两种状态,电位差为0时,亮度为0,电位差不为0,亮度为180。
本次迭代模拟一种吊扇。

工作电压区间为80V-150V,对应转速区间为80-360转/分钟。80V对应转速为80转/分钟,150V对应转速为360转/分钟,超过150V转速为360转/分钟(本次迭代暂不考虑电压超标的异常情况)。其他电压值与转速成正比,输入输出电位差小于80V时转速为0。
输入信息:

1、设备信息

分别用设备标识符K、F、L、B、R、D分别表示开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇。

设备标识用标识符+编号表示,如K1、F3、L2等。
引脚格式:设备标识-引脚编号,例如:K1-1标识编号为1的开关的输入引脚。

三种控制开关的输入引脚编号为1,输出引脚编号为2。
受控设备的两个引脚编号分别为1、2。
约束条件:

不同设备的编号可以相同。
同种设备的编号可以不连续。
设备信息不单独输入,包含在连接信息中。

2、连接信息

一条连接信息占一行,用[]表示一组连接在一起的设备引脚,引脚与引脚之间用英文空格" "分隔。

格式:"["+引脚号+" "+...+" "+引脚号+"]"
例如:[K1-1 K3-2 D5-1]表示K1的输入引脚,K3的输出引脚,D5的1号引脚连接在一起。
约束条件:

本次迭代不考虑两个输出引脚短接的情况
考虑调速器输出串联到其他控制设备(开关)的情况
不考虑调速器串联到其他调速器的情况。
不考虑各类控制设备的并联接入或反馈接入。例如,K1的输出接到L2的输入,L2的输出再接其他设备属于串联接线。K1的输出接到L2的输出,同时K1的输入接到L2的输入,这种情况属于并联。K1的输出接到L2的输入,K1的输入接到L2的输出,属于反馈接线。
3、控制设备调节信息

开关调节信息格式:

+设备标识K+设备编号,例如:#K2,代表切换K2开关的状态。

分档调速器的调节信息格式:

+设备标识F+设备编号+"+" 代表加一档,例如:#F3+,代表F3输出加一档。

+设备标识F+设备编号+"-" 代表减一档,例如:#F1-,代表F1输出减一档。

连续调速器的调节信息格式:

+设备标识L+设备编号+":" +数值 代表将连续调速器的档位设置到对应数值,例如:#L3:0.6,代表L3输出档位参数0.6。

4、电源接地标识:VCC,电压220V,GND,电压0V。没有接线的引脚默认接地,电压为0V。

输入信息以end为结束标志,忽略end之后的输入信息。

输出信息:

按开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇的顺序依次输出所有设备的状态或参数。每个设备一行。同类设备按编号顺序从小到大输出。

输出格式:@设备标识+设备编号+":" +设备参数值(控制开关的档位或状态、灯的亮度、风扇的转速,只输出值,不输出单位)
连续调速器的档位信息保留两位小数,即使小数为0,依然显示两位小数.00。
开关状态为0(打开)时显示turned on,状态为1(合上)时显示closed
如:
@K1:turned on
@B1:190
@L1:0.60
本题不考虑输入电压或电压差超过220V的情况。

本题只考虑串联的形式,所以所有测试用例的所有连接信息都只包含两个引脚

本题电路中除了开关可能出现多个,其他电路设备均只出现一次。
电源VCC一定是第一个连接的第一项,接地GND一定是最后一个连接的后一项。

家居电路模拟系列所有题目的默认规则:

1、当计算电压值等数值的过程中,最终结果出现小数时,用截尾规则去掉小数部分,只保留整数部分。为避免精度的误差,所有有可能出现小数的数值用double类型保存并计算,不要作下转型数据类型转换,例如电压、转速、亮度等,只有在最后输出时再把计算结果按截尾规则,舍弃尾数,保留整数输出。

2、所有连接信息按电路从电源到接地的顺序依次输入,不会出现错位的情况。

3、连接信息如果只包含两个引脚,靠电源端的引脚在前,靠接地端的在后。

4、对于调速器,其输入端只会直连VCC,不会接其他设备。整个电路中最多只有一个调速器,且连接在电源上。

家居电路模拟系列1-4题目后续迭代设计:

1、电路结构变化:

迭代1:只有一条线路,所有元件串联
迭代2:线路中包含一个并联电路
迭代3:线路中包含多个串联起来的并联电路
迭代4:并联电路之间可能出现包含关系

电路结构变化示意图见图1。

2、输入信息的变化

串联线路信息:用于记录一段串联电路的元件与连接信息。

例如: #T1:[IN K1-1] [K1-2 D2-1] [D2-2 OUT]
#T1:[IN K1-1] [K1-2 M1-IN][M1-OUT D2-1] [D2-2 GND]
并联线路信息:用于记录一段并联电路所包含的所有串联电路信息。

例如:#M1:[T1 T2 T3]
以上格式仅做参考,格式细节可能会调整,以具体发布的为准。

3、计算方式的变化

迭代1只包含1个受控元件,不用计算电流,之后的电路计算要包含电流、电阻等电路参数。

4、电路元件的变化

每次迭代会增加1-2个新的电路元件。

图1:电路结构示意图

设计建议:

1、电路设备类:描述所有电路设备的公共特征。

2、受控设备类、控制设备类:对应受控、控制设备

3、串联电路类:一条由多个电路设备构成的串联电路,也看成是一个独立的电路设备

其他类以及类的属性、方法自行设计。

思路解析

如何呢,这题目长的我看都看不懂这就是为啥我做了几天一分都没有的原因,那么根据题目,首先取电路连接信息完成处理和存储
,然后再完成线路连接(将元件添加至串并联线路中),对所有开关进行判断,判断串并联连通性,计算串并联对象的总电阻,逐层分压,计算工作状态,最后排序并输出,思路就是这样简单,但前提是要看得懂题目才行

三.总结

其实这一次的pta大作业除开难题以外,都是一些比较基础的题目,但是对于难题,很考验学生的心态和专注度,这一次的难题都有一个特点,就是题目很长,其次包容的其他知识很多,比如电路的串联并联,都是对学生综合能力的考验,其次题目文字量大,题目长,也是对学生心态的考验,学生是否有耐心将题目逐字逐句地分析,将题目的信息化成类图方便写程序......这些说到底都不单单是对学生程序设计能力的考察,也是对学生综合素质能力的测验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/721879.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1_关于BeanFactory与ApplicationContext的联系和区别

BeanFactory与ApplicationContext 1. 容器和接口 1.1 BeanFactory与ApplicationContext的联系与区别: ConfigurableApplicationContext 是 ApplicationContext的子接口,而ApplicationContext接口又是 BeanFactory 的子接口。因此ConfigurableApplicationContext 接口简介继承…

回溯法求解TSP问题

1.readme 1>python 2>代码基于具体的实例,如有需要可自行修改问题规模为n,不再赘述 2.code 代价矩阵 999表示无穷 arc = [[999, 3, 6, 7], [5, 999, 2, 3], [6, 4, 999, 2], [3, 7, 5, 999]] city 存放除出发点0外的城市 city = [3, 2, 1] 访问标志数组 0-未访问 1-已访…

OpenGL:混合

OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明就是说一个物体(或者其中的一部分)不是纯色(Solid Color)的,它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个有色玻璃窗是一个透明的物体,玻璃有它自己的颜色,但它最终的…

下水道拾的沟槽的文章

wow天色将晚,在我看着你的眼里色彩斑斓 五月的气候合往年一样闷热,二中的晚自习太静,于是闲下来了,止不住地去向,好像又来一轮毕业的时候。小学时,谈起毕业总是很害怕的,那时觉得毕业时候一定是要大哭一场,不然就算不上毕业结果那天也如同流水一般平淡地过去了,正如过…

P3756 [CQOI2017] 老C的方块 解题报告

P3756 [CQOI2017] 老C的方块 解题报告oj:https://gxyzoj.com/d/gxyznoi/p/P266 又是网格题,考虑染色:显然可以发现,每一个不合法的图形都可以被染成黄->蓝->特殊边->绿->红,且旋转后同样满足条件 推广到整个棋盘就是:所以是否可以将颜色编号,然后按照上述方法…

[stars-one] 星念轻小说下载器

原文地址: [stars-one] 星念轻小说下载器-Stars-One的杂货小窝 一款将在线轻小说保存到本地的下载工具 软件介绍小说单卷下载 小说全卷下载(需VIP) 多线程解析和下载 下载导出为epub文件 自动更新软件使用前需要进行用户登录(邮箱注册) 采用会员订阅制,PC版和Android版共用账号…

裁剪序列Cut the Sequence

首先,我们可以先想一想朴素算法,推出DP,i表示分了几段,则可以推出$$F[i]=min_{1<=j<=i}(f[j]+max_{j+1<=k<=i}(a[k]))$$点击查看代码memset(f,0x3f,sizeof f);f[0]=0;for(int i=1;i<=n;i++){for(int j=0;j<i;j++){int tmp=0;ll sum=0;for(int k=j+1;k<…

vits-simple-api搭建

根据vits-simple-api中文文档指南自行搭建后端 以下步骤均在windows平台cpu推理搭建为例选择你的vits模型(注意是vits!不是So-Vits Bert Vits2 Gpt Vits)建议去抱脸网搜索或者b站搜素以及自己训练.在vits-simple-api的路径的model目录下新建你下载模型的名字的文件夹将模型的js…

bili-emoji自定义表情包设置

使用图床上传图片.推荐使用聚合图床,简单免费 把图片的图床链接复制到一个txt文件中,如abc.txt 将abc.txt放到koishi目录的非node_modules\koishi-plugin-emojihub-bili文件夹中,如koishi\lumia\abc.txt 在插件界面填写要触发的命令以及路径如下图所示5.使用如下图所示

关于LTspice如何导入第三方的.lib文件进行仿真

转载自:https://bbs.eeworld.com.cn/thread-1265324-1-1.html 1.在芯片官网找到对应的PSPICE模型下载后,将.lib文件移入到路径下的sub文件夹中。(例如C:\Users\\username\Documents\LTspiceXVII\lib\sub) 2.将.lib文件拖入LTspice后右键单击.subckt后的芯片名称,选择Creat S…

OOP题目集4~6的总结

目录(一)前言 (二)作业介绍 (三)算法与代码 (四)PowerDesigner类图模型 (五)SourceMonitor代码分析 (六)自学内容 (七)总结一、前言介绍本篇博客的大致内容、写作目的、意义等本篇博客介绍如何使用Java语言基础和算法来解决题目问题,在此基础上进行对最近Java编…

前端使用 Konva 实现可视化设计器(13)- 折线 - 最优路径应用【思路篇】

这一章把直线连接改为折线连接,沿用原来连接点的关系信息。关于折线的计算,使用的是开源的 AStar 算法进行路径规划,启发方式为 曼哈顿距离,且不允许对角线移动。请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Issue 哟~ github源码 gitee源码 示…