Получать самое маленькое число самое большее из-1

У меня есть метод, который берет индекс, который нужно использовать в системе собственного markdown.

В метод его проходят индексы и он должен возвращать самый низкий больше-1 (not found) до настоящего времени только мы имели negrita, cursiva и normal и метод был относительно простым (хотя он мне кажется уродливым с желаниями):

private int getValidIndexToUse(int indexOfBold, int indexOfItalics) {
    if (indexOfBold > -1 && indexOfItalics == -1)
        return indexOfBold;
    else if (indexOfItalics > -1 && indexOfBold == -1)
        return indexOfItalics;
    else 
        return indexOfBold > -1 && indexOfBold < indexOfItalics ? indexOfBold : indexOfItalics;
}

Сейчас нужно добавлять cursiva+negrita и подчеркнутый и с этой системой метод превращается в сумасшествие.

У кого-то есть какая-то лучшая мысль, которая должна укрывать бесконечность if's?

2
задан 18.03.2016, 15:10
2 ответа

Общая проблема искания самого маленького числа набора чисел, при условии что он был больше, чем другое определенное число, было бы возможно упрощать немного больше с параметром изменчивой длины:

private int getValidIndexToUse (int... indexes) {
  int toReturn = Integer.MAX_VALUE;

  for (int index : indexes)
      if (index > -1 && toReturn > index)
          toReturn = index;

  return toReturn;
}

Или с Java 8, используя stream ints:

private int getValidIndexToUse (int... indexes) {
  return Arrays.stream(indexes).filter(i -> i > -1).min().orElse(Integer.MAX_VALUE);
}
4
ответ дан 24.11.2019, 14:43
  • 1
    Это soluci и # 243; n м и # 225; s генерал в случае, что появились новые случаи. –  18.03.2016, 16:19

Так как posteando я увидел вопрос clarisimamente, как делать это так, что жизнь не осложняться, очень похоже, если мы хотели достать тот же результат повторяя в travГ©s array или списка:

private int getValidIndexToUse(int indexOfBold, int indexOfItalics, int indexOfUnderlined, int indexOfBoldItalic) 
{
    int toReturn = Integer.MAX_VALUE;

    if (indexOfBold > -1) toReturn = indexOfBold;
    if (indexOfItalics > -1 && toReturn > indexOfItalics) toReturn = indexOfItalics;
    if (indexOfUnderlined > -1 && toReturn > indexOfUnderlined) toReturn = indexOfUnderlined;
    if (indexOfBoldItalic > -1 && toReturn > indexOfBoldItalic) toReturn = indexOfBoldItalic;

    return toReturn;
}

ЗАМЕЧАЕТ: не подтверждается, если все равны-1 потому что этот вызов метода внутри одного while (containsAny(stringToCheck, TAGS)), но если бы не осуществился этот check, - момент, который нужно подтвердить.


того, что я понял, состоит в том, что была ошибка приближения в проблему и чрезмерная complicaciГіn в старом методе, сложенном в тот, что в неких моментах ты ослепляешь себя, выходят такие самые сложные методы как, например, метод вопроса.

Надеялся, что моя временная слепота подает его в кому-то в будущем.

2
ответ дан 24.11.2019, 14:43

Теги

Похожие вопросы