我是一个java新手,我正在尝试为这种情况做一个搜索算法。
我正在尝试搜索一组12个整数,以找到一个等于1的值,类似于这个长的if-else链。
if (var1 == 1){
break;
} else if (var2 == 1){
break;
} else if (var3 == 1){
break;
} else if (var4 == 1){
break;
} else if (var5 == 1){
break;
} else if (var6 == 1){
break;
} else if (var7 == 1){
break;
} else if (var8 == 1){
break;
} else if (var9 == 1){
break;
} else if (var10 == 1){
break;
} else if (var11 == 1){
break;
} else if (var12 == 1){
break;
}
但是,为了清理代码并学习新技术,我尝试使用switch语句来搜索这些变量。
我遇到的问题是,为了将变量与常量(1)进行比较,我觉得我需要使用布尔值作为大小写条件:
switch (){
case var1 == 1: break;
}
但是,这会抛出两个错误:switch语句没有表达式,case条件是布尔值(它期望是int)。
我看到的另一个问题是,case条件必须是一个常量,这意味着我不能把它作为一个变量:
switch (1){
case var1: break;
}
我认为这将触发如果这个语法是正确的,但我不能找出任何其他方法来做到这一点,而不使用数组,我真的不明白。
您需要为变量创建一个数组如
const vars = {1, 2, 3, .. etc}
则可以使用for loop
for(let i=0; i<vars.length; i++){
if(vars[i] == 1){
// things you want to do
break();
}
}
switch
-语句和switch
-表达式在需要根据单个的值定义多个执行路径时非常有用变量(有关更多信息,请参阅官方教程),但在您的可能原因中,您需要使用多个进行操作。变量。
作为一种可能的解决方案,您可以将这些变量收集到一个数组或List
中,然后检查它是否包含1
的值。
例子:
List<Integer> vars = List.of(var1, var2, var3, ... );
...
if (vars.contains(1)) { ... }
我更喜欢使用HashMap,因为复杂度是0(1),所以您可以通过使用常量键直接获得它,例如:
private final int KEY = 1;
Map<Integer, Integer> testMap = new HashMap<>();
// populate testMap
Integer result = testMap.get(KEY);
def search(value):
var1 = 'apple'
var2 = 'banana'
var3 = 'cherry'
if found:
print(f'{value} was found!')
else:
print(f'{value} was not found.')
search('apple')
search('orange')
您可以使用Java中的函数式编程方法来遍历给定的一组项。例如:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
// Adding items to this set for demonstration purposes.
// In your case the given Set is already populated
Set<Integer> filteredSet = set.stream().filter(item -> item == 1).collect(Collectors.toSet());
filteredSet.forEach(item -> {
System.out.println("Item: " + item);
});
解释:set. Stream()为这个集合中的给定项打开一个流。
流()。过滤器(x→X == 1)过滤所有不适用于给定过滤器函数的项" X ->X == 1">
这个过滤器函数本质上定义了一个"项"。然后可以通过"等号"运算符将其与1的值进行比较。方法"collect(collections . toset())"获取所有被过滤的项(在本例中只有值1的Integer),并将这些值赋给新的Set" filteredSet"之后,给定的filteredSet通过函数方法forEach()迭代。然后打印给定集合的所有值。(本例中只有一个"1")