outside_的第三次博客作业
outside_的第三次博客作业
--Wenxiaowenyy
前言:
这次博客是本学期的最后一次博客,也是大一的最后篇博客,回顾这学期学习java的热情以及完成大作业的积极性比起学c语言的时候减少了许多,原因有很多,其一是自己变懒惰了,其二是这学期的java比起上学期的c语言的确难度增加了许多,不过世上没有后悔药吃,感觉都是自己作的,希望暑期的实训和下学期能够更加勤奋,更加努力,不要荒废自己,不要天天待在寝室里。好了,接下来就是对这学期最后两次大作业进行分析啦!
内容包含:
1.总结PTA大作业前三次题目集的知识点,题量,难度等
2.对题目提交的源码进行分析
3.仔细回忆自己做题时所踩的坑,总结反思,避免下次再犯
4.改进建议
5.个人总结、个人反思
题目集7
题目集7是上次博客中提到的题目集6的迭代,相比上次题目集6,这次增加了互斥开关,以及另一个电器窗帘,此次的窗帘与电灯的亮度有关联,所以输出数据的判定会与之前的用电器不同,类之间的联系也会更加紧密,难度较难,因为对于互斥开关的处理是个棘手的问题。考察的知识点有正则表达式,字符串一系列的处理操作、电器的继承、父类方法的重写以及正则表达式对输入的处理,正则表达式一如既往的还是所考察的知识点。
该题的难点有三个,其一是对于电阻的计算,因为加入互斥开关的话,要考虑总电阻的变化和哪个线路是通路,再进行计算电阻。其二是对于互斥开关的开关接在哪里的问题,它有两个接口,要如何判定互斥开关接在哪个接口上是个重要的问题。其三是灯的亮度与窗帘的开合百分比的处理,要根据灯泡的总亮度来控制窗帘开合百分比。
下面是本次迭代增加的窗帘和互斥开关的部分代码:
窗帘类:
点击查看代码
class Curtain extends Device {
private double rate=100;
public Curtain(String type,String num,int p1,int p2,int R)
{
super(type,num,p1,p2,R);
}
public void setV(int v1,int v2)
{
super.setV(v1,v2);
}
public double getRate(double bright)
{
if(super.getR()*super.getI()<50)
this.rate=100;
else
{
if(bright<50)
this.rate=100;
else if(bright>=50&&bright<100)
this.rate=80;
else if(bright>=100&&bright<200)
this.rate=60;
else if(bright>=200&&bright<300)
this.rate=40;
else if(bright>=300&&bright<400)
this.rate=20;
else
this.rate=0;
}
return this.rate;
}
public void show(double bright)
{
if(super.getR()*super.getI()<50)
this.rate=100;
else
{
if(bright<50)
this.rate=100;
else if(bright>=50&&bright<100)
this.rate=80;
else if(bright>=100&&bright<200)
this.rate=60;
else if(bright>=200&&bright<300)
this.rate=40;
else if(bright>=300&&bright<400)
this.rate=20;
else
this.rate=0;
}
System.out.println(String.format("@S%s:%.0f%%",super.getNum(),this.rate));
}
}
互斥开关:
点击查看代码
class Mutex extends Device {
private int state = 1;
Mutex(String type,String num,int p1,int p2,int R) {
super(type, num, p1, p2, R);
}
public void setV(int v1,int v2)
{
super.setV(v1,v2);
}
@Override
public void change(double a)
{
if(this.state==1)
this.state=0;
else
this.state=1;
}
public int getState()
{
return this.state;
}
@Override
public void show(double I)
{
if(this.state==1)
System.out.println("@H"+super.getNum()+":closed");
// else
// System.out.println("@H"+super.getNum()+":turned on");
}
public double getR()
{
return super.getR();
}
public void changeR(double R)
{
super.changeR(R);
}
}
圈复杂度:

类图:

该题我遇到的问题:
1.互斥开关的处理 解决方案:将互斥开关拆分成为两个单独的开关处理
2.窗帘闭合度的计算 解决方案:多次测试,找出出错原因
题目集8:
题目集8是电器迭代的最后一次了,这次增加了二极管以及短路情况,还有就是输出也改了,需要使用到引脚了,前几次我都没使用到引脚,这次输出就得输出各个引脚的电压,同时也增加了电路复杂程度,难度的话可以说算是最难的一次了,毕竟是最后一次了,并且我也只拿了一点点分😂。考察的知识点有正则表达式,字符串一系列的处理操作、电器的继承、父类方法的重写以及正则表达式对输入的处理。
该题的难点有很多,一是对于新加入的电路元件二极管,如何对其导度进行判断,二是电流的计算,如何计算整体电流来判断电流是否使用电器发热过高,三是各个引脚的电压,对于各个引脚的电压计算也是一个难点,要判断这是属于用电器的哪个引脚,还要计算电压,四是对于电路情况的分析,此次的电路情况十分复杂,所以对于各个电路的处理至关重要,影响到电压和电流。
下面是新增用电器二极管的代码:
点击查看代码
public class Diode {
private String name; // 二极管的名称
private boolean isForward; // 是否正向接入
private double voltage; // 二极管的电压
private final double MAX_CURRENT = 8; // 二极管的最大电流
public Diode(String name) {
this.name = name;
this.isForward = false; // 默认为反向接入
this.voltage = 0; // 默认电压为0V
}
// 设置二极管为正向接入
public void setForward() {
this.isForward = true;
}
// 设置二极管为反向接入
public void setReverse() {
this.isForward = false;
}
// 设置二极管的电压
public void setVoltage(double voltage) {
this.voltage = voltage;
}
// 获取二极管的电压
public double getVoltage() {
return this.voltage;
}
// 计算二极管的电流
public double getCurrent() {
if (isForward) {
// 正向接入时,电阻为0,电流由外部电路决定
return voltage / 0; // 实际上这里会得到无穷大的电流,需要外部电路限制
} else {
// 反向接入时,视为断路,电流为0
return 0;
}
}
// 检查电流是否超过最大限制
private boolean isCurrentLimited() {
double current = getCurrent();
return current > MAX_CURRENT;
}
// 输出二极管的模拟结果
public String getOutput() {
if (isForward) {
return "@" + name + ":conduction " + voltage + "-0";
} else {
return "@" + name + ":cutoff " + voltage + "-0";
}
}
// 模拟二极管的工作,返回输出结果和是否超过电流限制
public String simulate() {
String output = getOutput();
if (isCurrentLimited()) {
output += " exceeding current limit error";
}
return output;
}
}
圈复杂度:

该题我遇到的问题:
1.二极管的处理 解决方案:仔细审题,分析二极管
2.电流的计算 解决方案:多次根据测试样例,看计算的电流是否正确
3.引脚电压的计算 解决方案:优化各类中的引脚方法以及数据
个人总结与反思:
1.要加强类的设计以及类与类之间关系的设计
2.要培养自己的耐心
3.要培养自己根据题目意思来想测试用例的能力
最后,希望自己下个学期能够更加努力,同时也希望下个学期的难度稍微大一点,更能磨练自己。

浙公网安备 33010602011771号