gpt4 book ai didi

java - 在没有大量 if else 的情况下将 VBA 条件 Switch 转换为 Java

转载 作者:行者123 更新时间:2023-12-04 20:36:24 25 4
gpt4 key购买 nike

我正在尝试转换 Excel VBA代码到 Java .由于 Java 的 switch 不接受条件大小写,我很困惑如何在没有一堆 if else 的情况下编写优雅的代码。陈述。

我拥有的 VBA 代码。

           Select Case a
Case Is < 12
b = (3000 + c) * 1.1
Case 12
b = 4000 + c
Case Is < 18
b = (4000 + c) * 1.1
Case 18
b = 4500 + c
Case Is < 24
b = (4500 + c) * 1.1
Case 24
b = 5000 + c
Case Is < 30
b = (5000 + c) * 1.1
Case 30
b = 5500 + c
Case Is < 36
b = (5500 + c) * 1.1
Case 36
b = 6000 + c
End Select

我不想最终用 Java 编写的代码。
    if(a<12)
b = (3000 + c) * 1.1;
if(a==12 )
b = 4000 + c;
if(a<18)
b = (4000 + c) * 1.1;
.
.
.
.
.

有没有更好的解决方案?任何建议和实现表示赞赏。

最佳答案

原始代码有不必要的重复,因此,您不应尝试按原样复制它。或者,如果您想这样做,您需要使用冗长的 if-else Java 中的阻塞,你想避免(并且应该)。

相反,我认为您应该分析底层(业务)逻辑并相应地进行重构。

就像是:

// assumes the given integer values are positive
public static double calculate(int a, int c) {
final double coefficient = 1.1;
final int multiplier = 6;
final int increment = 500;
final int baseValue = 3000;

if (a < 12) {
return (baseValue + c) * coefficient;
}

if (a <= 36) {
// int division is truncated to nearest int value
int result = ((a / multiplier) * increment) + baseValue + c;
if (a % multiplier == 0) {
return result;
} else {
return result * coefficient;
}
}
throw new IllegalArgumentException("Invalid value for a (" + a + ")");
}

代码的测试运行:
public static void main(String... args) {
final int c = 100;
for (int a = 1; a < 37; a++) {
System.out.println("calculate a:[" + a + "] for c:[" + c + "]. Result: [" + String.format("%.2f", calculate(a, c)) + "]");
}
}

控制台输出:
calculate a:[1] for c:[100]. Result: [3410,00]
calculate a:[2] for c:[100]. Result: [3410,00]
calculate a:[3] for c:[100]. Result: [3410,00]
calculate a:[4] for c:[100]. Result: [3410,00]
calculate a:[5] for c:[100]. Result: [3410,00]
calculate a:[6] for c:[100]. Result: [3410,00]
calculate a:[7] for c:[100]. Result: [3410,00]
calculate a:[8] for c:[100]. Result: [3410,00]
calculate a:[9] for c:[100]. Result: [3410,00]
calculate a:[10] for c:[100]. Result: [3410,00]
calculate a:[11] for c:[100]. Result: [3410,00]
calculate a:[12] for c:[100]. Result: [4100,00]
calculate a:[13] for c:[100]. Result: [4510,00]
calculate a:[14] for c:[100]. Result: [4510,00]
calculate a:[15] for c:[100]. Result: [4510,00]
calculate a:[16] for c:[100]. Result: [4510,00]
calculate a:[17] for c:[100]. Result: [4510,00]
calculate a:[18] for c:[100]. Result: [4600,00]
calculate a:[19] for c:[100]. Result: [5060,00]
calculate a:[20] for c:[100]. Result: [5060,00]
calculate a:[21] for c:[100]. Result: [5060,00]
calculate a:[22] for c:[100]. Result: [5060,00]
calculate a:[23] for c:[100]. Result: [5060,00]
calculate a:[24] for c:[100]. Result: [5100,00]
calculate a:[25] for c:[100]. Result: [5610,00]
calculate a:[26] for c:[100]. Result: [5610,00]
calculate a:[27] for c:[100]. Result: [5610,00]
calculate a:[28] for c:[100]. Result: [5610,00]
calculate a:[29] for c:[100]. Result: [5610,00]
calculate a:[30] for c:[100]. Result: [5600,00]
calculate a:[31] for c:[100]. Result: [6160,00]
calculate a:[32] for c:[100]. Result: [6160,00]
calculate a:[33] for c:[100]. Result: [6160,00]
calculate a:[34] for c:[100]. Result: [6160,00]
calculate a:[35] for c:[100]. Result: [6160,00]
calculate a:[36] for c:[100]. Result: [6100,00]

关于java - 在没有大量 if else 的情况下将 VBA 条件 Switch 转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42099478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com