Есть ли способ поиска значения из набора переменных с помощью оператора switch?

Я новичок в 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;
}

Я думаю, что это сработало бы, если бы этот синтаксис был правильным, но я не могу найти других способов сделать это без использования массивов, которые я действительно не понимаю.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
53
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

вам нужно создать массив для ваших переменных такой как

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

то вы можете использовать для цикла

for(let i=0; i<vars.length; i++){
   if (vars[i] == 1){
      // things you want to do
      break();
   }
}
const — зарезервированное ключевое слово, но оно не реализовано. Предлагаем вам изменить его на final
WJS 27.12.2022 17:38
let — это JavaScript, а не Java. То же самое с const. Потому что в JavaScript идея, данная в вопросе, работает (switch(true) { case var1 == 1: …; break; case var2 == 1: …; break; })
knittl 27.12.2022 17:54

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")

Другие вопросы по теме

Понимание того, как оптимизировать производительность JS Arrow Functions в различных контекстах
Что отвечает за узкое место в оперативной памяти при выполнении произвольного доступа к памяти?
Почему доступ к глобальной статической переменной повышает производительность по сравнению с переменными стека?
GUROBI использует только одно ядро ​​для решения проблемы с cvxpy (python)
Есть ли более быстрый способ умножить на 6 в C?
Проблема оптимизации PuLP: размещение предметов в ящиках с ограничениями
Pyomo, как написать ограничение, обеспечивающее максимальное время работы устройства в Pyomo?
Алгоритм размещения звуковых дорожек на нескольких сторонах винила с оптимизацией для наименьшей максимальной длины стороны?
Более эффективное решение для сбалансированного разделения массива с дополнительными условиями
Самая низкая базовая система, в цифрах которой все единицы