2014-12-25 2 views
1

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

Я ввод 2 значения, то проверку их в списке, как если ток = три, то он возвращает истину для проверки на один, два и три

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

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' значений, а затем сравнить' если (текущий > check) ' – Stewart

+0

Используйте оператор switch с случаями, которые попадают в другие. Я на самом деле написал ответ, но вопрос был отмечен как дубликат, прежде чем я смог представить ... О, ну ... – initramfs

ответ

0

Похоже, вы всегда проверять, если current равно или больше, чем check. Если да, то вы можете просто использовать 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; 
} 
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

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

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

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; 
    } 
} 
Смежные вопросы