小编典典

没有“ if-else”或“ switch-case”的指标转换算法

algorithm

我想编写一个程序,可以将一个单元转换为另一个单元。假设我有2种方法。第一种方法可以进行 公制转换 ,第二种方法可以进行 权重转换 。例如;

1。 long km=metricConvLength(long mil,Enum.mil,Enum.km);//first method

2。 long agirlik=metricConvWeight(long kg,Enum.mil,Enum.km);//second method

我想对这些变量使用 Enum 结构。我的程序可以转换这些东西和相反的东西。

  • 海里-公里
  • 海里一英里
  • 英尺-公里
  • 英尺密耳
  • 磅-公斤
  • 昂斯
  • 英寸-厘米
  • 码-米
  • 结公里

我的问题: 我不想使用if-elseswitch-casestructs进行转换。(因为如果使用if-else
struct,我的代码看起来很糟糕,容易且缓慢。如果我需要的话,我需要50多个if-else struct使用这些结构。

我可以在不使用if-else或switch-case的情况下为这些转换编写算法吗? 我的目的是减少代码,增加工作量。关于算法的任何提示吗?


阅读 309

收藏
2020-07-28

共1个答案

小编典典

您不需要if-then-else-实际上,您的程序中不需要控制语句。您所需要的只是一个查找表-
该表Map将您的单位枚举double转换为转换因子,以便将度量单位乘以转换因子,您将获得米的空间单位和千克的重量单位。相反,将米除以该系数可以得到所需的单位。

有了此地图,您可以对所有成对的单位进行转换:

  • 查找Cs源单位的转换系数
  • 查找Cd目标单位的转换系数
  • 返回value * Cs / Cd结果。

例如,假设您要处理米,码,英寸和英尺。您的地图如下所示:

  • m-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
2020-07-28