首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改使用多个if语句的代码,以按名称选择一个类?

如何更改使用多个if语句的代码,以按名称选择一个类?
EN

Stack Overflow用户
提问于 2014-05-08 23:45:05
回答 2查看 73关注 0票数 0

我正在编写一个模拟RLC电路的程序。该程序根据电路类型和源类型(RLC、LC、RC、正弦、直流、正方形……)进行一些具体计算。稍后将其添加到图表中。

下面的代码按照我需要的方式工作,但我的老师告诉我,如果我为每个案例创建一个单独的类会更好,因为太多的if语句并不好。

代码语言:javascript
复制
if(scheme == "RLC"){
        beta = R / (2*L);
        omega0Square = 1/ (L*C);

        //Resonant
        if (omega * omega == omega0Square
                && beta >= Math.sqrt(omega0Square) / Math.sqrt(2)){

            chargeAmp = U0 / (L*2*beta*Math.sqrt(omega0Square - beta*beta));
            fi = Math.atan(Math.sqrt(omega0Square-2*beta*beta)/beta);   
        }

        //Non-resonant
        else{
            omegasDifference = (omega0Square - omega * omega);
            fi = Math.atan(2 * beta * omega / omegasDifference);
            chargeAmp = U0/(L*Math.sqrt(omegasDifference * omegasDifference
                        + 4 * beta * beta * omega * omega));
        }

        intensity = chargeAmp*omega* Math.cos(omega*time-fi);
        rU = R * intensity;
        cQ = chargeAmp*Math.sin(omega*time-fi);
        lE = L*intensity*intensity/2;
    }
    if(scheme == "LC"){

    }
    if(scheme == "RC"){

    }
    if(scheme == "R"){

    }
    if(scheme == "L"){

    }
    if(scheme == "C"){

    }
    if(scheme == "Non"){

    }

如果我为每个case都创建了一个类,我如何在以后管理它们,并在不使用If语句的情况下调用它们呢?我是这样想的:

代码语言:javascript
复制
String name;
name variable = new name();

有可能吗?还是有更好的方法?

EN

回答 2

Stack Overflow用户

发布于 2014-05-09 00:06:53

使用接口和factory pattern

创建一个类来保存值( R,L,C)

代码语言:javascript
复制
public class RLCHolder {
    double rValue;
    double lValue;
    double cValue;
    //Setter and Getters
}

创建接口

代码语言:javascript
复制
public interface CircuitCalculator {
    public double calculate(RLCHolder rlcHolder);
}

现在实现接口

代码语言:javascript
复制
public class RLCCircuitCalculator implements CircuitCalculator {

    @Override
    public double calculate(RLCHolder rlcHolder) {
        // Do you Math and Return
        return 0;
    }

}

像这样为其他电路添加你的实现。

LCCircuitCalculatorRCCircuitCalculator

现在创建Factory方法并调用calculate方法

代码语言:javascript
复制
public class Calculator {

    // factory method
    public static CircuitCalculator getCircuitCalculator(String circuitName){
        CircuitCalculator circuitCalculator = null;
        if (circuitName.equals("RLC")){
            circuitCalculator =  new RLCCircuitCalculator(); // You can cache if you dont maintain state
        }else if (circuitName.equals("LC")){
            // return LC object
        }//add your implementation..
        return circuitCalculator;
    }


    public static void main(String args[]){
        RLCHolder rlcHolder = new RLCHolder();
        double result = Calculator.getCircuitCalculator("RLC").calculate(rlcHolder);
    }

}
票数 2
EN

Stack Overflow用户

发布于 2014-05-09 00:02:15

因为你有不同的电路,我认为你不能不使用if语句或者更优雅的方式来使用switch。你的老师的意思是为每个电路创建单独的类,因为他希望你在if语句中有一小块代码,如果你像现在这样开始编码,它将是一个巨大的函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23546500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档