OOP 4-6次作业总结
23201636-曾繁榕
目录
- 前言
- 设计与分析
- 踩坑心得
- 改进建议
- 总结
前言
本次作业知识点:类与对象的复杂使用,继承的进阶使用,各种接口的实现,还主要考察了正则表达式的运用,字符串的提取分割;
个人体会:本次作业难度适中,题量适中,但有些比较复杂的类设计上容易出现错误;第六次作业未给出测试点,自行测试使作业难度增加,测试时间增多
大题源码
第四次作业
答题判题程序-4
import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.ArrayList;
class Question{
String num;
String question;
String answer;
String ans[];
boolean isDelete=false;
Question(){
}
Question(String num,String question,String answer){
this.num = num;
this.question = question;
this.answer = answer;
}
public void add(String an){
if(ans==null)
{
String a[] = new String[1];
a[0] = an;
ans = a;
}
else{
String a[] = new String[ans.length+1];
for(int i=0;i<ans.length;i++)
{
a[i]=ans[i];
}
a[ans.length] = an;
ans = a;
}
}
public String toString(){
return question;
}
}
class Kquestion extends Question{
Kquestion(String num,String question,String answer){
super(num,question,answer);
}
}
class Zquestion extends Question{
String ans[];
Zquestion(String num,String question,String answer){
super(num,question,answer);
}
// public void add(String an){
// if(ans==null)
// {
// String a[] = new String[1];
// a[0] = an;
// ans = a;
// }
// else{
// String a[] = new String[ans.length+1];
// for(int i=0;i<ans.length;i++)
// {
// a[i]=ans[i];
// }
// a[ans.length] = an;
// ans = a;
// }
// }
}
class Test{
String tnum;
String qnum[];
int score[];
Test(String tnum){
this.tnum=tnum;
}
public void add(String num,int s){
if(qnum==null&&score==null)
{
String a[] = new String[1];
int t[] = new int[1];
a[0] = num;
t[0] = s;
qnum = a;
score = t;
}
else{
String a[] = new String[qnum.length+1];
for(int i=0;i<qnum.length;i++)
{
a[i]=qnum[i];
}
a[qnum.length] = num;
qnum = a;
int t[] = new int[score.length+1];
for(int i=0;i<score.length;i++)
{
t[i]=score[i];
}
t[score.length] = s;
score = t;
}
}
}
class StuTest{
String st;
String snum;
String stuid;
int anum[];
String answer[];
StuTest(){
}
StuTest(String st,String snum,String stuid){
this.st = st;
this.snum = snum;
this.stuid = stuid;
}
public void addanswer(int anumber,String ans){
if(anum==null&&answer==null)
{
int num[] = new int[1];
String a[] = new String[1];
num[0] = anumber;
a[0] = ans;
anum = num;
answer = a;
}
else{
int num[] = new int[anum.length+1];
String a[] = new String[answer.length+1];
for(int i=0;i<anum.length;i++)
num[i] = anum[i];
for(int i=0;i<answer.length;i++)
{
a[i]=answer[i];
}
num[anum.length] = anumber;
a[answer.length] = ans;
anum = num;
answer = a;
}
}
}
class Student{
String stuID;
String sname;
Student(String stuID,String sname){
this.stuID = stuID;
this.sname = sname;
}
public String toString(){
return stuID+" "+sname+": ";
}
}
class Delete{
String dnum;
Delete(String dnum){
this.dnum = dnum;
}
}
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num1=0,num2=0,num3=0,num4=0,num5=0;
Question q[] = new Question[10];
// Zquestion z[] = new Zquestion[10];
Test t[] = new Test[5];
StuTest stu[] = new StuTest[5];
Student st[] = new Student[5];
Delete d[] = new Delete[5];
String s = sc.nextLine();
String regex = "#N:\\s*(\\d*)\\s+#Q:(.*?)\\s+#A:(.*)";
String regex1 = "#T:\\s*(\\d*)\\s*(\\d+-\\d+\\s*)*";
String regex2 = "#S:\\s*(\\d*)\\s*(\\d*)\\s*(#A:(\\s*\\d+-.*\\s*)*\\s*)*";
String regex3 = "#X:\\s*(\\d*)\\s*(.*?)";
String regex4 = "#D:\\s*N-(\\d+\\s*)";
String regex5 = "#Z:\\s*(\\d*)\\s+#Q:(.*?)\\s+#A:(.*)";
String regex6 = "#K:\\s*(\\d*)\\s+#Q:(.*?)\\s+#A:(.*)";
Pattern pattern = Pattern.compile(regex);
Pattern pattern1 = Pattern.compile(regex5);
Pattern pattern2 = Pattern.compile(regex6);
while(true){
if(s.equals("end"))
break;
if(Pattern.matches(regex,s))
{
Matcher m = pattern.matcher(s);
if(m.find())
{
q[num1] = new Question(m.group(1).trim(),m.group(2).trim(),m.group(3).trim()+"");
}
// System.out.println(q[num1].toString());
num1++;
}
else if(Pattern.matches(regex5,s)){
Matcher m = pattern1.matcher(s);
if(m.find())
{
q[num1] = new Zquestion(m.group(1).trim(),m.group(2).trim(),m.group(3).trim());
String S = m.group(3).trim();
String Str[] = S.split(" ");
for(int i=0;i<Str.length;i++)
{
q[num1].add(Str[i]);
}
}
num1++;
}
else if(Pattern.matches(regex6,s)){
Matcher m = pattern2.matcher(s);
if(m.find())
{
// System.out.println(m.group(1).trim()+m.group(2).trim());
q[num1] = new Kquestion(m.group(1).trim(),m.group(2).trim(),m.group(3).trim()+"");
}
num1++;
}
else if(Pattern.matches(regex1,s))
{
String str[] = s.split(" ");
String ss = str[0].replace("#T:","");
// System.out.println(ss);
t[num2] = new Test(ss);
if(str.length>1){
for(int i=1;i<str.length;i++)
{
String str1[] = str[i].split("-");
int x = Integer.parseInt(str1[1]);
t[num2].add(str1[0],x);
}
}
num2++;
}
else if(Pattern.matches(regex2,s))
{
String str[] = s.split("#");
// System.out.println(str.length);
String ss = str[1].replace("S:","");
String ss1[] = ss.split(" ");
stu[num3] = new StuTest(ss,ss1[0],ss1[1]);
if(str.length>2){
String sstr[] = new String[str.length-2];
for(int i=0;i<sstr.length;i++)
{
sstr[i] = str[i+2].trim();
}
// Arrays.sort(sstr);
for(int i=0;i<sstr.length;i++)
{
String sss = sstr[i].replace("A:","");
if(!sss.equals("")){
String str1[] = sss.split("-");
if(str1.length==1){
int x = Integer.parseInt(str1[0]);
stu[num3].addanswer(x,"");
}
else if(str1.length==2){
int x = Integer.parseInt(str1[0]);
stu[num3].addanswer(x,str1[1]);
}
}
}
}
num3++;
}
else if(Pattern.matches(regex3,s))
{
String str[] = s.replace("#X:","").split("-");
for(int i=0;i<str.length;i++){
String str1[] = str[i].split(" ");
st[num4] = new Student(str1[0],str1[1]);
num4++;
}
}
else if(Pattern.matches(regex4,s))
{
String str = s.replace("#D:N-","");
d[num5] = new Delete(str);
num5++;
}
else
System.out.println("wrong format:"+s);
s = sc.nextLine();
}
// Arrays.sort(sr);
for(int i=0;i<num3;i++)
{
for(int j=0;j<num3-i-1;j++)
{
if(stu[j].stuid.compareTo(stu[j+1].stuid)>0)
{
StuTest te;
te = stu[j];
stu[j] = stu[j+1];
stu[j+1] = te;
}
}
}
for(int i=0;i<num2;i++)
{
for(int j=0;j<num2-i-1;j++)
{
if(stu[j].snum.compareTo(stu[j+1].snum)>=0)
{
StuTest te;
te = stu[j];
stu[j] = stu[j+1];
stu[j+1] = te;
}
}
}
for(int i=0;i<num1;i++)
{
for(int j=0;j<num5;j++)
{
if(q[i].num.equals(d[j].dnum))
q[i].isDelete = true;
}
}
for(int i=0;i<num2;i++)
{
int sum = 0;
for(int j=0;j<t[i].score.length;j++)
{
sum = sum + t[i].score[j];
}
if(sum!=100)
System.out.println("alert: full score of test paper"+t[i].tnum+" is not 100 points");
}
for(int i=0;i<num3;i++)
{
int index = -1;
int sum = 0;
for(int j=0;j<num2;j++)
{
if(stu[i].snum.equals(t[j].tnum))
index = j;
}
int l = 0;
if(stu[i].answer!=null){
l = stu[i].answer.length;
}
if(index==-1)
{
System.out.println("The test paper number does not exist");
}
else
{
int x = 0,y = 0;
for(int m=0;m<t[index].score.length;m++)
{
boolean f = true;
for(int j=0;j<l;j++)
{
if(m+1==stu[i].anum[j]){
f = false;
if(j<t[index].score.length){
for(int k=0;k<num1;k++)
{
boolean b = false;
if(t[index].qnum[m].equals(q[k].num)&&!q[k].isDelete)
{
if(q[k] instanceof Zquestion){
String ss[] = stu[i].answer[j].split(" ");
Arrays.sort(ss);
Arrays.sort(q[k].ans);
List listA = Arrays.asList(ss);
List listB = Arrays.asList(q[k].ans);
if(Arrays.equals(q[k].ans,ss))
System.out.println(q[k].question+"~"+stu[i].answer[j]+"~"+"true");
else if(listB.containsAll(listA))
System.out.println(q[k].question+"~"+stu[i].answer[j]+"~"+"partially correct");
else
System.out.println(q[k].question+"~"+stu[i].answer[j]+"~"+false);
if(Arrays.equals(q[k].ans,ss))
{
sum = sum + t[index].score[m];
}
else if(listB.containsAll(listA)){
sum = sum + t[index].score[m]/2;
}
}
else{
if(q[k].answer.equals(stu[i].answer[j]))
{
b = true;
System.out.println(q[k].question+"~"+stu[i].answer[j]+"~"+b);
}
else if(q[k].answer.contains(stu[i].answer[j]))
System.out.println(q[k].question+"~"+stu[i].answer[j]+"~"+"partially correct");
else
System.out.println(q[k].question+"~"+stu[i].answer[j]+"~"+b);
if(b)
{
sum = sum + t[index].score[m];
}
else if(q[k].answer.contains(stu[i].answer[j])){
sum = sum + t[index].score[m]/2;
}
}
}
}
break;
}
}
}
if(f)
System.out.println("answer is null");
}
for(int j=0;j<t[index].qnum.length-l-1;j++)
System.out.println("answer is null");
for(int j=0;j<t[index].qnum.length;j++)
{
boolean c = true;
for(int k=0;k<num1;k++)
{
if(q[k].num.equals(t[index].qnum[j]))
c = false;
}
if(c)
{
x++;
}
}
if(x!=0&&l>0)
System.out.println("non-existent question~0");
for(int j=0;j<l;j++)
{
if(j<t[index].score.length){
for(int k=0;k<num1;k++)
{
boolean b = false;
if(t[index].qnum[j].equals(q[k].num)&&q[k].isDelete)
{
System.out.println("the question "+q[k].num+" invalid~0");
}
}
}
}
// for(int j=0;j<t[index].qnum.length-l;j++)
// {
// System.out.println("answer is null");
// y++;
// }
boolean found = false;
for(int j=0;j<num4;j++)
{
if(stu[i].stuid.equals(st[j].stuID))
{
System.out.print(st[j].toString());
found = true;
}
}
if(found){
for(int m=0;m<t[index].score.length;m++)
{
boolean f = true;
for(int j=0;j<l;j++)
{
if(m+1==stu[i].anum[j]){
f = false;
if(j<t[index].score.length){
for(int k=0;k<num1;k++)
{
boolean b = false;
if(t[index].qnum[m].equals(q[k].num))
{
if(q[k] instanceof Zquestion){
String ss[] = stu[i].answer[j].split(" ");
Arrays.sort(ss);
Arrays.sort(q[k].ans);
List listA = Arrays.asList(ss);
List listB = Arrays.asList(q[k].ans);
if(Arrays.equals(q[k].ans,ss)&&!q[k].isDelete)
{
if(m==t[index].qnum.length-1){
System.out.printf("%d",t[index].score[m]);
}
else{
System.out.printf("%d ",t[index].score[m]);
}
}
else if(listB.containsAll(listA)&&!q[k].isDelete){
if(m==t[index].qnum.length-1){
System.out.printf("%d",t[index].score[m]/2);
}
else{
System.out.printf("%d ",t[index].score[m]/2);
}
}
else{
if(x==0&&m==t[index].qnum.length-1){
System.out.printf("0");
// y++;
}
else{
System.out.printf("0 ");
// y++;
}
}
}
else{
if(q[k].answer.equals(stu[i].answer[j]))
b = true;
if(b&&!q[k].isDelete)
{
if(m==t[index].qnum.length-1){
System.out.printf("%d",t[index].score[m]);
}
else{
System.out.printf("%d ",t[index].score[m]);
}
}
else if(q[k].answer.contains(stu[i].answer[j])&&!q[k].isDelete){
if(m==t[index].qnum.length-1){
System.out.printf("%d",t[index].score[m]/2);
}
else{
System.out.printf("%d ",t[index].score[m]/2);
}
}
else{
if(x==0&&m==t[index].qnum.length-1){
System.out.printf("0");
// y++;
}
else{
System.out.printf("0 ");
// y++;
}
}
}
}
}
}
}
}
}
// System.out.println(x+" "+y+" "+l);
for(int j=0;j<y;j++)
{
if(x==0&&j==y-1)
System.out.printf("0");
else
System.out.printf("0 ");
}
if(l>0){
for(int j=0;j<x;j++)
{
if(j==x-1)
System.out.printf("0");
else
System.out.printf("0 ");
}
}
// for(int j=0;j<t[index].qnum.length-l;j++)
// {
// if(x==0&&j==t[index].qnum.length-l-1)
// System.out.printf("0");
// else
// System.out.printf("0 ");
// }
System.out.printf("~%d\n",sum);
}
else
System.out.printf(stu[i].stuid+" not found");
}
}
}
}
第五次作业
家具电路模拟程序-1
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Device {
protected String id;
protected int state;
double vt;
int gear;
double gea;
public Device(String id) {
this.id = id;
this.state = 0;
}
public void updateState(){
}
public String getStatus(){
return "";
}
}
class Switch extends Device {
public Switch(String id) {
super(id);
}
public void updateState() {
state = state == 0 ? 1 : 0;
}
public String getStatus() {
return state == 0 ? "turned on" : "closed";
}
}
class Fcontrol extends Device {
private final int maxGear;
public Fcontrol(String id, int maxGear) {
super(id);
this.maxGear = maxGear;
}
public void updateState() {
if(gear<maxGear&&state==1)
gear++;
else if(gear>0&&state==0)
gear--;
}
public String getStatus() {
return String.valueOf(gear);
}
}
class Lcontrol extends Device {
private double gear;
public Lcontrol(String id) {
super(id);
}
public void updateState() {
gear = gea;
}
public String getStatus() {
return String.format("%.2f", gear);
}
}
class Blight extends Device {
private int brightness;
public Blight(String id) {
super(id);
}
public void updateState() {
if(vt<10)
this.brightness = 0;
else if(vt<220)
this.brightness = 50 + (int) (5.0/7.0*(vt-10));
else if(vt>=220)
this.brightness = 200;
}
public String getStatus() {
return String.valueOf(brightness);
}
}
class Light extends Device {
private int brightness;
public Light(String id) {
super(id);
}
public void updateState() {
if(vt==0)
this.brightness = 0;
else
this.brightness = 180;
}
public String getStatus() {
return String.valueOf(brightness);
}
}
class Fan extends Device {
int speed;
public Fan(String id) {
super(id);
}
public void updateState() {
if(vt<80)
this.speed = 0;
else if(vt<150)
this.speed = 80 + (int) (4*(vt-80));
else if(vt>=150)
this.speed = 360;
}
public String getStatus() {
return String.valueOf(speed);
}
}
class Circuit {
List<Device> devices; // 存储电路中的设备
public Circuit() {
devices = new ArrayList<>();
}
public void add(Device device) {
devices.add(device);
}
public void updateState(String control) {
}
public String getStatus() {
StringBuilder sb = new StringBuilder();
int sum = 0;
for (Device device : devices) {
if(device instanceof Switch||device instanceof Fcontrol||device instanceof Lcontrol){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Fan||device instanceof Blight||device instanceof Light){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
}
}
return sb.toString();
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Circuit circuit = new Circuit();
String regex = "K\\d+-\\d+";
String regex1 = "F\\d+-\\d+";
String regex2 = "L\\d+-\\d+";
String regex3 = "B\\d+-\\d+";
String regex4 = "R\\d+-\\d+";
String regex5 = "D\\d+-\\d+";
String regex6 = "#K\\d+";
String regex7 = "#F\\d+\\+";
String regex8 = "#F\\d+-";
String regex9 = "#L\\d+:.+";
while (sc.hasNext()) {
String s = sc.nextLine();
if (s.equals("end")) {
break;
}
s = s.replace("[","");
s = s.replace("]","");
String str[] = s.split(" ");
if(str.length>1&&Pattern.matches(regex,str[1])){
String str1[] = str[1].split("-");
Switch k = new Switch(str1[0]);
circuit.add(k);
}
else if(str.length>1&&Pattern.matches(regex1,str[1])){
String str1[] = str[1].split("-");
Fcontrol f = new Fcontrol(str1[0],3);
circuit.add(f);
}
else if(str.length>1&&Pattern.matches(regex2,str[1])){
String str1[] = str[1].split("-");
Lcontrol l = new Lcontrol(str1[0]);
circuit.add(l);
}
else if(str.length>1&&Pattern.matches(regex3,str[1])){
String str1[] = str[1].split("-");
Blight b = new Blight(str1[0]);
circuit.add(b);
}
else if(str.length>1&&Pattern.matches(regex4,str[1])){
String str1[] = str[1].split("-");
Light r = new Light(str1[0]);
circuit.add(r);
}
else if(str.length>1&&Pattern.matches(regex5,str[1])){
String str1[] = str[1].split("-");
Fan d = new Fan(str1[0]);
circuit.add(d);
}
else if(str.length==1&&Pattern.matches(regex6,str[0])){
String ss = str[0].replace("#","");
for(int i=0;i<circuit.devices.size();i++){
if(ss.equals(circuit.devices.get(i).id))
circuit.devices.get(i).updateState();
}
}
else if(str.length==1&&Pattern.matches(regex7,str[0])){
String ss = str[0].replace("#","");
ss = ss.replace("+","");
for(int i=0;i<circuit.devices.size();i++){
if(ss.equals(circuit.devices.get(i).id)){
circuit.devices.get(i).state = 1;
circuit.devices.get(i).updateState();
}
}
}
else if(str.length==1&&Pattern.matches(regex8,str[0])){
String ss = str[0].replace("#","");
ss = ss.replace("-","");
for(int i=0;i<circuit.devices.size();i++){
if(ss.equals(circuit.devices.get(i).id)){
circuit.devices.get(i).state = 0;
circuit.devices.get(i).updateState();
}
}
}
else if(str.length==1&&Pattern.matches(regex9,str[0])){
String ss[] = str[0].split(":");
double gear = Double.parseDouble(ss[1]);
String sss = ss[0].replace("#","");
for(int i=0;i<circuit.devices.size();i++){
if(sss.equals(circuit.devices.get(i).id)){
circuit.devices.get(i).gea = gear;
circuit.devices.get(i).updateState();
}
}
}
// 根据输入的控制信息更新电路状态
// 这里需要根据实际输入的控制信息来更新电路状态
}
double vt = 220;
for(int i=0;i<circuit.devices.size();i++){
if(circuit.devices.get(i) instanceof Fcontrol){
if(circuit.devices.get(i).gear==0)
vt = 0;
else if(circuit.devices.get(i).gear==1)
vt = (0.3 * vt);
else if(circuit.devices.get(i).gear==2)
vt = (0.6 * vt);
else if(circuit.devices.get(i).gear==3)
vt = (0.9 * vt);
}
else if(circuit.devices.get(i) instanceof Lcontrol){
vt = (circuit.devices.get(i).gea * vt);
}
else if(circuit.devices.get(i) instanceof Switch)
{
if(circuit.devices.get(i).state == 0)
vt = 0;
}
}
for(Device device : circuit.devices){
if(device instanceof Fan)
{
device.vt = vt;
device.updateState();
}
else if(device instanceof Blight)
{
device.vt = vt;
device.updateState();
}
else if(device instanceof Light)
{
device.vt = vt;
device.updateState();
}
}
System.out.println(circuit.getStatus());
}
}
第六次作业
家居电路模拟程序-2
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Collections;
import java.util.Comparator;
class Device{
protected String id;
protected int state;
double vt;
int gear;
double gea;
double r;
public Device(String id) {
this.id = id;
this.state = 0;
}
public void updateState(){
}
public String getStatus(){
return "";
}
}
class Switch extends Device {
public Switch(String id) {
super(id);
}
public void updateState() {
state = state == 0 ? 1 : 0;
}
public String getStatus() {
return state == 0 ? "turned on" : "closed";
}
}
class Fcontrol extends Device {
private final int maxGear;
public Fcontrol(String id, int maxGear) {
super(id);
this.maxGear = maxGear;
}
public void updateState() {
if(gear<maxGear&&state==1)
gear++;
else if(gear>0&&state==0)
gear--;
}
public String getStatus() {
return String.valueOf(gear);
}
}
class Lcontrol extends Device {
private double gear;
public Lcontrol(String id) {
super(id);
}
public void updateState() {
gear = gea;
}
public String getStatus() {
return String.format("%.2f", gear);
}
}
class Blight extends Device {
private int brightness;
public Blight(String id) {
super(id);
r = 10;
}
public void updateState() {
if(vt<10)
this.brightness = 0;
else if(vt<220)
this.brightness = 50 + (int) (5.0/7.0*(vt-10));
else if(vt>=220)
this.brightness = 200;
}
public String getStatus() {
return String.valueOf(brightness);
}
}
class Light extends Device {
private int brightness;
public Light(String id) {
super(id);
r = 5;
}
public void updateState() {
if(vt==0)
this.brightness = 0;
else
this.brightness = 180;
}
public String getStatus() {
return String.valueOf(brightness);
}
}
class Fan extends Device {
int speed;
public Fan(String id) {
super(id);
r = 20;
}
public void updateState() {
if(vt<80)
this.speed = 0;
else if(vt<150)
this.speed = 80 + (int) (4*(vt-80));
else if(vt>=150)
this.speed = 360;
}
public String getStatus() {
return String.valueOf(speed);
}
}
class Afan extends Device {
int speed;
public Afan(String id) {
super(id);
r = 20;
}
public void updateState() {
if(vt<80)
this.speed = 0;
else if(vt<100)
this.speed = 80;
else if(vt<120)
this.speed = 160;
else if(vt<140)
this.speed = 260;
else if(vt>=140)
this.speed = 360;
}
public String getStatus() {
return String.valueOf(speed);
}
}
class M {
double r;
List<T> ts;
public M() {
ts = new ArrayList<>();
}
public void add(T t) {
ts.add(t);
}
public void computeR(){
double sum = 0;
for(T t : ts){
// System.out.println(1.0/t.r);
if(t.isClosed()){
sum = sum + 1.0/t.r;
}
}
this.r = (1.0/sum);
}
}
class T {
double r;
String id;
List<M> ms;
List<Device> devices; // 存储电路中的设备
public T(String id) {
this.id = id;
devices = new ArrayList<>();
ms = new ArrayList<>();
}
public void add(Device device) {
devices.add(device);
}
public void addm(M m) {
ms.add(m);
}
public boolean isClosed(){
for (Device device : devices){
if(device instanceof Switch){
if(device.state==0)
return false;
}
}
return true;
}
public void computeR(){
for (Device device : devices){
this.r = this.r + device.r;
}
for (M m : ms)
this.r = this.r + m.r;
}
}
class Circuit {
List<Device> devices; // 存储电路中的设备
public Circuit() {
devices = new ArrayList<>();
}
public void add(Device device) {
devices.add(device);
}
public void updateState(String control) {
}
public String getStatus() {
StringBuilder sb = new StringBuilder();
int sum = 0;
devices.sort(new Comparator<Device>()
{
@Override
public int compare(Device d1,Device d2)
{
String id1 = d1.id;
String id2 = d2.id;
return id1.compareTo(id2);
}
});
for (Device device : devices) {
if(device instanceof Switch){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Fcontrol){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Lcontrol){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Blight){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Light){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Fan){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Afan){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
}
}
return sb.toString();
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Circuit circuit = new Circuit();
T t[] = new T[5];
M m = new M();
int tn = 0;
String regex = "K\\d+-\\d+";
String regex1 = "F\\d+-\\d+";
String regex2 = "L\\d+-\\d+";
String regex3 = "B\\d+-\\d+";
String regex4 = "R\\d+-\\d+";
String regex5 = "D\\d+-\\d+";
String regex6 = "#K\\d+";
String regex7 = "#F\\d+\\+";
String regex8 = "#F\\d+-";
String regex9 = "#L\\d+:.+";
String regex10 = "#T\\d+:.*";
String regex11 = "#M\\d+:.*";
String regex12 = "M\\d+-IN";
String regex13 = "A\\d+-\\d+";
Pattern pattern = Pattern.compile("\\[([^\\[\\]]|\\[.*?\\])*\\]");
while (sc.hasNext()) {
String s = sc.nextLine();
if(Pattern.matches(regex10,s))
{
String sstr[] = s.split(":");
String id = sstr[0].replace("#","");
t[tn] = new T(id);
Matcher matcher = pattern.matcher(s);
List<String> matchs = new ArrayList<>();
while (matcher.find()){
String match = matcher.group(0);
match = match.trim();
matchs.add(match);
}
for(String match : matchs)
{
// System.out.println(match);
s = match;
s = s.replace("[","");
s = s.replace("]","");
String str[] = s.split(" ");
if(str.length>1&&Pattern.matches(regex,str[1])){
String str1[] = str[1].split("-");
Switch k = new Switch(str1[0]);
circuit.add(k);
t[tn].add(k);
}
else if(str.length>1&&Pattern.matches(regex1,str[1])){
String str1[] = str[1].split("-");
Fcontrol f = new Fcontrol(str1[0],3);
circuit.add(f);
t[tn].add(f);
}
else if(str.length>1&&Pattern.matches(regex2,str[1])){
String str1[] = str[1].split("-");
Lcontrol l = new Lcontrol(str1[0]);
circuit.add(l);
t[tn].add(l);
}
else if(str.length>1&&Pattern.matches(regex3,str[1])){
String str1[] = str[1].split("-");
Blight b = new Blight(str1[0]);
circuit.add(b);
t[tn].add(b);
}
else if(str.length>1&&Pattern.matches(regex4,str[1])){
String str1[] = str[1].split("-");
Light r = new Light(str1[0]);
circuit.add(r);
t[tn].add(r);
}
else if(str.length>1&&Pattern.matches(regex5,str[1])){
String str1[] = str[1].split("-");
Fan d = new Fan(str1[0]);
circuit.add(d);
t[tn].add(d);
}
else if(str.length>1&&Pattern.matches(regex13,str[1])){
String str1[] = str[1].split("-");
Afan a = new Afan(str1[0]);
circuit.add(a);
t[tn].add(a);
}
else if(str.length>1&&Pattern.matches(regex12,str[1])){
t[tn].addm(m);
}
}
// System.out.println(t[tn].r);
tn++;
}
else if(Pattern.matches(regex11,s)){
String str[] = s.split(":");
s = str[1].replace("[","");
s = s.replace("]","");
String sstr[] = s.split(" ");
for(int i=0;i<sstr.length;i++){
for(int j=0;j<tn;j++){
if(sstr[i].equals(t[j].id)){
m.add(t[j]);
}
}
}
}
if (s.equals("end")) {
break;
}
s = s.replace("[","");
s = s.replace("]","");
String str[] = s.split(" ");
if(str.length==1&&Pattern.matches(regex6,str[0])){
String ss = str[0].replace("#","");
for(int i=0;i<circuit.devices.size();i++){
if(ss.equals(circuit.devices.get(i).id))
circuit.devices.get(i).updateState();
}
// for(int i=0;i<t[tn-1].devices.size();i++){
// if(ss.equals(t[tn-1].devices.get(i).id))
// t[tn-1].devices.get(i).updateState();
// }
}
else if(str.length==1&&Pattern.matches(regex7,str[0])){
String ss = str[0].replace("#","");
ss = ss.replace("+","");
for(int i=0;i<circuit.devices.size();i++){
if(ss.equals(circuit.devices.get(i).id)){
circuit.devices.get(i).state = 1;
circuit.devices.get(i).updateState();
}
}
// for(int i=0;i<t[tn-1].devices.size();i++){
// if(ss.equals(t[tn-1].devices.get(i).id)){
// t[tn-1].devices.get(i).state = 1;
// t[tn-1].devices.get(i).updateState();
// }
// }
}
else if(str.length==1&&Pattern.matches(regex8,str[0])){
String ss = str[0].replace("#","");
ss = ss.replace("-","");
for(int i=0;i<circuit.devices.size();i++){
if(ss.equals(circuit.devices.get(i).id)){
circuit.devices.get(i).state = 0;
circuit.devices.get(i).updateState();
}
}
// for(int i=0;i<t[tn-1].devices.size();i++){
// if(ss.equals(circuit.devices.get(i).id)){
// t[tn-1].devices.get(i).state = 0;
// t[tn-1].devices.get(i).updateState();
// }
// }
}
else if(str.length==1&&Pattern.matches(regex9,str[0])){
String ss[] = str[0].split(":");
double gear = Double.parseDouble(ss[1]);
String sss = ss[0].replace("#","");
for(int i=0;i<circuit.devices.size();i++){
if(sss.equals(circuit.devices.get(i).id)){
circuit.devices.get(i).gea = gear;
circuit.devices.get(i).updateState();
}
}
// for(int i=0;i<t[tn-1].devices.size();i++){
// if(sss.equals(t[tn-1].devices.get(i).id)){
// t[tn-1].devices.get(i).gea = gear;
// t[tn-1].devices.get(i).updateState();
// }
// }
}
// 根据输入的控制信息更新电路状态
// 这里需要根据实际输入的控制信息来更新电路状态
}
for(int i=0;i<tn-1;i++)
{
t[i].computeR();
// System.out.println(t[i].r);
}
m.computeR();
// System.out.println(m.r);
t[tn-1].computeR();
// System.out.println(t[tn-1].r);
double vt = 220;
for(int i=0;i<t[tn-1].devices.size();i++){
if(t[tn-1].devices.get(i) instanceof Fcontrol){
if(t[tn-1].devices.get(i).gear==0)
vt = 0;
else if(t[tn-1].devices.get(i).gear==1)
vt = (0.3 * vt);
else if(t[tn-1].devices.get(i).gear==2)
vt = (0.6 * vt);
else if(t[tn-1].devices.get(i).gear==3)
vt = (0.9 * vt);
}
else if(t[tn-1].devices.get(i) instanceof Lcontrol){
vt = (t[tn-1].devices.get(i).gea * vt);
}
else if(t[tn-1].devices.get(i) instanceof Switch)
{
if(t[tn-1].devices.get(i).state == 0)
vt = 0;
}
}
for(int i=0;i<m.ts.size();i++){
if(m.ts.get(i).isClosed()){
for(Device device : m.ts.get(i).devices){
if(device instanceof Fan)
{
device.vt = 1.0*(device.r/m.ts.get(i).r)*m.r/t[tn-1].r*vt;
device.updateState();
}
else if(device instanceof Afan)
{
device.vt = 1.0*(device.r/m.ts.get(i).r)*m.r/t[tn-1].r*vt;
device.updateState();
}
else if(device instanceof Blight)
{
device.vt = 1.0*(device.r/m.ts.get(i).r)*m.r/t[tn-1].r*vt;
device.updateState();
}
else if(device instanceof Light)
{
device.vt = 1.0*(device.r/m.ts.get(i).r)*m.r/t[tn-1].r*vt;
device.updateState();
}
}
}
}
for(Device device : t[tn-1].devices){
if(device instanceof Fan)
{
device.vt = 1.0*device.r/t[tn-1].r*vt;
device.updateState();
}
else if(device instanceof Afan)
{
device.vt = 1.0*device.r/t[tn-1].r*vt;
device.updateState();
}
else if(device instanceof Blight)
{
device.vt = 1.0*device.r/t[tn-1].r*vt;
device.updateState();
}
else if(device instanceof Light)
{
device.vt = 1.0*device.r/t[tn-1].r*vt;
device.updateState();
}
}
System.out.println(circuit.getStatus());
}
}
设计与分析
第四次作业
答题判题程序-4

第四次作业中的类比较,结构较为复杂,类间关系复杂,新加入多选题和填空题两种类,不同题目类可以继承同一个父类;
第五次作业
家居电路模拟程序-1

本次作业是家居电路模拟程序第一次作业,类间关系较为简单,主要为不同电器类与控制设备类继承同一个父类;
第六次作业
家居电路模拟系统-2

本次作业新加入了落地扇类、串联电路与并联电路类,落地扇继承电子设备类,串联电路与并联电路中有不同电器类,两种不同电路类中还有另一个电路类,类间关系更难设计;
踩坑心得
第四次作业
答题判题程序-4
本次作业中出现较多问题,对格式的处理,以及多学生多试卷容易出现非零返回等问题,主要由于各种循环处理不当,信息输出顺序出现问题,导致各种问题出现;
第五次作业
家居电路模拟程序-1
本次作业为家居电路第一次作业,作业难度较为简单,问题主要是对各种设备的输出处理,以及各种设备的输出顺序还有最后一个不回车处理,以及多个开关等情况;
第六次作业
家居电路模拟系统-2
本次作业较上一次有所提高,问题主要出现在计算,对并联电路上多个电器存在时忘记进行分压处理,以及忘记将新添加的落地扇电器进行处理,导致出现问题;
改进建议
- 对接口的使用较少,后续比较等可使用Comparable接口代替比较方法
- 未使用抽象类,对抽象类理解不足
- 对引脚的处理后续可使用Hash Map来储存一个设备的不同引脚
- 父类中有很多一些子类不使用的属性,浪费储存空间
- 注释过少,后续代码可通过添加注释令代码简单易懂
- 对强制转换的使用不够熟练,使用父类时调用父类数据而未调用子类数据
总结
在本次系列作业中,我们经历了从简单的类结构设计到复杂的类间关系构建的过程,通过答题判题程序、家居电路模拟程序等任务,不仅加深了对面向对象编程的理解,也认识到了在实际编程中可能遇到的挑战和问题。
通过这三次作业,我们深刻体会到了面向对象编程中的种种挑战。从循环处理不当、输出顺序错误,到电路计算中的疏忽,每一次问题都让我们对编程的严谨性有了更深的认识。同时,也让我们意识到在编程过程中,不仅要关注代码的逻辑正确性,还要关注代码的可读性和可维护性。
经过连续三次的作业挑战,我对于面向对象编程的理解和应用能力有了显著提升。从答题判题程序到家居电路模拟系统,每一次的作业都加深了我对类设计、继承、多态等核心概念的理解。

浙公网安备 33010602011771号