티스토리 뷰

ICT Eng/JAVA

[JAVA] 홀수짝수 판단 문제

nroo nroo 2016. 4. 13. 02:28



■홀수 짝수 판단


홀수와 짝수를 판단하는 여러가지 코드가 있을 수 있다.

내가 경험한 OddEven클래스의 변화과정을 부끄럽지만 공유하고자 한다.


●OddEvenManager의 내용

import java.util.Scanner;

public class OddEvenManager {
    public static void main(String [] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자를 입력하시오 : ");
        int input = scanner.nextInt();
        boolean statusFalg;
        OddEven oddeven = new OddEven();

        statusFalg=oddeven.judge(input);

        if(statusFalg==true)
            System.out.println("짝수입니다.");
        else
            System.out.println("홀수입니다.");

    }
}


●첫번째 OddEven 클래스

public class OddEven {
    boolean judge(int n) {
        if(n<0)
            n=n*-1;

        if(n%2==0)
            return true;
        else
            return false;
    }
}

정말 정직하게 홀수와 짝수를 구분했고, 음수입력을 대비하여 -1을 곱해서 처리하는 센스가 보인다. 



●두번째 OddEven 클래스

public class OddEven {
    boolean judge(int n) {
        if(n<0)
            n*=(-1);
        return ((n%2==0) ? true : false);
    }
}
코드를 줄이라는 오더와 함께 삼항연산자로 변경한다. 자연스러운 수순이다. 


●세번째 OddEven 클래스

public class OddEven {
    boolean judge(int n) {
        return ((Math.abs(n) % 2 == 0) ? true : false);
    }
}
Math클래스도 써본다. 


●마지막으로 수정 한 OddEven 클래스
public class OddEven {
    boolean judge(int n) {
        return ((n&1) == 1);
    }
}

1,2,3 모두 출제자의 의도에 맞지 않았다.

정답은 비트연산자를 이용한 결과값 계산이다. 

홀수는 1과 &(AND)연산하면 결과값이 항상 1이다. 
짝수는 1과 &(AND)연산하면 결과값이 항상 0이다. 
끝이다. 이게 출제자의 의도였다. 아직 멀었고, 점점 배워가는 중이다.


●수정한 OddEven 클래스를 고려한 OddEvenManager의 간소화

import java.util.Scanner;

public class OddEvenManager {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자를 입력하시오 : ");
        int input = scanner.nextInt();
        boolean statusFalg;
        OddEven oddeven = new OddEven();

        statusFalg = oddeven.judge(input);

        if (statusFalg)
            System.out.println("홀수입니다.");
        else
            System.out.println("짝수입니다.");

    }
}


댓글
댓글쓰기 폼