首页 > 其他分享 >第三次Blog

第三次Blog

时间:2024-06-30 21:09:16浏览次数:1  
标签:entry3 第三次 double number getValue Blog res entry

一,前言
本次Blog是对题目集7-8的总结,正则表达式,类型转换,字符串处理,链表,以及例如Arraylist等包的知识,需要合理运用继承多态来设计类,需要对题目的逻辑过程,具体实现有充分的认知.特别是用map将类之间
联系起来对于逻辑的考验非常大.难度很大,在写代码之前要对实现的过程,思路充分完善,才利用代码的完成.
2,设计与分析
第七次题目集
7-1 家居强电电路模拟程序-3

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

依旧是之前题目集的迭代,在本次迭代中增加一个互斥开关,让题目变的更复杂,在之前的题目集中,是通过arraylist将数据存储,然后通过链表将电路连接信息连接起来,使过程相对麻烦,在本次题目集中,使用了map
将数据存储,再将所有用电器,控制设备继承电器主类,这样可以将数据更合理存储,更方便于数据的使用,然后就是要在写代码之前,必须在理清思路,对代码的实现过程要具体,要充分思考.在写完改进的时候,要充分活用
调试等方法.
源码如下:

点击查看代码
import java.text.DecimalFormat;
import java.util.*;

class Series extends Equipment{//串联
  Map<String,Equipment> ser=new LinkedHashMap<>();
    public Series(double number,double res,Map<String,Equipment> ser){
        super(number,res);
        this.ser=ser;

    }


    public double num(double a, double b) {
        return 0;
    }
}
class Parallel extends  Equipment{//并联


    Map<String,Series> par=new LinkedHashMap<>();
    public Parallel(double number,double res,Map<String,Series> ser){
        super(number,res);
        this.par=ser;
    }

    public double num(double a,double b){
        double r=0;
        Set<Map.Entry<String, Series>> entries = par.entrySet();
        for(Map.Entry<String, Series> entry: entries){
            if(entry.getValue().number==0){
            r+=1/entry.getValue().res;}
        }
        return 1/r;
    }
}
  class Equipment implements Comparable<Equipment>{
    double number;//开关的开关,调压器的档数,用电器的亮度,转速
    double res;//电阻
    int sum=0;//编号
    /*public Equipment() {
    }*/

    public Equipment(double number, double res){
        this.number=number;
        this.res=res;
        }


      @Override
      public int compareTo(Equipment o) {
          return this.sum-o.sum;
      }
  }
class Switch extends Equipment{//开关

    public Switch(double number,double res){
        super(number,res);

    }

    public static double num(double a, double b) {
        return 0;
    }

}
class Mutual extends Equipment{
    public Mutual(double number,double res){
        super(number,res);
    }


    public double num(double a, double b) {
        return 0;
    }
}
class Gears extends Equipment{//挡位变压器

    public Gears(double number,double res){
        super(number,res);

    }

    public static double num(double a,double b){
        switch ((int) a) {
            case 0 :   a= 0;break;
            case 1 : a=0.3;break;
            case 2 : a=0.6;break;
            case 3 : a=0.9;break;
            default : a=0.9;break;
        }
        return a;
    }
}
class Continu extends Equipment{//连续变压器

    public Continu(double number,double res){
        super(number,res);

    }

    public double num(double a, double b) {
        return 0;
    }
}
class Bulb extends Equipment{//日光灯

    public Bulb(double number ){
        super(number,10);

    }

    public static double num(double v,double b){
        double number=0;
        if(v<9){
            number=0;
        }
        else{

            number= (5*v+300)/7;
        }
        return number;
    }
}
class Lamp extends Equipment{//白织灯

    public Lamp(double number ){
        super(number,5);

    }

    public static double num(double v,double b){
        double number=0;
        if(v==0){
            number=0;
        }else{
            number=180;
        }
        return number;
    }
}
class Fan extends Equipment{//风扇

    public Fan(double number,double speed){
        super(number,20);

    }

    public static double num(double v,double b){
        double number=0;
        if(v<80){
            number=0;
        }
        if(v>150){
            number=360;
        }
        else{
            number=(4*v)-240;
        }
        return number;
    }
}
class StandFan extends Equipment{//落地扇

    public StandFan(double number,double speed){
        super(number,20);

    }

    public static double num(double v,double b){
        double number=0;
        if(v<80){
            number=0;
        }
        else if(v<100){
            number=80;
        }
        else if(v<120){
            number=160;
        }
        else if(v<140){
            number=260;
        }
        else{
            number=360;
        }
        return number;
    }
}
class Curtain extends Equipment{
    public Curtain(double number){
        super(number,15);

    }

    public static double num(double lux,double v){
        double number=0;
        if(v>50){
            if(lux<50){
                number=1;
                return number;
            }
            if(lux<100){
                number=0.8;
                return number;
            }
            if(lux<200){
                number=0.6;
                return number;
            }
            if(lux<300){
                number=0.4;
                return number;
            }
            if(lux<400){
                number=0.2;
                return number;
            }
            if(lux>=400){
                number=0;
                return number;
            }
        }else{
            number=1;
        }
        return number;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String pi = scanner.nextLine();
        double v=220;
        Map<String,Equipment> ser=new LinkedHashMap<>();
        List <Switch> k =new ArrayList<>();
        List <Gears> f =new ArrayList<>();
        List <Continu> l =new ArrayList<>();
        List <Bulb> b =new ArrayList<>();
        List <Lamp> r =new ArrayList<>();
        List <Fan> d =new ArrayList<>();
        List <StandFan> a =new ArrayList<>();
        List<Curtain> c =new ArrayList<>();
        List<Mutual> m =new ArrayList<>();

        while(!pi.equals("end")){
            if(pi.startsWith("#T")){
                String Name=pi.substring(1,3);//串联电路名字
                Map<String,Equipment> series=new LinkedHashMap<>();
                double ress=0;//电阻和
                String[] pis=pi.split(" ");
                int number1=Integer.parseInt(pis[0].substring(2,3));
                for(int i=1;i<pis.length;i++){
                    if(pis[i].startsWith("K")){//开关

                        Switch k1=new Switch(0,0);
                        k1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment kk=k1;
                        k.add(k1);
                        series.put(pis[i].substring(0,2),kk);

                        //System.out.println(k1.open);
                    }
                    if(pis[i].startsWith("F")){//分档调速器

                        Gears f1=new Gears(0,0);
                        f1.sum=Integer.parseInt(pis[2].substring(1,2));
                        Equipment ff=f1;
                        f.add(f1);
                        series.put(pis[i].substring(0,2),ff);
                    }
                    if(pis[i].startsWith("L")){//连续调速器

                        Continu l1=new Continu(0,0);
                        l1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment ll=l1;
                        l.add(l1);
                        series.put(pis[i].substring(0,2),ll);

                    }
                    if(pis[i].startsWith("B")){

                        Bulb b1=new Bulb(0);
                        b1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment bb=b1;
                        b.add(b1);
                        series.put(pis[i].substring(0,2),bb);
                        //System.out.println(pis[i].substring(0,2));
                        ress+=10;
                    }
                    if(pis[i].startsWith("R")){

                        Lamp r1=new Lamp(0);
                        r1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment lr=r1;
                        r.add(r1);
                        series.put(pis[i].substring(0,2),lr);
                        ress+=5;
                    }
                    if(pis[i].startsWith("D")){//风扇

                        Fan d1= new Fan(0,0);
                        d1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment df=d1;
                        d.add(d1);
                        series.put(pis[i].substring(0,2),df);
                        ress+=20;
                    }
                    if(pis[i].startsWith("A")){//落地扇

                        StandFan a1= new StandFan(0,0);
                        a1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment sa1=a1;
                        a.add(a1);
                        series.put(pis[i].substring(0,2),sa1);
                        ress+=20;
                    }
                    if(pis[i].startsWith("S")){
                        Curtain c1= new Curtain(0);
                        c1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment sc1=c1;
                        c.add(c1);
                        series.put(pis[i].substring(0,2),sc1);
                        ress+=15;

                    }
                    if(pis[i].startsWith("H")){
                        Mutual m1= new Mutual(0,0);
                        m1.sum=Integer.parseInt(pis[i].substring(1,2));
                        if(Integer.parseInt(pis[i].substring(3,4))==1){
                            if(Integer.parseInt(pis[i+1].substring(4,5))==2){//1,3接通 2,4断开
                                m1.number=1;
                            }else if(Integer.parseInt(pis[i+1].substring(4,5))==3){
                                m1.number=4;
                            }
                        }
                        if(Integer.parseInt(pis[i].substring(3,4))==2){
                            m1.number=1;
                        }
                        if(Integer.parseInt(pis[i].substring(3,4))==3){
                            m1.number=4;
                        }
                        Equipment mm=m1;

                        m.add(m1);
                        series.put(pis[i].substring(0,2),mm);
                        if(pi.substring(5,6).equals("V")){
                            if(m1.number==1){
                                ress+=5;
                            }
                            if(m1.number==4){
                                ress+=10;
                            }
                        }

                    }
                    if(pis[i].startsWith("M")){
                        Equipment n=null;
                        double res=0;
                        Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
                        for(Map.Entry<String, Equipment> entry : entries){
                            if(entry.getKey().equals(pis[i].substring(0,2))){
                                res=entry.getValue().res;
                                n=entry.getValue();
                            }
                        }
                        //Parallel par=new Parallel(0,res,map);
                        series.put(pis[i].substring(0,2),n);



                    }
                }
                Series ser1=new Series(0,ress,series);
                ser.put(Name,ser1);

            }
            if(pi.startsWith("#M")){

                String[] pis=pi.split(" ");

                Map<String,Series> par=new LinkedHashMap<>();
                String Name=pi.substring(1,3);

                for(int i=0;i<pis.length;i++){
                    String con;
                    if(i==0){
                         con=pis[i].substring(5,7);

                    }else{
                        con=pis[i].substring(0,2);
                    }
                    Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
                    for(Map.Entry<String, Equipment> entry : entries){
                        if(entry.getKey().equals(con)){
                            par.put(entry.getKey(),  (Series) entry.getValue());
                        }
                    }
                }
                double ress=0;


                Parallel pa2=new Parallel(0,0,par);
                ress= pa2.num(0,0);
                pa2.res = ress;
                ser.put(Name,pa2);
            }
            if(!pi.startsWith("#T")&&!pi.startsWith("#M")){
                break;
            }
            pi=scanner.nextLine();
        }//数据输入
        while(!pi.equals("end")){
            if(pi.startsWith("#K")){
                for(int i=0;i<k.size();i++){
                    if(k.get(i).sum==Integer.parseInt(pi.substring(2,3))){
                        if(k.get(i).number==1){
                            k.get(i).number=0;
                        }
                        else{
                            k.get(i).number=1;
                        }
                    }
                }
            }
            if(pi.startsWith("#F")){
                for(int i=0;i<f.size();i++){
                    if(f.get(i).sum==Integer.parseInt(pi.substring(2,3))){
                        if(pi.substring(3).equals("+")){
                            if(f.get(i).number>=3){

                            }else{
                                f.get(i).number++;}
                        }
                        if(pi.substring(3).equals("-")){
                            if(f.get(i).number<=0){

                            }
                            else{
                                f.get(i).number--;}
                        }
                    }
                }
            }
            if(pi.startsWith("#L")){
                String[] pip=pi.split(":");
                for(int i=0;i<l.size();i++){
                    if(l.get(i).sum==Integer.parseInt(pi.substring(2,3))){
                        // System.out.println(number);
                        l.get(0).number= Double.parseDouble(pip[1]);
                    }
                }

            }
            if(pi.startsWith("#H")){
                for(int i=0;i<m.size();i++){
                    if(m.get(i).sum==Integer.parseInt(pi.substring(2,3))){
                        if(m.get(i).number==2){
                            m.get(i).number=1;
                        }
                        if(m.get(i).number==1){
                            m.get(i).number=2;
                        }
                        if(m.get(i).number==3){
                            m.get(i).number=4;
                        }
                        if(m.get(i).number==4){
                            m.get(i).number=3;
                        }
                    }
                }
            }
            pi=scanner.nextLine();
        }
        Set<Map.Entry<String, Equipment>> entries4 = ser.entrySet();
        Iterator<Map.Entry<String, Equipment>> iterator1 = entries4.iterator();

        Map.Entry<String, Equipment> lastEntry1 = null;

        while(iterator1.hasNext()){
            Map.Entry<String, Equipment> entry2 = iterator1.next();
            if(!iterator1.hasNext()){
                lastEntry1 = entry2;

            }
        }
        if(lastEntry1!=null){
            Series Ser=(Series) lastEntry1.getValue();
            Set<Map.Entry<String, Equipment>> entries = Ser.ser.entrySet();


            for(Map.Entry<String, Equipment> entry : entries){
                if(entry.getKey().startsWith("F")){
                    v*=Gears.num(entry.getValue().number,0);
                }
                if(entry.getKey().startsWith("L")){
                    v*=entry.getValue().number;
                }
                if(entry.getKey().startsWith("K")){
                    if(entry.getValue().number==0){
                        v=0;
                    }
                }

                if(entry.getKey().startsWith("M")){
                    Parallel Pa=(Parallel) entry.getValue();
                    Set<Map.Entry<String, Series>> entries1 = Pa.par.entrySet();


                    for(Map.Entry<String, Series> entry2 : entries1){
                        Set<Map.Entry<String, Equipment>> entries2 = entry2.getValue().ser.entrySet();



                        for(Map.Entry<String, Equipment> entry3 : entries2){
                            if(entry3.getKey().startsWith("K")){
                                if(entry3.getValue().number==0){
                                    entry2.getValue().number=1;
                                }
                            }
                            if(entry3.getKey().startsWith("H")){
                                if(entry3.getValue().number==2){
                                    entry2.getValue().number=1;
                                }
                                if(entry3.getValue().number==1){
                                    entry2.getValue().res+=5;
                                }
                                if(entry3.getValue().number==3){
                                    entry2.getValue().res-=10;
                                }
                                if(entry3.getValue().number==4){
                                    entry2.getValue().number=1;
                                }
                            }
                        }

                    }
                    Pa.res=Pa.num(0,0);
                    lastEntry1.getValue().res+=Pa.res;
                }
            }
        }
        Set<Map.Entry<String, Equipment>> entries5 = ser.entrySet();
        Iterator<Map.Entry<String, Equipment>> iterator2 = entries5.iterator();

        Map.Entry<String, Equipment> lastEntry2 = null;

        while(iterator2.hasNext()){
            Map.Entry<String, Equipment> entry2 = iterator2.next();
            if(!iterator2.hasNext()){
                lastEntry2 = entry2;
            }
        }
        double lux=0;
        if(lastEntry2!=null){
            Series Ser=(Series) lastEntry2.getValue();
            double I=v/lastEntry2.getValue().res;

            Set<Map.Entry<String, Equipment>> entries = Ser.ser.entrySet();
            for(Map.Entry<String, Equipment> entry : entries){

                if(entry.getKey().startsWith("B")){
                    entry.getValue().number=  Bulb.num(I*entry.getValue().res,0);
                    lux+=entry.getValue().number;

                }
                if(entry.getKey().startsWith("R")){
                    entry.getValue().number=  Lamp.num(I*entry.getValue().res,0);
                    lux+=entry.getValue().number;

                }
                if(entry.getKey().startsWith("D")){
                    entry.getValue().number=  Fan.num(I*entry.getValue().res,0);

                }
                if(entry.getKey().startsWith("A")){
                    entry.getValue().number=  StandFan.num(I*entry.getValue().res,0);
                }
                if(entry.getKey().startsWith("S")){
                    entry.getValue().number=  I*entry.getValue().res;
                }
                if(entry.getKey().startsWith("M")){
                    Parallel Pa=(Parallel) entry.getValue();
                    double V=I*Pa.res;
                    Set<Map.Entry<String, Series>> entries1 = Pa.par.entrySet();
                    for(Map.Entry<String, Series> entry2 : entries1){
                        if(entry2.getValue().number==1){
                            continue;
                        }
                        double i=V/entry2.getValue().res;
                        Set<Map.Entry<String, Equipment>> entries2 = entry2.getValue().ser.entrySet();
                        for(Map.Entry<String, Equipment> entry3 : entries2){
                            if(entry3.getKey().startsWith("B")){
                                entry3.getValue().number=  Bulb.num(i*entry3.getValue().res,0);
                                lux+=entry3.getValue().number;
                            }
                            if(entry3.getKey().startsWith("R")){
                                entry3.getValue().number=  Lamp.num(i*entry3.getValue().res,0);
                                lux+=entry3.getValue().number;

                            }
                            if(entry3.getKey().startsWith("D")){
                                entry3.getValue().number=  Fan.num(i*entry3.getValue().res,0);
                            }
                            if(entry3.getKey().startsWith("A")){
                                entry3.getValue().number=  StandFan.num(i*entry3.getValue().res,0);
                            }
                            if(entry3.getKey().startsWith("S")){
                                entry3.getValue().number=  i*entry3.getValue().res;
                            }
                        }
                    }
                }
            }
        }
//        Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
//        Iterator<Map.Entry<String, Equipment>> iterator = entries.iterator();
//
//        Map.Entry<String,Equipment> lastEntry = null;
//
//        while(iterator.hasNext()) {
//            Map.Entry<String, Equipment> entry = iterator.next();
//            if (!iterator.hasNext()) { // 判断是否为最后一个键值对
//                lastEntry = entry;
//            }
//        }
//if(lastEntry != null){
//    Series ser1=(Series) lastEntry.getValue();
//    System.out.println("串联电路名字"+lastEntry.getKey());
//    System.out.println("串联电路总电阻"+lastEntry.getValue().res);
//    Set<Map.Entry<String, Equipment>> entries1 = ser1.ser.entrySet();
//
//
//    for(Map.Entry<String, Equipment> entry : entries1){
//        System.out.println("用电器名字"+entry.getKey());
//        if(entry.getKey().startsWith("M")){
//            Parallel pa=(Parallel) entry.getValue();
//            System.out.println("并联总电阻"+pa.res);
//            Set<Map.Entry<String, Series>> entries2 = pa.par.entrySet();
//            for (Map.Entry<String, Series> ignored : entries2){
//
//
//                System.out.println("并联支路名字"+ignored.getKey());
//                System.out.println("支路总电阻"+ignored.getValue().res);
//                System.out.println(ignored.getValue().number);
//                Set<Map.Entry<String, Equipment>> entries3 = ignored.getValue().ser.entrySet();
//                for (Map.Entry<String, Equipment> ignored1 : entries3){
//                    System.out.println("支路用电器"+ignored1.getKey());
//                    System.out.println("支路用电器电阻"+ignored1.getValue().res);
//                    System.out.println("支路用电器数据"+ignored1.getValue().number);
//                }
//            }
//        }else{
//            System.out.println("用电器数据"+entry.getValue().number);
//            System.out.println("用电器电阻"+entry.getValue().res);
//        }
//        System.out.println(" ");
//    }
//}
        Collections.sort(k);
        Collections.sort(f);
        Collections.sort(l);
        Collections.sort(b);
        Collections.sort(r);
        Collections.sort(d);
        Collections.sort(a);
        Collections.sort(c);

        Collections.sort(m);



         for(int i=0;i<k.size();i++){
             if(k.get(i).number==1){
                 System.out.println("@K"+k.get(i).sum+":closed");
             }
             else{
                 System.out.println("@K"+k.get(i).sum+":turned on");
                 v=0;
             }
         }
         for(int i=0;i<f.size();i++){
             System.out.println("@F"+f.get(i).sum+":"+f.get(i).number);
         }
         for(int i=0;i<l.size();i++){
             DecimalFormat df = new DecimalFormat("0.00");
             System.out.println("@L"+l.get(i).sum+":"+df.format(l.get(i).number));
         }
         for(int i=0;i<b.size();i++){

             System.out.println("@B"+b.get(i).sum+":"+(int)Math.floor(b.get(i).number));
         }
         for(int i=0;i<r.size();i++){
             System.out.println("@R"+r.get(i).sum+":"+(int)Math.floor(r.get(i).number));
         }
         for(int i=0;i<d.size();i++){
             System.out.println("@D"+d.get(i).sum+":"+(int)Math.floor(d.get(i).number));
         }
        for(int i=0;i<a.size();i++){
            System.out.println("@A"+a.get(i).sum+":"+(int)Math.floor(a.get(i).number));
        }

        for(int i=0;i<m.size();i++){
            if(m.get(i).number==1){
                System.out.println("@H"+m.get(i).sum+":closed");
            }
            if(m.get(i).number==2){
                System.out.println("@H"+m.get(i).sum+":turned on");
            }

        }
        for(int i=0;i<c.size();i++){

            System.out.println("@S"+c.get(i).sum+":"+(int)Math.floor(Curtain.num(lux,c.get(i).number)*100)+"%");
        }
    }
}
题目集八 7-1 家居强电电路模拟程序-4 智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能。请根据如下要去设计一个智能家居强电电路模拟系统。以下题目介绍中加粗的部分为本次迭代在“家居强电电路模拟程序-3”的基础上增加的功能要求。

这是电路迭代的最终版本,在本次迭代中,使并联中有再并联的可能,让对过程的处理变得很复杂,以及短路检测和最大电流限制.
源码如下:

点击查看代码
import java.text.DecimalFormat;
import java.util.*;

class Series extends Equipment{//串联
  Map<String,Equipment> ser=new LinkedHashMap<>();
    public Series(double number,double res,Map<String,Equipment> ser){
        super(number,res);
        this.ser=ser;

    }


    public double num(double a, double b) {
        return 0;
    }
}
class Parallel extends  Equipment{//并联


    Map<String,Series> par=new LinkedHashMap<>();
    public Parallel(double number,double res,Map<String,Series> ser){
        super(number,res);
        this.par=ser;
    }

    public double num(double a,double b){
        double r=0;
        Set<Map.Entry<String, Series>> entries = par.entrySet();
        for(Map.Entry<String, Series> entry: entries){
            if(entry.getValue().number==0){
            r+=1/entry.getValue().res;}
        }
        return 1/r;
    }
}
  class Equipment implements Comparable<Equipment>{
    double number;//开关的开关,调压器的档数,用电器的亮度,转速
    double res;//电阻
    int sum=0;//编号
    /*public Equipment() {
    }*/

    public Equipment(double number, double res){
        this.number=number;
        this.res=res;
        }


      @Override
      public int compareTo(Equipment o) {
          return this.sum-o.sum;
      }
  }
class Switch extends Equipment{//开关

    public Switch(double number,double res){
        super(number,res);

    }

    public static double num(double a, double b) {
        return 0;
    }

}
class Mutual extends Equipment{
    public Mutual(double number,double res){
        super(number,res);
    }


    public double num(double a, double b) {
        return 0;
    }
}
class Gears extends Equipment{//挡位变压器

    public Gears(double number,double res){
        super(number,res);

    }

    public static double num(double a,double b){
        switch ((int) a) {
            case 0 :   a= 0;break;
            case 1 : a=0.3;break;
            case 2 : a=0.6;break;
            case 3 : a=0.9;break;
            default : a=0.9;break;
        }
        return a;
    }
}
class Continu extends Equipment{//连续变压器

    public Continu(double number,double res){
        super(number,res);

    }

    public double num(double a, double b) {
        return 0;
    }
}
class Bulb extends Equipment{//日光灯

    public Bulb(double number ){
        super(number,10);

    }

    public static double num(double v,double b){
        double number=0;
        if(v<9){
            number=0;
        }
        else{

            number= (5*v+300)/7;
        }
        return number;
    }
}
class Lamp extends Equipment{//白织灯

    public Lamp(double number ){
        super(number,5);

    }

    public static double num(double v,double b){
        double number=0;
        if(v==0){
            number=0;
        }else{
            number=180;
        }
        return number;
    }
}
class Fan extends Equipment{//风扇

    public Fan(double number,double speed){
        super(number,20);

    }

    public static double num(double v,double b){
        double number=0;
        if(v<80){
            number=0;
        }
        if(v>150){
            number=360;
        }
        else{
            number=(4*v)-240;
        }
        return number;
    }
}
class StandFan extends Equipment{//落地扇

    public StandFan(double number,double speed){
        super(number,20);

    }

    public static double num(double v,double b){
        double number=0;
        if(v<80){
            number=0;
        }
        else if(v<100){
            number=80;
        }
        else if(v<120){
            number=160;
        }
        else if(v<140){
            number=260;
        }
        else{
            number=360;
        }
        return number;
    }
}
class Curtain extends Equipment{
    public Curtain(double number){
        super(number,15);

    }

    public static double num(double lux,double v){
        double number=0;
        if(v>50){
            if(lux<50){
                number=1;
                return number;
            }
            if(lux<100){
                number=0.8;
                return number;
            }
            if(lux<200){
                number=0.6;
                return number;
            }
            if(lux<300){
                number=0.4;
                return number;
            }
            if(lux<400){
                number=0.2;
                return number;
            }
            if(lux>=400){
                number=0;
                return number;
            }
        }else{
            number=1;
        }
        return number;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String pi = scanner.nextLine();
        double v=220;
        Map<String,Equipment> ser=new LinkedHashMap<>();
        List <Switch> k =new ArrayList<>();
        List <Gears> f =new ArrayList<>();
        List <Continu> l =new ArrayList<>();
        List <Bulb> b =new ArrayList<>();
        List <Lamp> r =new ArrayList<>();
        List <Fan> d =new ArrayList<>();
        List <StandFan> a =new ArrayList<>();
        List<Curtain> c =new ArrayList<>();
        List<Mutual> m =new ArrayList<>();

        while(!pi.equals("end")){
            if(pi.startsWith("#T")){
                String Name=pi.substring(1,3);//串联电路名字
                Map<String,Equipment> series=new LinkedHashMap<>();
                double ress=0;//电阻和
                String[] pis=pi.split(" ");
                int number1=Integer.parseInt(pis[0].substring(2,3));
                for(int i=1;i<pis.length;i++){
                    if(pis[i].startsWith("K")){//开关

                        Switch k1=new Switch(0,0);
                        k1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment kk=k1;
                        k.add(k1);
                        series.put(pis[i].substring(0,2),kk);

                        //System.out.println(k1.open);
                    }
                    if(pis[i].startsWith("F")){//分档调速器

                        Gears f1=new Gears(0,0);
                        f1.sum=Integer.parseInt(pis[2].substring(1,2));
                        Equipment ff=f1;
                        f.add(f1);
                        series.put(pis[i].substring(0,2),ff);
                    }
                    if(pis[i].startsWith("L")){//连续调速器

                        Continu l1=new Continu(0,0);
                        l1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment ll=l1;
                        l.add(l1);
                        series.put(pis[i].substring(0,2),ll);

                    }
                    if(pis[i].startsWith("B")){

                        Bulb b1=new Bulb(0);
                        b1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment bb=b1;
                        b.add(b1);
                        series.put(pis[i].substring(0,2),bb);
                        //System.out.println(pis[i].substring(0,2));
                        ress+=10;
                    }
                    if(pis[i].startsWith("R")){

                        Lamp r1=new Lamp(0);
                        r1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment lr=r1;
                        r.add(r1);
                        series.put(pis[i].substring(0,2),lr);
                        ress+=5;
                    }
                    if(pis[i].startsWith("D")){//风扇

                        Fan d1= new Fan(0,0);
                        d1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment df=d1;
                        d.add(d1);
                        series.put(pis[i].substring(0,2),df);
                        ress+=20;
                    }
                    if(pis[i].startsWith("A")){//落地扇

                        StandFan a1= new StandFan(0,0);
                        a1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment sa1=a1;
                        a.add(a1);
                        series.put(pis[i].substring(0,2),sa1);
                        ress+=20;
                    }
                    if(pis[i].startsWith("S")){
                        Curtain c1= new Curtain(0);
                        c1.sum=Integer.parseInt(pis[i].substring(1,2));
                        Equipment sc1=c1;
                        c.add(c1);
                        series.put(pis[i].substring(0,2),sc1);
                        ress+=15;

                    }
                    if(pis[i].startsWith("H")){
                        Mutual m1= new Mutual(0,0);
                        m1.sum=Integer.parseInt(pis[i].substring(1,2));
                        if(Integer.parseInt(pis[i].substring(3,4))==1){
                            if(Integer.parseInt(pis[i+1].substring(4,5))==2){//1,3接通 2,4断开
                                m1.number=1;
                            }else if(Integer.parseInt(pis[i+1].substring(4,5))==3){
                                m1.number=4;
                            }
                        }
                        if(Integer.parseInt(pis[i].substring(3,4))==2){
                            m1.number=1;
                        }
                        if(Integer.parseInt(pis[i].substring(3,4))==3){
                            m1.number=4;
                        }
                        Equipment mm=m1;

                        m.add(m1);
                        series.put(pis[i].substring(0,2),mm);
                        if(pi.substring(5,6).equals("V")){
                            if(m1.number==1){
                                ress+=5;
                            }
                            if(m1.number==4){
                                ress+=10;
                            }
                        }

                    }
                    if(pis[i].startsWith("M")){
                        Equipment n=null;
                        double res=0;
                        Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
                        for(Map.Entry<String, Equipment> entry : entries){
                            if(entry.getKey().equals(pis[i].substring(0,2))){
                                res=entry.getValue().res;
                                n=entry.getValue();
                            }
                        }
                        //Parallel par=new Parallel(0,res,map);
                        series.put(pis[i].substring(0,2),n);



                    }
                }
                Series ser1=new Series(0,ress,series);
                ser.put(Name,ser1);

            }
            if(pi.startsWith("#M")){

                String[] pis=pi.split(" ");

                Map<String,Series> par=new LinkedHashMap<>();
                String Name=pi.substring(1,3);

                for(int i=0;i<pis.length;i++){
                    String con;
                    if(i==0){
                         con=pis[i].substring(5,7);

                    }else{
                        con=pis[i].substring(0,2);
                    }
                    Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
                    for(Map.Entry<String, Equipment> entry : entries){
                        if(entry.getKey().equals(con)){
                            par.put(entry.getKey(),  (Series) entry.getValue());
                        }
                    }
                }
                double ress=0;


                Parallel pa2=new Parallel(0,0,par);
                ress= pa2.num(0,0);
                pa2.res = ress;
                ser.put(Name,pa2);
            }
            if(!pi.startsWith("#T")&&!pi.startsWith("#M")){
                break;
            }
            pi=scanner.nextLine();
        }//数据输入
        while(!pi.equals("end")){
            if(pi.startsWith("#K")){
                for(int i=0;i<k.size();i++){
                    if(k.get(i).sum==Integer.parseInt(pi.substring(2,3))){
                        if(k.get(i).number==1){
                            k.get(i).number=0;
                        }
                        else{
                            k.get(i).number=1;
                        }
                    }
                }
            }
            if(pi.startsWith("#F")){
                for(int i=0;i<f.size();i++){
                    if(f.get(i).sum==Integer.parseInt(pi.substring(2,3))){
                        if(pi.substring(3).equals("+")){
                            if(f.get(i).number>=3){

                            }else{
                                f.get(i).number++;}
                        }
                        if(pi.substring(3).equals("-")){
                            if(f.get(i).number<=0){

                            }
                            else{
                                f.get(i).number--;}
                        }
                    }
                }
            }
            if(pi.startsWith("#L")){
                String[] pip=pi.split(":");
                for(int i=0;i<l.size();i++){
                    if(l.get(i).sum==Integer.parseInt(pi.substring(2,3))){
                        // System.out.println(number);
                        l.get(0).number= Double.parseDouble(pip[1]);
                    }
                }

            }
            if(pi.startsWith("#H")){
                for(int i=0;i<m.size();i++){
                    if(m.get(i).sum==Integer.parseInt(pi.substring(2,3))){
                        if(m.get(i).number==2){
                            m.get(i).number=1;
                        }
                        if(m.get(i).number==1){
                            m.get(i).number=2;
                        }
                        if(m.get(i).number==3){
                            m.get(i).number=4;
                        }
                        if(m.get(i).number==4){
                            m.get(i).number=3;
                        }
                    }
                }
            }
            pi=scanner.nextLine();
        }
        Set<Map.Entry<String, Equipment>> entries4 = ser.entrySet();
        Iterator<Map.Entry<String, Equipment>> iterator1 = entries4.iterator();

        Map.Entry<String, Equipment> lastEntry1 = null;

        while(iterator1.hasNext()){
            Map.Entry<String, Equipment> entry2 = iterator1.next();
            if(!iterator1.hasNext()){
                lastEntry1 = entry2;

            }
        }
        if(lastEntry1!=null){
            Series Ser=(Series) lastEntry1.getValue();
            Set<Map.Entry<String, Equipment>> entries = Ser.ser.entrySet();


            for(Map.Entry<String, Equipment> entry : entries){
                if(entry.getKey().startsWith("F")){
                    v*=Gears.num(entry.getValue().number,0);
                }
                if(entry.getKey().startsWith("L")){
                    v*=entry.getValue().number;
                }
                if(entry.getKey().startsWith("K")){
                    if(entry.getValue().number==0){
                        v=0;
                    }
                }

                if(entry.getKey().startsWith("M")){
                    Parallel Pa=(Parallel) entry.getValue();
                    Set<Map.Entry<String, Series>> entries1 = Pa.par.entrySet();


                    for(Map.Entry<String, Series> entry2 : entries1){
                        Set<Map.Entry<String, Equipment>> entries2 = entry2.getValue().ser.entrySet();



                        for(Map.Entry<String, Equipment> entry3 : entries2){
                            if(entry3.getKey().startsWith("K")){
                                if(entry3.getValue().number==0){
                                    entry2.getValue().number=1;
                                }
                            }
                            if(entry3.getKey().startsWith("H")){
                                if(entry3.getValue().number==2){
                                    entry2.getValue().number=1;
                                }
                                if(entry3.getValue().number==1){
                                    entry2.getValue().res+=5;
                                }
                                if(entry3.getValue().number==3){
                                    entry2.getValue().res-=10;
                                }
                                if(entry3.getValue().number==4){
                                    entry2.getValue().number=1;
                                }
                            }
                        }

                    }
                    Pa.res=Pa.num(0,0);
                    lastEntry1.getValue().res+=Pa.res;
                }
            }
        }
        Set<Map.Entry<String, Equipment>> entries5 = ser.entrySet();
        Iterator<Map.Entry<String, Equipment>> iterator2 = entries5.iterator();

        Map.Entry<String, Equipment> lastEntry2 = null;

        while(iterator2.hasNext()){
            Map.Entry<String, Equipment> entry2 = iterator2.next();
            if(!iterator2.hasNext()){
                lastEntry2 = entry2;
            }
        }
        double lux=0;
        if(lastEntry2!=null){
            Series Ser=(Series) lastEntry2.getValue();
            double I=v/lastEntry2.getValue().res;

            Set<Map.Entry<String, Equipment>> entries = Ser.ser.entrySet();
            for(Map.Entry<String, Equipment> entry : entries){

                if(entry.getKey().startsWith("B")){
                    entry.getValue().number=  Bulb.num(I*entry.getValue().res,0);
                    lux+=entry.getValue().number;

                }
                if(entry.getKey().startsWith("R")){
                    entry.getValue().number=  Lamp.num(I*entry.getValue().res,0);
                    lux+=entry.getValue().number;

                }
                if(entry.getKey().startsWith("D")){
                    entry.getValue().number=  Fan.num(I*entry.getValue().res,0);

                }
                if(entry.getKey().startsWith("A")){
                    entry.getValue().number=  StandFan.num(I*entry.getValue().res,0);
                }
                if(entry.getKey().startsWith("S")){
                    entry.getValue().number=  I*entry.getValue().res;
                }
                if(entry.getKey().startsWith("M")){
                    Parallel Pa=(Parallel) entry.getValue();
                    double V=I*Pa.res;
                    Set<Map.Entry<String, Series>> entries1 = Pa.par.entrySet();
                    for(Map.Entry<String, Series> entry2 : entries1){
                        if(entry2.getValue().number==1){
                            continue;
                        }
                        double i=V/entry2.getValue().res;
                        Set<Map.Entry<String, Equipment>> entries2 = entry2.getValue().ser.entrySet();
                        for(Map.Entry<String, Equipment> entry3 : entries2){
                            if(entry3.getKey().startsWith("B")){
                                entry3.getValue().number=  Bulb.num(i*entry3.getValue().res,0);
                                lux+=entry3.getValue().number;
                            }
                            if(entry3.getKey().startsWith("R")){
                                entry3.getValue().number=  Lamp.num(i*entry3.getValue().res,0);
                                lux+=entry3.getValue().number;

                            }
                            if(entry3.getKey().startsWith("D")){
                                entry3.getValue().number=  Fan.num(i*entry3.getValue().res,0);
                            }
                            if(entry3.getKey().startsWith("A")){
                                entry3.getValue().number=  StandFan.num(i*entry3.getValue().res,0);
                            }
                            if(entry3.getKey().startsWith("S")){
                                entry3.getValue().number=  i*entry3.getValue().res;
                            }
                        }
                    }
                }
            }
        }
//        Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
//        Iterator<Map.Entry<String, Equipment>> iterator = entries.iterator();
//
//        Map.Entry<String,Equipment> lastEntry = null;
//
//        while(iterator.hasNext()) {
//            Map.Entry<String, Equipment> entry = iterator.next();
//            if (!iterator.hasNext()) { // 判断是否为最后一个键值对
//                lastEntry = entry;
//            }
//        }
//if(lastEntry != null){
//    Series ser1=(Series) lastEntry.getValue();
//    System.out.println("串联电路名字"+lastEntry.getKey());
//    System.out.println("串联电路总电阻"+lastEntry.getValue().res);
//    Set<Map.Entry<String, Equipment>> entries1 = ser1.ser.entrySet();
//
//
//    for(Map.Entry<String, Equipment> entry : entries1){
//        System.out.println("用电器名字"+entry.getKey());
//        if(entry.getKey().startsWith("M")){
//            Parallel pa=(Parallel) entry.getValue();
//            System.out.println("并联总电阻"+pa.res);
//            Set<Map.Entry<String, Series>> entries2 = pa.par.entrySet();
//            for (Map.Entry<String, Series> ignored : entries2){
//
//
//                System.out.println("并联支路名字"+ignored.getKey());
//                System.out.println("支路总电阻"+ignored.getValue().res);
//                System.out.println(ignored.getValue().number);
//                Set<Map.Entry<String, Equipment>> entries3 = ignored.getValue().ser.entrySet();
//                for (Map.Entry<String, Equipment> ignored1 : entries3){
//                    System.out.println("支路用电器"+ignored1.getKey());
//                    System.out.println("支路用电器电阻"+ignored1.getValue().res);
//                    System.out.println("支路用电器数据"+ignored1.getValue().number);
//                }
//            }
//        }else{
//            System.out.println("用电器数据"+entry.getValue().number);
//            System.out.println("用电器电阻"+entry.getValue().res);
//        }
//        System.out.println(" ");
//    }
//}
        Collections.sort(k);
        Collections.sort(f);
        Collections.sort(l);
        Collections.sort(b);
        Collections.sort(r);
        Collections.sort(d);
        Collections.sort(a);
        Collections.sort(c);

        Collections.sort(m);



         for(int i=0;i<k.size();i++){
             if(k.get(i).number==1){
                 System.out.println("@K"+k.get(i).sum+":closed");
             }
             else{
                 System.out.println("@K"+k.get(i).sum+":turned on");
                 v=0;
             }
         }
         for(int i=0;i<f.size();i++){
             System.out.println("@F"+f.get(i).sum+":"+f.get(i).number);
         }
         for(int i=0;i<l.size();i++){
             DecimalFormat df = new DecimalFormat("0.00");
             System.out.println("@L"+l.get(i).sum+":"+df.format(l.get(i).number));
         }
         for(int i=0;i<b.size();i++){

             System.out.println("@B"+b.get(i).sum+":"+(int)Math.floor(b.get(i).number));
         }
         for(int i=0;i<r.size();i++){
             System.out.println("@R"+r.get(i).sum+":"+(int)Math.floor(r.get(i).number));
         }
         for(int i=0;i<d.size();i++){
             System.out.println("@D"+d.get(i).sum+":"+(int)Math.floor(d.get(i).number));
         }
        for(int i=0;i<a.size();i++){
            System.out.println("@A"+a.get(i).sum+":"+(int)Math.floor(a.get(i).number));
        }

        for(int i=0;i<m.size();i++){
            if(m.get(i).number==1){
                System.out.println("@H"+m.get(i).sum+":closed");
            }
            if(m.get(i).number==2){
                System.out.println("@H"+m.get(i).sum+":turned on");
            }

        }
        for(int i=0;i<c.size();i++){

            System.out.println("@S"+c.get(i).sum+":"+(int)Math.floor(Curtain.num(lux,c.get(i).number)*100)+"%");
        }
    }
}
三,踩坑心得 在对循环的进行时,要理清循环的逻辑,在代码出问题时要先看是不是什么打错了,再对自身逻辑提出质疑,要活用调试. 在题目集7中,代码出现问题,我就一直对自身逻辑进行怀疑,思考,最后发现错误在一个循环中,循环的数据写错了,导致的结果,所以以后要避免这种情况. 要理清思路在写代码,不可在对某个过程不了解的情况下写代码,容易出现巨大错误,以致代码白写. 要注意不同数据类型之间的转换,尤其是在基本数据类型和包装类之间的转换时,可能会出现精度丢失或者异常情况 五,总结 在题目集中面临了更多挑战和难题,需要深入思考和更多的编程技巧,对于类的设计要更加巧妙,充分运用多态,继承等类的关系,在写代码时要多思考,在思考充分后再写,效率会更高,在遇到问题时,要多运用身边的资源 ,通过这么多题目,在解决问题的能力和编程技巧上得到了提升。我会继续学习和提升自己的编程能力,以应对更多复杂的编程挑战。

标签:entry3,第三次,double,number,getValue,Blog,res,entry
From: https://www.cnblogs.com/dzldzl/p/18276947

相关文章

  • 第三次Blog
    7-1家居强电电路模拟程序-3分数100作者蔡轲单位南昌航空大学智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家......
  • 第三次学习总结
    Java,作为一门广泛应用的编程语言,已经深深地影响了软件开发领域。随着互联网技术的飞速发展,Java在服务器端、移动端、嵌入式系统等领域都发挥着重要的作用。本文将从Java的基本概念、特性、核心技术以及实际应用等方面进行总结,以期帮助初学者更好地掌握Java编程技能。Java是一种面......
  • 第三次blog
    一.前言1.题目集7~8的知识点:(1)类与对象:各个电路设备类型被建模为类,每个类封装了设备的状态和行为。(2)继承与多态:使用继承来建立设备类之间的关系,并通过方法重写实现多态性,确保同一方法针对不同类型的设备表现出不同行为。(3)接口与排序:接口被用于定义设备类的排序规则,确保设备对象......
  • 23201826-熊锋-第三次blog
    一.前言这两次pta作业第一次为家居强电电路模拟程序-3,这次题型,是在家居强电电路模拟程序-2的基础上进行迭代,虽然仅仅只增加了互斥开关等,但带来的改变同上一次十分巨大,通路的判断不再仅仅局限于各个控制设备0与1,而是要判断多个控制设备的开闭,其位置乃至互斥开关的实际情况,使得并联......
  • 第三次blog
    1.前言一、知识点关于类1:类似于C语言的结构体,但比C语言中的结构体作用更多,且适用范围更广2:懂得封装和公开的区别,即private和public的区别,用private可以防止数据的泄露3:用类把题目分解,以便更好的解决题目,创立多个类,来分解题目。4:在Java开发中,类是实现功能的基础。通过定义类,......
  • 第三次Blog
    (1) 前言:第七次大作业与第八次大作业知识点要是继承与多态并且对类方法的运用,题量比较大,难度也是不断上升。第七次大作业在第六次大作业基础上增加了受控窗帘这一受控设备与互斥开关这一控制开关,并考虑了一条总电路上有多个并联电路,输入信息也变得与第六次大作业不一样,但输出信息大......
  • 23201115-邓俊豪-第三次blog
    目录blog2前言关于难度和题目量关于知识点设计与分析pta-7一、项目简介二、项目实现三、项目测试四、代码示例五、总结六、代码分析pta-8一、项目简介二、项目实现三、项目测试四、代码示例五、总结六、代码分析改进建议blog2前言关于难度和题目量前三次大作业难度属于偏难水......
  • PTA题目集7~8的总结性Blog
    前言:对于我这种水平的学生来说本次的7-8次PTA的难度之大令我无从下手,况且之前的第6次PTA就已经让我望而止步了,更别提这两次在第6次PTA题目集之上再次进行迭代的题目了。再加上面临的期末周,大量学科等着我去复习,以至于没时间去钻磨PTA的改动,哭死,连老师都说单单是第8次题目集的题目......
  • 第三次blog
    一:前言这是最后一次大作业了,本次大作业让我感觉到难度很大,同时让我也学会了不少东西。学会了如何采用面对对象程序设计,更好的满足对象的需求,使得代码的功能性更强,同时使代码更加严谨,有效。智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音......
  • PTA题目集7~8总结性Blog
    (1)前言题目集7,8主要涉及以下知识点,Java是一种面向对象的编程语言,需要理解类和对象的概念,如何设计和实现各种设备的类。设计控制设备类和受控设备类,理解如何通过类和对象来模拟真实世界中的设备和其行为。通过继承和多态实现设备之间的关系和行为的多样化。例如,可以将不同类型的......