2014-12-25 3 views
1

이 할 수있는 더 나은 및 더 효율적인 방법이 있나요 및 세비교 값 효율적으로

참고 :이 값 (1, 2, 3)은 예제에서 사용하는 예제의 자리 표시 자이며 다른 우선 순위를 제외하고는 아무 관계도 없습니다. 당신은 항상 current 같거나 check보다 큰 경우 확인하는 것 같은

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

(현재 :

말했다되고 그건

, 다음, 효율적 명확하고 게시 된 코드를 논리적으로 동일하다 > check)' – Stewart

+0

switch 문을 사용하여 다른 경우에 빠질 수 있습니다. 나는 실제로 대답을 썼지 만 제출하기 전에 질문이 중복으로 표시되었습니다 ... 오 ... – initramfs

답변

0

보인다. 그렇다면 int를 사용할 수 있습니다. 이름을 지정해야하는 경우 public final static int ONE = 1;과 같은 상수 int를 사용할 수 있습니다. 귀하의 예제에서

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

이렇게하면 더 많은 OOP입니다.

0

demostene의 답변은 실제 사용 사례에서 허용하는 경우 이동하는 방법입니다. 확실히 가장 효율적인 방법은`int` 값을 사용하고 비교 '경우입니다

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; 
    } 
}