我正在尝试做一个简单的转换单位应用程序。我有两个微调器,其中一个包含一个数组,表示不同类型的单位。
当我根据在两个微调器中选择的内容按下转换按钮时,应该会执行一些操作。
示例:微调器1-选中磅US / Spinner2 -选中它们当我按下KiloGrams按钮时,它会将其转换并显示在另一个文本框中。
我的问题是,我每次都要检查在每个微调器中选择了什么……这将是大量的if,else if语句,我希望如果我可以使用一个带整数数组的switch来实现它。为了更好地理解它,下面是我的代码。
private void mass() {
num = (Double.parseDouble(input.getText().toString()));
int position1 = sInput.getSelectedItemPosition();
int position2 = sResult.getSelectedItemPosition();
int[] position = new int[] {position1, position2};
if(position[0] == 1 && position[1] == 6) {
setValue((Double.toString(round(num / 2.2))));
} else if(position1 == 6 && position2 == 1) {
setValue((Double.toString(round(num * 2.2))));
}
}
数组位置保存在微调器中选定的值。
发布于 2013-05-23 03:06:22
例如,为了将质量转换为不同的单位,我会使用一个中间单位。
例如:
final int TYPE_KG = 0;
final int TYPE_POUNDS = 1;
// these two values come from your spinners
int sourceUnitType; // eg 0=kg, 1=pounds, ...
int destUnitType; // same types as the source unit type
然后,您可以使用函数将源数字转换为中间单位,如千克
double convertMassToKg(int sourceUnitType, double source)
{
switch (sourceUnitType)
{
case TYPE_KG:
return source;
case TYPE_POUND:
return source * 0.453592;
}
}
double convertKgToMass(int destinationUnitType, double kilos)
{
switch (destinationUnitType)
{
case TYPE_KG:
return kilos;
case TYPE_POUND:
return kilos / 0.453592;
}
}
这只是我对这个问题的看法。您的微调器可以采用什么值?例如,因为让别人尝试将千米转换为千克是没有意义的,所以这取决于您如何分解您的程序(即,此形式是否仅用于转换质量?)那么也许你可以以不同的方式来处理它。
你可以让用户在第一个微调器中选择源类型,然后只用那些有意义的类型来更新第二个微调器,例如,如果第一个微调器被选择为“千米”,那么第二个微调器可以有“英里”、“厘米”、“码”等选项。
发布于 2013-05-23 03:03:08
这只是一个想法,也许还有比这更好的想法
最初创建二维数组a,其维数为
a[ number of first spinner's item][number of second spinner's item]
已使用转换因子初始化数组。例如
如果kg到豆荚的转换因子是2.2。在旋转器中,1 kg的索引是1,而在旋转器中,2 kg的索引是3
a[1][3] = 2.2
现在,当按下转换按钮时,执行以下操作
result = value*a[spiner1 index][spinner 2 index]
的明显优势:
易于在单个数组中进行computation
的
可见的劣势
https://stackoverflow.com/questions/16704924
复制相似问题