반복적으로 또는 사용자 임의로 부등식 비교를 할때
일일이 부등호를 넣어야 하는 불편이 있다.
예를 들어
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
https://meorimal.com/subway.html
'개발 > android' 카테고리의 다른 글
Intent 전달 방식을 모방하여 부모 activity를 호출하기 (0) | 2018.06.07 |
---|---|
ListView에 EditText를 넣을때 반드시 살펴봐야 할점 (0) | 2017.09.11 |
간단한 코딩으로 큰따음표("")로 묶인 CSV 파일 보기 (0) | 2016.11.14 |
막대 그래프의 처음은 이렇게 (0) | 2016.10.24 |
재귀 함수의 완벽한 이해 (0) | 2016.09.26 |