首页 > 其他分享 >题目集4~6的总结性Blog

题目集4~6的总结性Blog

时间:2024-06-08 10:44:30浏览次数:15  
标签:总结性 题目 name get double ArrayList Blog 电路 public

  • 答题判断程序4
  1. 题目分析:
    答题判断程序4是接着答题判断程序3的,增加了多选题和填空题,进行了多个同学多张试卷的排序。对于多选题和填空题,这和单选题是一样的,题目设置依旧不变,只是在答案部分多添加了一个ansersArrayList存储答案,在检测答题情况的时候遍历该List判断是部分正确还是完全正确。多个同学多张试卷的情况可以通过对学号大小排序以及试卷编号大小排序进行,先进行学生的多张试卷排序,小的在前,大的在后,在进行学生学号排序,依旧是小的在前大的在后,最后输出时先进行学生输出,输出后输出学生的多张试卷,然后再进行下一个学生的试卷输出。
  2. 题目设计:
    接着答题判断程序3,依旧是问题类,试卷类,答卷类;填空题类和多选题类继承问题类,其中增加了ArrayList存储其问题的多个答案以便于检测答题情况时判断是部分正确还是完全正确或者错误。把主函数的单个学生student改成ArrayList存储多个学生的信息,然后依次读入每个学生的信息并添加到ArrayList中,试卷类添加识别到的每一张试卷,遍历试卷List找到对应学号的学生,创建ArrayList存储,在ArrayList中对试卷编号排序,最后对学生ArrayList的学号由小到大排序,最后遍历输出学生信息及其试卷信息即可完成排序。
  3. 类说明:

新增加的多选题类和填空题类:

点击查看代码
class ZQuestion extends Question
{
    ZQuestion(String content, String answer) {
        super(content, answer);
    }
    ArrayList<String> z_answersArray = new ArrayList<>();
    void add_zAnswersArray(String answer)
    {
        z_answersArray.add(answer);
    }
    public ArrayList<String> getAnswersArray() {
        return z_answersArray;
    }
    public void setAnswersArray(ArrayList<String> answersArray) {
        this.z_answersArray = answersArray;
    }
}

class KQuestion extends Question
{
    KQuestion(String content, String answer) {
        super(content, answer);
    }
    ArrayList<String> k_answersArray = new ArrayList<>();
    void add_kAnswersArray(String answer)
    {
        k_answersArray.add(answer);
    }
    
    public ArrayList<String> getK_answersArray() {
        return k_answersArray;
    }
    public void setK_answersArray(ArrayList<String> k_answersArray) {
        this.k_answersArray = k_answersArray;
    }
    
}
多个学生的处理: `HashMap<string, string=""> student = new HashMap<>();` 存储学号和姓名,进行最后对比。
  • 家居强电电路模拟程序1
  1. 题目分析:
    家居强电电路模拟程序1是读入一段串联电路和其中控制设备的状态,输出控制设备和被控制设备的状态;由于题目一开始是先给一串串联电路,[]内存储电路的引脚1和引脚2,一连串的[]内多个设备相互的引脚有连接,从而形成了一串串联电路,而后读入控制设备的名称,改变其状态。由此,既然对于[]内的内容使用正则表达式即可提取,再用split方法可以将各个设备名称存储,所以使用ArrayList对于此题来说是最好的。各个控制设备在改变状态之后使用update方法更新自己的电压即可计算每一个设备的实时电压。每个设备的规定方法按照题意写出即可。由于最后需要排序输出,在存储设备信息时会在Main函数中单独存储每个设备的ArrayList以便于排序输出。
  2. 题目设计:
    本题设置两个大类,ControlBeControlled两个大类表示控制设备和被控制设备,这两个大类中将其相同变量表示出,如有特殊变量,在自己类中继续表示即可。控制设备(开关、分档调速器、连续调速器)分别按照题意设置,然后利用更新方法更新自己的实时状态。而被控制设备(吊扇、日光灯、白炽灯)类中就设置其相应拥有的共同变量,额外变量每个类自己单独设置,其相应的输出数值对应相应的方法写出即可。对于排序依次输出,存储每个类的单独ArrayList,写出sort函数帮助排序,随之按照顺序遍历链表依次输出。
  3. 类说明:

控制类(Control类以及开关、分档调速器、连续调速器类):

点击查看代码
class Control {
    String name;
    double c1;
    double c2;

    public void show() {
    }

    public double getC2() {
        return this.c2;
    }
}

class K extends Control {
    int state;
    int count;

    public K(String name) {
        this.name = name;
    }

    public void upKState() {
        count++;
        if (count % 2 == 0)
            state = 0;
        else
            state = 1;
    }

    @Override
    public double getC2() {
        if (this.state == 0)
            this.c2 = 0;
        if (this.state == 1)
            this.c2 = this.c1;
        return this.c2;
    }

    @Override
    public void show() {
        if (state == 0)
            System.out.println("@" + this.name + ":" + "turned on");
        if (state == 1)
            System.out.println("@" + this.name + ":" + "closed");
    }
}

class F extends Control {
    int gearF = 0;

    public F(String name) {
        this.name = name;
    }

    @Override
    public double getC2() {
        switch (this.gearF) {
        case 0:
            this.c2 = 0;
            break;
        case 1:
            this.c2 = 0.3 * this.c1;
            break;
        case 2:
            this.c2 = 0.6 * this.c1;
            break;
        case 3:
            this.c2 = 0.9 * this.c1;
            break;
        }
        return this.c2;
    }

    public void addGearF() {
        if(this.gearF<3)
            this.gearF++;
    }

    public void delGearF() {
        if(this.gearF>0)
            this.gearF--;
    }

    @Override
    public void show() {
        System.out.printf("@" + this.name + ":" + "%d\n", this.gearF);
    }
}

class L extends Control {
    double gearL;

    public L(String name) {
        this.name = name;
    }

    @Override
    public double getC2() {
        return this.c1 * gearL;
    }

    @Override
    public void show() {
        System.out.printf("@" + this.name + ":" + "%.2f\n", gearL);
    }
}

被控制类(BeControlled类以及白炽灯、日光灯、吊扇类):

点击查看代码
class BeControlled {
    String name;
    double c1, c2;
    double d = Math.abs(c1 - c2);

    public void show() {
    }

    public double getC2() {
        return this.c1;
    }
}

class B extends BeControlled {
    double lum;

    public B(String name) {
        this.name = name;
    }

    public double getC2() {
        return this.c1;
    }

    public double getLum() {
        if (d < 10)
            lum = 0;
        else if (d >= 10 && d <= 200)
            lum = ((d - 10) / 210) * (200 - 50) + 50;
        else if(d>200)
            lum = 200;
        return lum;
    }

    @Override
    public void show() {
        System.out.printf("@" + this.name + ":" + "%d\n", (int)this.lum);
    }
}

class R extends BeControlled {
    double lum;

    public R(String name) {
        this.name = name;
    }

    public double getC2() {
        return this.c1;
    }

    public double getLum() {
        if (d == 0)
            lum = 0;
        else
            lum = 180;
        return lum;
    }

    @Override
    public void show() {
        System.out.printf("@" + this.name + ":" + "%d\n",(int)this.lum);
    }
}

class D extends BeControlled {
    double r=0;

    public D(String name) {
        this.name = name;
    }

    public double getD_R() {
        if (this.c1 < 80)
            r = 0;
        else if (this.c1 >= 80 && this.c1 <= 150)
            r = ((this.c1 - 80) / (150 - 80)) * (360 - 80) + 80;
        else 
            r = 360;
        return r;
    }

    @Override
    public void show() {
        System.out.printf("@" + this.name + ":" + "%d\n", (int)r);
    }
}
  • 家居强电电路模拟程序2
  1. 题目分析:
    家居强电电路模拟程序2是接着1增加了并联电路,在串联电路中接入并联电路,添加了一个落地扇类(属于被控制设备类,记得在排序类中增加其排序方法),设置各个控制设备的状态,计算总电阻,分压、电位差以及各个控制设备和被控设备的状态。此时输入的读入也许需要有所修改,输入读入时要包括并联电路的情况,而并联电路又是由串联电路组成的,所以需要电路模拟1的Main函数修改成串联电路类,再增添一个并联电路类,读入时增加并联电路读入的部分和落地扇的存储,其中一个重要的问题就是计算电阻,并联电路的加入让电阻的计算不再是简单的加减,而是需要公式计算,最后读入更改的控制设备,更新控制设备的状态,还要进行主电路电阻的计算更新电阻,每一个设备的分压由其电阻所占总电阻比例与总电压相乘得到分压,这样就可以得到所有设备的状态,进行各个设备状态的输出。
  2. 题目设计:
    控制设备类不变,被控制设备类增加落地扇类,增加其相应的变量成员方法以及排序方法。增加串联电路类和并联电路类;串联电路增加所有设备的ArrayList,包括串联电路,由于并联电路是由串联电路组成的,所以并联电路拥有串联电路的ArrayList即可,当然,两条电路都要加上总电阻这个成员变量,实现总电阻的计算,用相应的方法去实现。
  3. 类说明:

被控制设备增加的落地扇类:

点击查看代码
class A extends BeControlled {
    double r = 0.0;
    int R = 20;

    public A(String name) {
        this.name = name;
    }

    public double getA_R() {
        if (this.c1 < 80)
            r = 0.0;
        else if (this.c1 <= 99)
            r = 80;
        else if (this.c1 <= 119)
            r = 160;
        else if (this.c1 <= 139)
            r = 260;
        else
            r = 360;
        return r;
    }

    @Override
    public void show() {
        System.out.printf("@" + this.name + ":" + "%d\n", (int) r);
    }
}

串联电路类(T):

点击查看代码
class T {
    String name;
    double T_R = 0.0;
    int state = 1;
    double initialVolt;
    double finalVolt;
    ArrayList<String> connection = new ArrayList<>();
    ArrayList<K> k = new ArrayList<>();
    ArrayList<F> f = new ArrayList<>();
    ArrayList<L> l = new ArrayList<>();
    ArrayList<B> b = new ArrayList<>();
    ArrayList<R> r = new ArrayList<>();
    ArrayList<D> d = new ArrayList<>();
    ArrayList<A> a = new ArrayList<>();
    ArrayList<T> t = new ArrayList<>();
    ArrayList<M> m = new ArrayList<>();

    public double getFinalVolt() {
        return initialVolt;
    }

    public double getT_R() {
        double total = 0;
        for (int i = 0; i < this.b.size(); i++) {
            total += this.b.get(i).R;
        }
        for (int i = 0; i < this.r.size(); i++) {
            total += r.get(i).R;
        }
        for (int i = 0; i < this.d.size(); i++) {
            total += this.d.get(i).R;
        }
        for (int i = 0; i < this.a.size(); i++) {
            total += this.a.get(i).R;
        }
        for (int i = 0; i < this.t.size(); i++) {
            total += this.t.get(i).getT_R();
        }
        for (int i = 0; i < this.m.size(); i++) {
            total += this.m.get(i).getM_R();
        }
        return total;
    }

    public int getState() {
        for (int i = 0; i < k.size(); i++) {
            if (k.get(i).state == 0)
                state = 0;
        }
        for (int i = 0; i < f.size(); i++) {
            if (f.get(i).gearF == 0)
                state = 0;
        }
        for (int i = 0; i < l.size(); i++) {
            if (l.get(i).gearL == 0)
                state = 0;
        }
        return state;
    }

    public void calculate() {
        double volt = initialVolt;
        for (int i = 1; i < connection.size() - 1; i++) {
            String name = connection.get(i);
            for (int j = 0; j < k.size(); j++) {
                if (k.get(j).name.equals(name)) {
                    k.get(j).c1 = volt;
                    if (i == connection.size() - 2)
                        k.get(j).c2 = 0;
                    else
                        k.get(j).c2 = k.get(j).getC2();
                    volt = k.get(j).c2;
                }

            }
            for (int j = 0; j < f.size(); j++) {
                if (f.get(j).name.equals(name)) {
                    f.get(j).c1 = volt;
                    if (i == connection.size() - 1)
                        f.get(j).c2 = 0;
                    else
                        f.get(j).c2 = f.get(j).getC2();
                    volt = f.get(j).c2;
                }

            }
            for (int j = 0; j < l.size(); j++) {
                if (l.get(j).name.equals(name)) {
                    l.get(j).c1 = volt;
                    if (i == connection.size() - 2)
                        l.get(j).c2 = 0;
                    else
                        l.get(j).c2 = l.get(j).getC2();
                    volt = l.get(j).c2;
                }

            }
            for (int j = 0; j < b.size(); j++) {
                if (b.get(j).name.equals(name)) {
                    double per = (double) b.get(j).R / this.T_R;
                    b.get(j).c1 = volt * per;
                    b.get(j).c2 = 0;
                    b.get(j).d = b.get(j).c1 - b.get(j).c2;
                    b.get(j).lum = b.get(j).getLum();
                }

            }
            for (int j = 0; j < r.size(); j++) {
                if (r.get(j).name.equals(name)) {
                    double per = (double) r.get(j).R / this.T_R;
                    r.get(j).c1 = volt * per;
                    r.get(j).c2 = 0;
                    r.get(j).d = r.get(j).c1 - r.get(j).c2;
                    r.get(j).lum = r.get(j).getLum();
                }

            }
            for (int j = 0; j < d.size(); j++) {
                if (d.get(j).name.equals(name)) {
                    double per = (double) d.get(j).R / this.T_R;
                    d.get(j).c1 = volt * per;
                    d.get(j).c2 = 0;
                    d.get(j).r = d.get(j).getD_R();
                }
            }
            for (int j = 0; j < a.size(); j++) {
                if (a.get(j).name.equals(name)) {
                    double per = (double) a.get(j).R / this.T_R;
                    a.get(j).c1 = volt * per;
                    a.get(j).c2 = 0;
                    a.get(j).r = a.get(j).getA_R();
                }
            }

            for (int j = 0; j < t.size(); j++) {
                if (t.get(j).name.equals(name)) {
                    double per = (double) t.get(j).T_R / this.T_R;
                    t.get(j).initialVolt = volt * per;
                    t.get(j).calculate();
                }
            }
            for (int j = 0; j < m.size(); j++) {
                if (m.get(j).name.equals(name)) {
                    for (int k = 0; k < m.get(j).finalT.size(); k++) {
                        double per = (double) m.get(j).M_R / this.T_R;
                        m.get(j).finalT.get(k).initialVolt = volt * per;
                        m.get(j).finalT.get(k).calculate();
                    }
                }
            }
        }
    }

}

并联电路类(M):

点击查看代码
class M {
    double M_R;
    int state;
    String name;
    ArrayList<T> initialT = new ArrayList<>();
    ArrayList<T> finalT = new ArrayList<>();

    public double getM_R() {
        double total = 0;
        for (int i = 0; i < finalT.size(); i++) {

            total += (1.0 / (finalT.get(i).T_R));
        }
        double R = 1.0 / total;
        return R;
    }

    public ArrayList<T> getFinalT() {
        ArrayList<T> Final = new ArrayList<>();
        for (int i = 0; i < initialT.size(); i++) {
            if (initialT.get(i).state == 1) {
                Final.add(this.initialT.get(i));
            } else if (initialT.get(i).state == 0) {
                initialT.get(i).initialVolt = 0.0;
                initialT.get(i).calculate();
            }
        }
        return Final;
    }

    public int getState() {
        for (int i = 0; i < initialT.size(); i++) {
            if (initialT.get(i).state == 1)
                this.state = 1;
        }
        return this.state;
    }
}
  • 答题判断程序4
    答题判断程序因为一开始写的时候只注意到了名字的存储,从而忽略了排序的问题,因为我使用了HashMap,排序肯定是没有ArrayList方便的,所以一开始对于存储对象的选择是要慎重的。然后是多选题和填空题正确情况的判断,我想到是遍历答案ArrayList从而判断结果,但其实使用字符串的equals函数和contains函数会更加便捷,不仅如此,这样还能够减少代码冗余。
  • 家居强电电路模拟程序1
    这部分的踩坑点就是更新控制设备的状态以及。最开始所有设备的输出全部都是0.0。在eclipseDebug后才发现是存储控制设备的状态后并未保存状态,导致电路不通。
  • 家居强电电路模拟程序2
    模拟程序2因为需要计算总电阻,但是电路既有串联的又有并联的,导致总电阻不好算,电阻又是由串联和并联的相加,就得设置一个getR方法计算一条并联的总电阻或一条串联的总电阻,继而相加得到主电路的总电阻,依旧要记得实时更新控制设备状态,分压时是根据该电阻占据该条电路的百分比计算的,而该电压也就是引脚之间的电位差,这样一切就可以衔接起来了。但容易踩坑的是要及时更新该条路的电阻,主电路的电阻要在其中报狂的所有电路的总电阻更新之后再更新,这样才能保证正确性。
  • 答题判断程序4
    答题判断程序4的改进建议就是可以将HashMap转化成ArrayList,在相应的类中存储String name即可,这样可以大大提高代码效率,不需要再在判断答题情况时不断遍历答案的ArrayList表了。
  • 家居强电电路模拟程序1
    家具强电电路模拟程序1所写的大多是题目要求的,所以需要改进的可能就只有排序输出那一段,我自作主张写了各个设备相应的函数,而且是函数内容相同,只是形参的类型不同,这样导致了代码的大量冗余,完全可以用ArrayList中的sort方法排序。
  • 家居强电电路模拟程序2
    家居强电电路模拟程序2是接着1写的,为了方便,我就将排序方法单独写了个类Sort,现在看来完全没有必要,只要利用ArrayList的sort方法即可。但是拎一个值得改进的地方就是对于一条电路是否通路的判断,我一开始在每条电路上都设置了state,导致判断的时候依旧需要循环遍历,这个非常多与,其实只要再串联电路类和并联电路类中增加state状态即可,这样只要判断那一段电路的state就行,而不用每个控制设备都判断,太麻烦了。

标签:总结性,题目,name,get,double,ArrayList,Blog,电路,public
From: https://www.cnblogs.com/cmhFirstBlog/p/18229002

相关文章

  • PTA第四到六次题目集总结
    一、前言完成了六次PTA作业,也算的上是与PTA有些许爱恨情仇了,这三次PTA作业在第五次时由原来的答题判题程序改为家居强电电路模拟程序。老师说是为了降低难度,以我而言,设计上确实更加简单了,而且第五次PTA作业给出的做题思路很清晰,虽然是计划之外的转变,但是设计上更加简单,也应该不会......
  • OOP 4-6次题目总结
    OOP第4-6次题目总结目录OOP第4-6次题目总结一,前言答题判题系统-4家居强电电路模拟程序-1家居强电电路模拟程序-2二,设计与分析答题判题系统-4家居强电电路模拟程序-1家居强电电路模拟程序-2三,踩坑心得四,改进建议五,总结一,前言答题判题系统-4知识点总结:1.在这次答题判题系统......
  • 第二次blog总结
    目录一.前言二.设计与分析:三.踩坑心得四.改进建议五.总结一.前言第四次大作业:1.题量:这次的大作业有三道题,题量较少。2.难度:第四次大作业的核心题目答题判题程序-4是经过了三次对第一次答题判题程序为基础的迭代而成,难度毋庸置疑,而且因为第一次总结,这次大作业距离上一次大作业也......
  • PTA三次题目集总结-第二次blog
    以下内容是我对pta题目集4-6次大作业的总结nchu-software-oop-2024-上-4本次作业新增内容:1、输入选择题题目信息题目信息为独行输入,一行为一道题,多道题可分多行输入。格式:"#Z:"+题目编号+""+"#Q:"+题目内容+""#A:"+标准答案格式基本的约束与一般的题目输入信息一致。新......
  • 第二次Blog
    (1)前言:智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境......
  • 题目集4~6的总结性Blog
    目录一、前言:总结三次题目集的知识点、题量、难度等情况知识点题目及题量、难度nchu-software-oop-2024-上-4:nchu-software-oop-2024-上-5:nchu-software-oop-2024-上-6:二、第四次的答题判题程序分析设计与分析第四次的答题判题程序类图以及SourceMontor的生成报表内容:踩坑心得......
  • 第二次blog
    一.前言1.题目集4~6的知识点:(1)这几个题目都使用了面向对象编程原理,根据题目给出的信息和题目的复杂程度,建立了对应的类,并在类中添加了方法。通过使用Java自带的类库,如Scanner类中的方法用于接收用户输入,regex.Matcher类中的方法用于正则表达式匹配,regex.Pattern类中的方法用于编......
  • 题目集4-1-2总结
    前言设计与分析2.1第四次迭代设计与分析2.2第一次电路程序2.3第二次电路程序踩坑心得踩坑心得改进建议总结前言这三次程序的编写与之前的略有不同,第四次程序编写是由前三次程序迭代而来,在拥有两次编写迭代程序的经历后,第四次的程序编写并没有耗费......
  • 题目集4-6次总结
    一、前言从大一下学期开始学习Java,到现在接近尾声,已经过去了差不多有三个月,我学习到了很多,对于利用Java语言进行程序的编写也更加熟练,但经过六次的pta大作业,仍让我意识到了我还有许多不足,需要进行改进,以下是我对于题目集4到6次的作业的总结。知识点:三次题目集考察的知识点主......
  • 第二次blog总结
    一、前言:第四次pta作业:1.知识点:考察类的继承,抽象类的使用。2.题量:3道简单题,1道迭代难题。3.难度:这次最后一道题在上次的基础上添加了题目的种类(eg:选择题、填空题)等,难度增加的还行,不算太难也不算太容易。第五次pta作业:1.知识点:考察类实现Comparable接口,重写compareTo......