java 有没有一种方法可以使用switch语句从各种各样的变量中搜索值?

hof1towb  于 2023-01-01  发布在  Java
关注(0)|答案(5)|浏览(106)

我是一个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)进行比较,我觉得需要使用布尔值作为case条件:

switch (){
   case var1 == 1: break;
}

但是,这会引发两个错误:switch语句没有表达式,并且case条件是布尔值(它需要int)。
我遇到的另一个问题是case条件必须是常量,这意味着我不能将其作为变量:

switch (1){
   case var1: break;
}

我想如果语法正确的话,这是可以触发的,但是我想不出任何其他不使用数组的方法,我并不真正理解数组。

moiiocjp

moiiocjp1#

需要为变量创建一个数组,例如

const vars = {1, 2, 3, .. etc}

那么你可以用for循环

for(let i=0; i<vars.length; i++){
   if(vars[i] == 1){
      // things you want to do
      break();
   }
}
zour9fqk

zour9fqk2#

switch-语句和switch-表达式在您需要根据单个变量的值定义多个执行路径时非常有用(有关详细信息,请参阅official tutorial),但在您的can中,您需要使用多个变量进行操作。
作为一种可能的解决方案,您可以将这些变量收集到一个数组或List中,然后检查它是否包含1的值。

  • 示例:*
List<Integer> vars = List.of(var1, var2, var3, ... );
...
if (vars.contains(1)) { ... }
bzzcjhmw

bzzcjhmw3#

我更喜欢使用HashMap,因为复杂度是o(1),所以你可以直接使用常量键来获得它,例如:

private final int KEY = 1; 
Map<Integer, Integer> testMap = new HashMap<>();
// populate testMap

Integer result = testMap.get(KEY);
jhiyze9q

jhiyze9q4#

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')
wbrvyc0a

wbrvyc0a5#

您可以使用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);
});

Explanation: set.stream() opens a Stream for the given Items in this set.
stream(). filter(x-〉x == 1)过滤不应用于给定过滤函数"x-〉x == 1"的所有项。
这个filter函数本质上定义了一个"item",然后可以通过"equals"运算符将其与值1进行比较。(Collectors. toSet())"获取所有筛选项(在这种情况下,它只是值为1的整数),并将这些值赋给新的集合"filteredSet"。()",然后打印给定集合的所有值。(在本例中,只有一个值" 1 ")

相关问题