본문 바로가기
개발/android

부등호 없는 부등식 소스를 짜보자

by 매몰 2017. 6. 27.

 

 

반복적으로 또는 사용자 임의로 부등식 비교를 할때 

일일이 부등호를 넣어야 하는 불편이 있다.

 

 

예를 들어

 

int a = 1, b = 5;

String sign = "<"

 

if (sign.equels("<")) {

return a < b;

}

else if (sign.equels("<=")) {

return  a <= b;

}

else if (sign.equels(">")) {

return  a > b;

}

else if (sign.equels(">=")) {

return a >= b;

}

 

 

 

 

역시 소스가 깔끔하지 않다.

간단한 수식을 이용해 다음과 같이 해보자.

 

//부등식 객체 클래스
public static class Compare {
private int mA, mB;
private boolean mRight, mEquel;

public Compare(int a, int b, boolean right, boolean equel) {
mA = a;
mB = b;
mRight = right;
mEquel = equel;
}

public boolean check() {
return check(mA, mB, mRight, mEquel);
}

//a, b: 비교할 숫자
//right: b(오른쪽 숫자)가 커야할때는 true, 그렇지 않을 경우 false
//equel: 등호 포함 여부
public static boolean check(int a, int b, boolean right, boolean equel) {
//숫자가 같을 경우에는 등호 여부가 바로 값이 되고
//숫자가 다를 경우에만 비교값과 부등호를 확인한다
return a == b ? equel : right == a < b;
}
}

 

 

 

//비교 연산자 사용하기

//checks: 부등식 배열
//or: or 이면 true, and 이면 false
private boolean checks(Compare[] checks, boolean or) {
for (int i = 0 ; i < checks.length ; i++) {
//or(true)일 경우에는 하나만 true이면 그대로 리턴
//and(false)일 경우에는 하나만 false이면 그대로 리턴
if (checks[i].check() == or)
return or;
}

//위에서 걸려지지 않았으면 or변수의 반대값 리턴
return !or;
}

 

 

위의 예제이다

 

private void test() {
    Log.d("MyLog", "check 1 <= 5: " + Compare.check(1, 5, true, true));
    Log.d("MyLog", "check 1 >= 5: " + Compare.check(1, 5, false, true));
    Log.d("MyLog", "check 1 < 5: " + Compare.check(1, 5, true, false));
    Log.d("MyLog", "check 5 < 1: " + Compare.check(5, 1, true, false));
    Log.d("MyLog", "check 5 < 5: " + Compare.check(5, 5, true, false));
    Log.d("MyLog", "check 5 <= 5: " + Compare.check(5, 5, true, true));

    Compare com1 = new Compare(1, 5, true, true);
    Compare com2 = new Compare(23, 17, false, true);
    Compare com3 = new Compare(36, 36, false, false);
    Compare com4 = new Compare(1, 5, false, true);
    Compare com5 = new Compare(23, 17, true, true);
    Compare com6 = new Compare(37, 36, false, true);

    Log.d("MyLog", "checks (1 <= 5 || 23 >= 17 || 36 > 36): " + checks(new Compare[] {com1, com2, com3}, true));
    Log.d("MyLog", "checks (1 <= 5 && 23 >= 17 && 36 > 36): " + checks(new Compare[] {com1, com2, com3}, false));

    Log.d("MyLog", "checks (1 >= 5 || 23 <= 17 || 36 > 36): " + checks(new Compare[] {com4, com5, com3}, true));
    Log.d("MyLog", "checks (1 <= 5 && 23 >= 17 && 37 > 36): " + checks(new Compare[] {com1, com2, com6}, false));
}

 

 

예제의 결과값이다.

 

 

D/MyLog: check 1 <= 5: true

D/MyLog: check 1 >= 5: false

D/MyLog: check 1 < 5: true

D/MyLog: check 5 < 1: false

D/MyLog: check 5 < 5: false

D/MyLog: check 5 <= 5: true

D/MyLog: checks (1 <= 5 || 23 >= 17 || 36 > 36): true

D/MyLog: checks (1 <= 5 && 23 >= 17 && 36 > 36): false

D/MyLog: checks (1 >= 5 || 23 <= 17 || 36 > 36): false

D/MyLog: checks (1 <= 5 && 23 >= 17 && 37 > 36): true

 

 

 

 

 

 

 

도움이 되셨다면~ 정성으로 빚은 저희 앱!  많은 이용 바래요:)

 

https://meorimal.com/index.html?tab=spaceship

 

우주선 - 방치형 인공지능 투자 체험기

미리 맛보는 인공지능 투자!

(주)머리말 meorimal.com

 

https://meorimal.com/subway.html

 

지하철어디있니

더이상 고민하지 마세요. 뛸지 말지 딱 보면 알죠.

(주)머리말 meorimal.com

 

사업자 정보 표시
주식회사 머리말 | 고영진 | 서울특별시 송파구 중대로 135 서관 10층 (가락동, 아이티벤처타워) | 사업자 등록번호 : 524-88-00727 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2017-서울강남-03941호 | 사이버몰의 이용약관 바로가기