我想编写一个可以将一个单位转换为另一个单位的程序。假设我有两种方法。第一种方法可以进行公制转换,第二种方法可以进行重量转换。例如;
1. long km=metricConvLength(long mil,Enum.mil,Enum.km);//第一种方法
2. long agirlik=metricConvWeight(long kg,Enum.mil,Enum.km);//第二种方法
我想为这些变量使用Enum 结构。 我的程序可以转换这些东西和对立面;
- 海里公里
- 海里-海里
- 英尺-公里
- 英尺-密尔
- 磅-公斤
- ons-gr
- 公司 - 厘米
- 码 - 米
- 节公里
我的问题:我不想使用 if-else
或 switch-case
结构进行转换。(因为如果我使用if-else 结构,我的代码看起来很糟糕,非常容易和缓慢。如果我使用这些结构,我需要超过 50 个 if-else 结构。这很麻烦。)
我能否在不使用 if-else 或 switch-case 的情况下为这些转换编写算法。 我的目的是更少的代码,更多的工作。关于算法有什么技巧吗?
最佳答案
您不需要 if-then-else
- 事实上,您的程序中不需要控制语句。您所需要的只是一个查找表 - 一个 Map
,它将您的单位枚举转换为 double
转换因子,以便将单位度量乘以您获得米的转换因子空间单位和重量单位公斤。相反,将米除以该系数即可得到所需的单位。
有了这张 map ,您可以对所有单位对进行转换:
- 查找源单位的转换系数
Cs
- 查找目标单位的转换系数
Cd
- 返回
value * Cs/Cd
作为结果。
例如,假设您要处理米、码、英寸和英尺。您的 map 将如下所示:
- 米 - 1.0
- y - 0.9144
- 在 - 0.0254
- 英尺 - 0.3048
现在假设您要将 7.5
码转换为英尺:
- 查找
Cs = 0.9144
- 查找
Cd = 0.3048
- 计算并返回
Res = 7.5 * 0.9144/0.3048 = 22.5
关于java - 没有 "if-else"或 "switch-case"的公制转换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17548187/