我只是想在android studio中创建一个小型android应用程序来转换货币。
我使用了两个Spinner
对象来仅保存3个值(美元、英镑、欧元):
if(actualType.equals("USD")){
if(wantedType.equals("POUND")){
montantConv = montantNonConv * 0.87;
}
else if(wantedType.equals("EURO")){
montantConv = montantNonConv;
}
}
else if(actualType.equals("POUND")){
if(wantedType.equals("EURO")){
montantConv = montantNonConv * 1.15;
}
else if(wantedType.equals("USD")){
montantConv = montantNonConv * 1.15;
}
}
else if(actualType.equals("EURO")){
if(wantedType.equals("USD")){
montantConv = montantNonConv * 1;
}
else if(wantedType.equals("POUND")){
montantConv = montantNonConv * 0.87;
}
}
使用if-else时,代码太长,无法组合3个选项(输入+输出)。
我只是想知道有没有更好的算法可以做到这一点?有50多种货币可供选择的在线货币是如何做到的?
1条答案
按热度按时间vsmadaxz1#
正如您所发现的,在转换逻辑中输入货币名称不是一个好主意。这同样适用于转换值。您应该希望编写代码来最小化类似的事情。您希望对实际的转换逻辑进行编码,而不明确知道(“硬编码”)货币名称或汇率。
与其在代码中使用类似
actualType.equals("POUND")
的内容,不如尝试使用具有由变量actualType.equals(otherType)
表示的每个值的代码。在现实生活中,您的数据可能来自外部源,例如文本文件、数据库或其他计算机。在小型演示应用程序中,您可能希望在程序启动时加载数据,并使用数组和/或
Collection
对象存储数据。此时,您还将使用相同的数据加载Spinner
对象中的值。你可能会考虑是否值得再上一堂课:
等等。(注意:我省略了可见性说明符。)
在转换应用程序中,您可以使用数组模拟外部源:
创建另一个
class
以粘合货币和汇率因素的替代方法是使用Map <String, Double>
,货币名称作为键,汇率因素作为值。因此,转换应用程序可能有如下方法:
根据名称和值的存储方式,它将使用字符串值查找2个转换值。汇率将是与
selling
相关的转换值除以与buying
相关联的转换值。