Эффективное сравнение значений

1

Есть ли лучший и эффективный способ сделать это:

Я ввожу 2 значения, затем проверяя их в списке, как если бы текущий = три, тогда он возвращает true для проверки на один, два и три

ПРИМЕЧАНИЕ. Эти значения (один, два, три) являются просто заполнителями для примера в моем использовании, между ними нет никакой связи, кроме того, что они имеют другой приоритет.

enum Foo {
    ONE(1), TWO(2), THREE(3)

    private final int priority;

    public Foo(int priority) {this.priority = priority;}

    public int getPriority() {return priority;}
}

public boolean checker(Foo current, Foo check) {
    if (check == ONE) {
        if (current == ONE || current == TWO
                || current == THREE) {
            return true;
        }
    }
    if (check == TWO) {
        if (current == TWO || current == THREE) {
            return true;
        }
    }
    if (check == THREE) {
        if (current == THREE) {
            return true;
        }
    }
    return false;
}
  • 1
    Определенно, наиболее эффективный способ - использовать значения int , а затем сравнить if( current > check )
  • 0
    Используйте оператор switch с делами, которые попадают в другие. Я на самом деле написал ответ, но вопрос был помечен как дубликат, прежде чем я смог представить ... О, хорошо ...
Теги:

3 ответа

1

Я бы выполнил перечисление следующим образом:

enum Foo {
ONE(1), TWO(2), THREE(3);

private final int priority;

private Foo(int priority) {
    this.priority = priority;
}

public int getPriority() {
    return priority;
}

public boolean check(Foo check) {
    return this.getPriority() >= check.getPriority();

}

}

И просто позвоните:

Foo current = Foo.THREE;
System.out.println(current.check(Foo.TWO));

Таким образом, это больше ООП.

0

Ответ demostene - это способ пойти, если позволяет ваш фактический вариант использования.

При этом следующее является эффективным, понятным и логически эквивалентным коду, который вы опубликовали:

public boolean checker(Foo current, Foo check) {
    switch (check) {
        case THREE:
            if (current == TWO)
              return false;
        case TWO:
            if (current == ONE)
                return false;
        default:
            return true;
    }
}
0

Похоже, вы всегда проверяете, равен ли current или больше check. Если да, то вы можете просто использовать ints. Если вам нужно их назвать, вы можете использовать некоторые постоянные ints, такие как public final static int ONE = 1; ,

public boolean checker(int current, int check) {
    return current >= check;
}

Если вы хотите ограничить определенные номера, например 1, 2, 3 в вашем примере, сначала проверьте параметры:

public boolean checker(int current, int check) {
    int MIN = 1;
    int MAX = 3;
    if(current < MIN || current > MAX || check < MIN || check > MAX) {
        return false;
    }
    return current >= check;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню