【1】.前言
这三次的pta难度还是比较高的,尤其是第四次的(根本没有思绪),考察了较多的正则表达式的使用,以及对类的设计有一些要求,第五次的pta难度一般,主要考察的是类的书写,并不需要太多关于类的设计,第六次的pta是在第五次的基础上进行迭代,增加了并联电路,难度还是有的。
【2】.设计与分析
第四次pta:
以上就是第四次pta的报表内容以及类图
可以看到类图非常的复杂,涉及了非常多的类,但却没有保证类的单一职责性,导致后期的检查过程和调试过程异常困难。类的设计一言难尽(八大设计原则都不符合)
以上就是第五次的pta的报表内容以及类图
可以看到类图也非常的复杂(但总归是满足了单一职责原则)
以上就是第六次的pta的报表内容以及类图
【3】.采坑心得
(1).Set
for(String key11:key1) {
Set
for(String keypaper1:keypaper) {
int num=0;
if(s.getAllanswer().get(key11).getCodeS().equals(p.getAllpaper().get(keypaper1).getCodeP())) {
printmess1(s.getAllanswer().get(key11).getCodeS());//把匹配上的试卷编号传过去
break;
}
num++;
if(num==p.getNumOfpaper()) {
System.out.println("The test paper number does not exist");
//System.out.println(s.getAllanswer().get(key11).getSignid()+" "+x.getAllstudent().get(s.getAllanswer().get(key11).getSignid()).getName()+" "+":"+"0");
}
}
}
}
例如该foreach遍历时,如果用get获取时会为null。
(2).private String[]match=new String[50];
在用数组作为类的属性的时候,需要new一下,不然会让属性值为null。
(3).在写第五次pta时:
白炽灯:
亮度在0~200lux(流明)之间。
电位差为0-9V时亮度为0,其他电位差按比例,电位差10V对应50ux,220V对应200lux,其他电位差与对应亮度值成正比。白炽灯超过220V。
这是题目要求,在计算亮度时会涉及到小数的计算,结果会*7/5,但算出的结果总是为0,应该采用7.0/5.0计算,不然不会保留小数部分。
(4).
家居电路模拟系列所有题目的默认规则:
1、当计算电压值等数值的过程中,最终结果出现小数时,用截尾规则去掉小数部分,只保留整数部分。为避免精度的误差,所有有可能出现小数的数值用double类型保存并计算,不要作下转型数据类型转换,例如电压、转速、亮度等,只有在最后输出时再把计算结果按截尾规则,舍弃尾数,保留整数输出。
2、所有连接信息按电路从电源到接地的顺序依次输入,不会出现错位的情况。
3、连接信息如果只包含两个引脚,靠电源端的引脚在前,靠接地端的在后。
4、对于调速器,其输入端只会直连VCC,不会接其他设备。整个电路中最多只有一个调速器,且连接在电源上。
其中第一点,在最后保留时会使保留精度出现误差,应该用强制转换直接变为(int)型。
(5).在第六次pta中,涉及了电阻,按道理来说应该计算电流,但最后计算电流会出现一些误差,应该用分压来计算最后的结果。
(6).import java.util.;
import java.util.regex.;
class Equipment{
private int node;
public Equipment() {}
public int getNode() {
return node;
}
public void setNode(int node) {
this.node = node;
}
public Equipment(int node) {
super();
this.node = node;
}
}
class Switch extends Equipment implements Comparable
private int state=0;
public void change() {
if(this.state0) {
this.state=1;
}
else {
this.state=0;
}
}
public Switch(int node) {
super(node);
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
@Override
public int compareTo(Switch ss) {
return Integer.compare(super.getNode(),ss.getNode());
}
}
class Fswitch extends Equipment{
private int lever=0;
private double output=0;
public Fswitch(int node) {
super(node);
}
public int getLever() {
return lever;
}
public void setLever(int lever) {
this.lever = lever;
}
public void setOutput(double output) {
this.output = output;
}
public void up(){
if(this.lever0||this.lever1||this.lever2) {
this.lever++;
}
else {
return;
}
}
public void down() {
if(this.lever1||this.lever2||this.lever==3) {
this.lever--;
}
else {
return;
}
}
public void ele(){
this.output=0.3this.lever220;
}
public double getOutput() {
return output;
}
}
class Lswitch extends Equipment{
private double lever=0;
private double output=0;
public Lswitch(int node) {
super(node);
}
public double getLever() {
return lever;
}
public void setLever(double lever) {
this.lever = lever;
}
public double getOutput() {
return output;
}
public void ele() {
this.output=220*this.lever;
}
}
class Blamp extends Equipment{
private double light;
public Blamp(int node) {
super(node);
}
public double getLight() {
return light;
}
public void eleLight(double v) {
if(v>0&&v<=9) {
this.light=0;
}
else if(v>=9&&v<=10) {
this.light=50(v-9);
}
else if(v>10&&v<=220) {
this.light=(v-10)(5.0/7.0)+50;
}
}
}
class Rlamp extends Equipment{
private double light;
public Rlamp(int node) {
super(node);
}
public double getLight() {
return light;
}
public void eleLight(double v) {
if(v==0) {
this.light=0;
}
else {
this.light=180;
}
}
}
class Fan extends Equipment{
private double roll;
public double getRoll() {
return roll;
}
public void setRoll(double roll) {
this.roll = roll;
}
public Fan(int node) {
super(node);
}
public void eleroll(double v) {
if(v<80){
this.roll=0;
}
else if(v>=80&&v<=150){
this.roll=(v-80)*4+80;
}
else if(v>150) {
this.roll=360;
}
}
}
public class Main {
public static void main(String[] args) {
ArrayList
Fswitch F1=null;
Lswitch L1=null;
Blamp B1=null;
Rlamp R1=null;
Fan fan1=null;
//ArrayList
Scanner input=new Scanner(System.in);
while(input.hasNext()) {
String s=input.nextLine();
if(s.equals("end")) {
break;
}
else {
if(s.startsWith("[")) {
String regex="[K|F|L|B|R|D]\d-1";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
char first=matcher.group().charAt(0);
if(first'K') {
Switch stem=new Switch((int)(matcher.group().charAt(1))-48);
alls.add(stem);
}
else if(first'F') {
Fswitch stem=new Fswitch((int)(matcher.group().charAt(1))-48);
F1=stem;
}
else if(first'L') {
Lswitch stem=new Lswitch((int)(matcher.group().charAt(1))-48);
L1=stem;
}
else if(first'B') {
Blamp stem=new Blamp((int)(matcher.group().charAt(1))-48);
B1=stem;
}
else if(first'R') {
Rlamp stem=new Rlamp((int)(matcher.group().charAt(1))-48);
R1=stem;
}
else if(first'D') {
Fan stem=new Fan((int)(matcher.group().charAt(1))-48);
fan1=stem;
}
}
}
else if(s.startsWith("#")) {
if(s.contains("K")) {
int num=(int)(s.charAt(2))-48;
for(Switch tem:alls) {
if(tem.getNode()num) {
tem.change();
}
}
}
else if(s.contains("F")) {
if(s.contains("-")) {
F1.down();
}
else if(s.contains("+")) {
F1.up();
}
}
else if(s.contains("L")) {
String regex="[0-9]+\.?[0-9]*";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
double lever= Double.parseDouble(matcher.group());
L1.setLever(lever);
}
}
}
}
}
Collections.sort(alls);
boolean ele=true;
for(Switch s:alls) {
System.out.print("@K"+s.getNode()+"