5

我试过搜索它,但我现在真的不知道如何正确地提出问题......

我有if-statement许多逻辑运算符。我如何更容易做到这一点?

If (n == 1 ||n == 2 ||n == 3  ||n == 5 ||n == 9 ||n == 8 ||n == 7 ||n == 551 ||n == 17 ||n == 81 || etc etc)
{ //Stuff
}

我在用伪代码思考我想要这样的东西:

List list = {1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, or 36 }

if n is in list, then {}

如您所知,我是初学者,在制定所需内容时遇到问题。

4

5 回答 5

13

怎么样:

int[] validOptions = { 1, 2, 3, 5, 7, 8, 9, 17, 81, 551 };

if (Arrays.binarySearch(validOptions, n) >= 0)
{
    // Yup, found it
}

请注意,我重新排序了您的原始支票(例如,在 17 之前有 551),以便对数组进行排序。二进制搜索适用于已排序的数据。

我只是在这里建议一个数组,因为它更容易指定,特别是当您处理原始类型时。如果您希望这些是动态的,aList<Integer>或 aHashSet<Integer>会更合适。

请注意,虽然几乎可以肯定在集合很小的情况下并不重要,但值得考虑不同查找的性能特征:

  • HashSet.contains- O(1)
  • Arrays.binarySearch- O(log N)
  • ArrayList.contains- 在)
于 2013-04-26T13:07:30.070 回答
3

是的,把所有东西都扔进去ArrayList,然后使用.contains(Object obj)方法:

List<Integer> numbers = new ArrayList<Integer>();
number.add(...;

if(numbers.contains(n))
{
    ...
}
于 2013-04-26T13:08:42.017 回答
2

试试这个:

 static private Set<Integer> set = new HashSet<Integer>(
     Arrays.asList(1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36));

然后测试:

if (set.contains(n))

使用 aHashSet会使它表现得非常好。

于 2013-04-26T13:11:22.753 回答
1

您的 List 方法是正确的。你可以这样做:

int[] values = {1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36 };
List<Integer> list = new ArrayList<Integer>();
if(values.asList(list).contains(n)) {
   ...
}
于 2013-04-26T13:09:15.857 回答
1
function arrayinside(n, listofn) {
    var length = listofn.length;
    for(var i = 0; i < length; i++) {
        if(listofn[i] == n) return true;
    }
    return false;
}

试试这个

于 2013-04-26T13:09:54.903 回答