Java 如何更改使用许多if语句按名称选择类的代码?
我正在做一个程序来模拟RLC电路。该程序根据电路类型和电源类型(RLC、LC、RC、正弦、DC、方形…)进行一些具体计算,这些计算随后添加到图表中 下面的代码按照我需要的方式工作,但是我的老师告诉我,如果我为每种情况都单独创建一个类会更好,因为太多的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
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,只使用接口。谢谢你的来信。纠正了吗