整数数组切换Android JAva

时间:2013-05-23 02:55:18

标签: java android algorithm

我正在尝试做一个简单的转换单元应用程序。我有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语句,或者是一种更好的方法呢?

2 个答案:

答案 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;
    }
}

无论如何,这只是我对这个问题的看法。 您的纺纱厂可以采取什么价值?因为让某人试图将千米转换成公斤是没有意义的,所以取决于你如何分解你的程序(即这种形式只是为了转换质量?)那么也许你可以稍微改变它。

您可以让用户在第一个微调器中选择源类型,然后仅使用那些有意义的类型更新第二个微调器,例如,如果第一个微调器选择为“千米”,则第二个微调器可以选择“英里“,”厘米“,”码“等。