如何处理批量if语句

时间:2014-02-03 15:05:18

标签: java android performance if-statement

我需要用768个不同的元素制作一个if-elseif语句。

是否有可能减少写作的努力?我知道这是一个奇怪的问题,但我需要测试768种不同的消息。

所以问题的确如此:

对于大量if语句是否有简单的方法,或者我只需要为行键入所有行?

如果有任何不清楚的地方,请随时提出。

修改

private static final String TEST = "0 0 0 0 0 40 ";
private static final String TEST2 = "0 96 0 0 0 d6 ";
private static final String TEST3 = "1 28 0 0 1 68 ";
private static final String TEST4 = "2 07 0 0 2 47 ";
private static final String TEST5 = "2 be 0 0 2 fe ";

if (data.contains(TEST)){
        progress = 0;
} else if (data.contains(TEST2)) {
        progress = 20;
} else if (data.contains(TEST3)) {
        progress = 40;
} else if (data.contains(TEST4)) {
        progress = 70;
} else if (data.contains(TEST5)) {
        progress = 96;
}

EDIT2:

这里有一些数学研究的样本数据:

00 00 00 00 00 40 00 00
00 00 00 00 00 40 00 00
00 01 00 00 00 41 00 00
00 02 00 00 00 42 00 00
00 03 00 00 00 43 00 00
00 04 00 00 00 44 00 00
00 05 00 00 00 45 00 00
00 06 00 00 00 46 00 00
00 07 00 00 00 47 00 00
00 08 00 00 00 48 00 00
.. .. .. .. .. .. .. .. 
01 00 00 00 01 40 00 00
.. .. .. .. .. .. .. .. 
02 00 00 00 02 40 00 00
.. .. .. .. .. .. .. ..
02 BF 00 00 02 FF 00 00

但有时在第7位还有另一个十六进制数在20到61之间。这就是问题所在。

4 个答案:

答案 0 :(得分:4)

使用HashMap。将条件存储为键,将响应存储为值。

答案 1 :(得分:4)

  

我需要用768个不同的元素制作一个if-elseif语句。

不,你没有。你在以后的问题中承认,当你写下:

  

我需要测试768种不同的消息

这不需要“带有768个不同元素的if-elseif语句”。虽然这可能是解决问题的一种方法,但正如您所指出的那样,这不是一个很好的解决方案。

  

对于大量if语句是否有简单的方法,或者我只需要为行键入所有行?

不要做其中任何一个。

步骤1:在HashMap<String, Integer>中获取测试字符串(例如,从XML资源加载它们)。

步骤2:迭代keySet()的{​​{1}},并测试每个密钥。如果匹配,请将HashMap设置为progress中的相应值,并将HashMap设置为迭代循环中的相应值。

答案 2 :(得分:2)

使用以下内容:

static class TestWithProgress {
    final String test;
    final int progress;

    TestWithProgress(String test, int progress) {
        this.test = test;
        this.progress = progress;
    }
}

private static TestWithProgress[] TWIPS = new TestWithProgress[] {
    new TestWithProgress("0 0 0 0 0 40 ", 0),
    new TestWithProgress("0 96 0 0 0 d6 ", 20),
    ...
};

现在你可以使用for循环:

for (TestWithProgress  twip : TWIPS) {
    if (data.contains(twip.test)) {
        progress = twip.progress;
        break;
    }
}

答案 3 :(得分:-3)

如果我必须面对这个问题,我可以使用

Switch(str){
case:strCheck
}