Java 如何更改使用许多if语句按名称选择类的代码?

Java 如何更改使用许多if语句按名称选择类的代码?,java,Java,我正在做一个程序来模拟RLC电路。该程序根据电路类型和电源类型(RLC、LC、RC、正弦、DC、方形…)进行一些具体计算,这些计算随后添加到图表中 下面的代码按照我需要的方式工作,但是我的老师告诉我,如果我为每种情况都单独创建一个类会更好,因为太多的if语句都不好 if(scheme == "RLC"){ beta = R / (2*L); omega0Square = 1/ (L*C); //Resonant if (omega

我正在做一个程序来模拟RLC电路。该程序根据电路类型和电源类型(RLC、LC、RC、正弦、DC、方形…)进行一些具体计算,这些计算随后添加到图表中

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

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"){

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

String name;
name variable = new name();

可能吗?或者有更好的方法吗?

因为你们有不同的电路,我不认为你们真的可以逃避使用if语句或者更优雅的方法来使用switch。你的老师为每个电路创建单独的类是什么意思,因为他希望你在if语句中有一小段代码如果你像现在这样开始编码,这将是一个巨大的功能。

使用接口和

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

创建一个接口

public interface CircuitCalculator {
    public double calculate(RLCHolder rlcHolder);
}
public class RLCCircuitCalculator implements CircuitCalculator {

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

}
现在实现接口

public interface CircuitCalculator {
    public double calculate(RLCHolder rlcHolder);
}
public class RLCCircuitCalculator implements CircuitCalculator {

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

}
像这样,为其他电路添加实现,如

LCCircuitCalculator
RCCircuitCalculator
等等

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

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);
    }

}

在你问下一个问题之前。不要使用
=
比较字符串值,使用
equals()
。我同意邹祖的观点,你现在应该使用equals,因为它不起作用(还要注意,Java允许在
switch
语句中使用字符串。)是的。我最初计划使用命令编写,但后来使用lazy,只使用接口。谢谢你的来信。纠正了吗