0

我正在尝试做一个简单的转换单位应用程序。我有 2 个微调器,其中一个包含一个表示不同类型单位的数组。

当我根据两个微调器中选择的内容按下转换按钮时,应该做一些事情。

示例: Spinner 1 - 选定的 POUNDS US / Spinner2 - 选定的 KiloGrams 当我按下转换按钮时,它们会转换并显示在另一个文本框中。

我的问题是我必须每次检查每个微调器中选择的内容......这将是很多 if,else if 语句,我希望我是否可以使用带有整数数组的开关来做到这一点。这是我的代码,可以进一步了解它。

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))));
     }
}

数组位置保存在微调器中选择的值。有没有一种方法可以使用 position[0,0]、position[0,1] 等来执行 switch 语句,或者比这更好的方法?

4

2 回答 2

1

只是一个想法,可能有比这更好的想法

最初创建一个二维数组 a 其维度是

a[ number of first spinner's item][number of second spinner's item]

用转换因子初始化数组。例如

如果公斤到磅的转换因子是 2.2。在您的旋转器中,1 公斤的指数为 1,而在 2 公斤的旋转器中,指数为 3

a[1][3] = 2.2

现在当按下转换按钮时,请执行以下操作

result = value*a[spiner1 index][spinner 2 index]

可见优势:

  • 否 if else , 计算简单
  • 所有转换都在一个数组中,易于添加/编辑/更改

明显的缺点

  • 额外的数组内存和额外的初始化操作
于 2013-05-23T03:03:07.967 回答
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;
    }
}

无论如何,这只是我对这个问题的看法。您的微调器可以采用什么值?因为让某人尝试将公里转换为公斤是没有意义的,所以取决于您如何分解程序(即这种形式是否仅用于转换质量?)那么也许您可以稍微不同地处理它。

您可以让用户在第一个微调器中选择源类型,然后只用那些有意义的类型更新第二个微调器,例如,如果第一个微调器被选择为“公里”,那么第二个微调器可以有“英里”选项, “厘米”、“码”等

于 2013-05-23T03:06:22.250 回答