没有"if-else"或"switch-case"的度量转换算法

Tea*_*ava 4 java 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结构.我的程序可以转换这些东西和对立面;

  • 海里 - 公里
  • 海里英里
  • 英尺 - 公里
  • 英尺 - 米尔
  • 磅 - 公斤
  • ons- gr
  • inc - cm
  • 院子里 - 米
  • 结 - 公里

我的问题:我不想使用if-elseswitch-case结构化转换.(因为如果我使用if-else结构,我的代码看起来如此糟糕,容易和缓慢.如果我需要更多50 if-else结构使用这些结构.这是研究.)

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

das*_*ght 10

您不需要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