我正在尝试做一个简单的转换单元应用程序。我有2个微调器,其中一个包含一个说明不同类型单元的阵列。
当我根据两个微调器中选择的内容按下转换按钮时,应该做一些事情。
示例:微调器1 - 选定的POUNDS US / Spinner2 - 选定的KiloGrams 当我按下转换按钮时,它将其转换并显示在另一个文本框中。
我的问题是我必须每次检查每个微调器中选择的内容...这将是很多if,否则if语句和我希望我是否可以使用带有Integer的开关来完成它阵列。这是我的代码,以了解更多。
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))));
}
}
数组位置包含在微调器中选择的值。有没有办法使用诸如位置[0,0],位置[0,1]等之类的东西来做一个switch语句,或者是一种更好的方法呢?
答案 0 :(得分:1)
只是一个想法,可能有比这更好的想法
最初创建一个维度为
的二维数组a[ number of first spinner's item][number of second spinner's item]
使用转换因子初始化数组。例如
如果kg到pouds转换因子是2.2。在您的旋转器中,1 kg的指数为1,而在旋转器中,2 kg的指数为3,则
a[1][3] = 2.2
现在按下转换按钮时,请执行以下操作
result = value*a[spiner1 index][spinner 2 index]
可见优势:
可见缺点
答案 1 :(得分:1)
作为一个例子,为了将质量转换为不同的单位,我将通过一个中间单位。
例如。让我说我有以下
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;
}
}
无论如何,这只是我对这个问题的看法。 您的纺纱厂可以采取什么价值?因为让某人试图将千米转换成公斤是没有意义的,所以取决于你如何分解你的程序(即这种形式只是为了转换质量?)那么也许你可以稍微改变它。
您可以让用户在第一个微调器中选择源类型,然后仅使用那些有意义的类型更新第二个微调器,例如,如果第一个微调器选择为“千米”,则第二个微调器可以选择“英里“,”厘米“,”码“等。