Я новичок в 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(let i=0; i<vars.length; i++){
if (vars[i] == 1){
// things you want to do
break();
}
}
let — это JavaScript, а не Java. То же самое с const. Потому что в JavaScript идея, данная в вопросе, работает (switch(true) { case var1 == 1: …; break; case var2 == 1: …; break; })
switch-операторы и switch-выражения полезны, когда вам нужно определить несколько путей выполнения в зависимости от значения одной переменной (для получения дополнительной информации обратитесь к официальному руководству), но в вашей ситуации вам нужно работать с несколько переменных.
В качестве возможного решения вы можете собрать эти переменные в массив или List, а затем проверить, содержит ли оно значение 1.
Пример:
List<Integer> vars = List.of(var1, var2, var3, ... );
...
if (vars.contains(1)) { ... }
я предпочитаю использовать HashMap, потому что сложность o (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() открывает поток для заданных элементов в этом наборе.
stream().filter(x -> x == 1) фильтрует все элементы, которые не относятся к заданной функции-фильтру "x -> x == 1".
Эта функция-фильтр по существу определяет «элемент», который затем можно сравнить со значением 1 с помощью оператора «равно».
Метод «сбор (Collectors.toSet())» берет все отфильтрованные элементы (в данном случае это только целое число со значением 1) и присваивает эти значения новому набору «filteredSet».
После этого данный filteredSet повторяется с помощью функционального метода forEach(), который затем печатает все значения данного Set. (в данном случае только 1 значение "1")
const— зарезервированное ключевое слово, но оно не реализовано. Предлагаем вам изменить его наfinal