我已经尝试过搜索它,但我现在还不知道如何正确地提出问题......
我有一个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 {}
如你所知,我是初学者,我在制定我需要的东西时遇到了问题。
答案 0 :(得分:13)
怎么样:
int[] validOptions = { 1, 2, 3, 5, 7, 8, 9, 17, 81, 551 };
if (Arrays.binarySearch(validOptions, n) >= 0)
{
// Yup, found it
}
请注意,我重新排序了您的原始支票(例如,在17之前有551),以便对数组进行排序。二进制搜索仅使用已排序的数据。
我只是在这里建议一个数组,理由是它更容易指定,特别是当你处理一个原始类型时。如果您希望这些是动态的,List<Integer>
或HashSet<Integer>
会更合适。
请注意,虽然在集合较小时几乎肯定无关紧要,但值得考虑不同查找的性能特征:
HashSet.contains
- O(1)Arrays.binarySearch
- O(log N)ArrayList.contains
- O(N)答案 1 :(得分:3)
是的,将所有内容都放在ArrayList
中,然后使用.contains(Object obj)
方法:
List<Integer> numbers = new ArrayList<Integer>();
number.add(...;
if(numbers.contains(n))
{
...
}
答案 2 :(得分: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))
使用HashSet
会让它表现得非常好。
答案 3 :(得分:1)
您的列表方法是正确的。你可以这样做:
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)) {
...
}
答案 4 :(得分:1)
function arrayinside(n, listofn) {
var length = listofn.length;
for(var i = 0; i < length; i++) {
if(listofn[i] == n) return true;
}
return false;
}
试试这个