중첩된 if 문 제거
글쓴이: 임창진 / 작성시간: 화, 2005/09/27 - 5:03오후
어떤 메쏘드가 있는데 이 메쏘드는 파라미터 4개를 전달받아서 결과값 하나를 리턴합니다.
A,B,C,D 네개의 파라미터가 각각 아래표의 값을 가질수 있다고 할때.
조건 ------------------------- A B C D ------------------------- a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3 a4 c4 d4 c5
현재 코딩된 소스는 if 문으로 이걸 하나하나 비교해서
결과값을 알아내고 있습니다.
myMethod(A,B,C,D) { if(A == a1) { if(B == b1) { return x1; }else(B == b2) { if(C == c1) { return x2; }else if(...) { . . } . . . } . . . }else if(A == a2) { } . . . }
중첩된 if문이 싫어서 아래처럼 바꾸려고 합니다.
Hashtable ht = new Hashtable(); ht.put( a1 + delim + b1 + delim + c1 + delim + d1 , x1) ht.put( a1 + delim + b1 + delim + c1 , delim + d2 , x2) ht.put( a1 + delim + b1 + delim + c1 , delim + d3 , x3) . . . . myMethod(A,B,C,D) { return ht.get(A + delim + B + delim + C + delim + D) }
이 방법말고 더 간편하고 좋은방법이 있을까요?
Forums:
제 꽁수중 하나가 있긴 합니다.파라미터들의 값이 충분히 작고 in
제 꽁수중 하나가 있긴 합니다.
파라미터들의 값이 충분히 작고 integer형일때 쓰는 방법인데요
간단합니다. '진법'개념을 이용하는 것이지요
이런식으로 되어있을때 ABCD (1234) 라는 하나의 큰 수로 만들 수 있습니다.
그런다음 한방에 비교하는 것이지요
위의 식이라면 하나의 숫자로 ABCD를 만든후 switch, case문을 이용해서 만들면 되겠네요
예전에 programming challanges라는 책의 예제에
포카에서 나오는 카드의 승패를 계산할때
제일 큰카드가 같으면 다음 카드가 같고 어쩌구.. 이런 것 쓸때 if쓰기 싫어서
생각해보았떤 방법입니다.
단점은 파라미터의 숫자가 충분히 작아야 진법 만들기가 쉽죠
128진법 이러면 난감하자나요 ^^
C++, 그리고 C++....
죽어도 C++
답변감사합니다.
우선 답변해주셔서 감사합니다.
제가 비교하려는것이 String 이라서 아쉽게도 알려주신방법은 사용하기 어려울거 같습니다.
그냥 원래 아이디어대로 코딩해야 할 거 같습니다.
CNF, DNF를 이용하여 판단하는 방법이 있습니다.모든 수식을 AN
CNF, DNF를 이용하여 판단하는 방법이 있습니다.
모든 수식을 AND major, OR major로 표현하는 것입니다.
이를 이용하면 쿼리 옵티마이즈 및 어떤 의사결정트리를 구성하는데 좋습니다.
* 과거 검색엔진 관련 프로그램 잠시할때, 사용했었습니다.
* 파라메터의 개수가 많아지면, 해쉬테이블의 증가가 심할것 같은데, 그럴가능성이 없다면(많지 않다면;일정하다거나) 해쉬를 사용하시는 것도 그리 나빠보이지 않습니다.
댓글 달기