{TIL 5} java algorithm QnA 3문제

YeilieY·2022년 9월 24일

항해99

목록 보기
10/27
post-thumbnail

Q1:

  • 다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었습니다. 어디에서 잘못 작성된 것일까요?
int var1=5;
int var2=2;
double var3=var1/var2;
int var4=(int)(var3*var2);
System.out.println(var4);

Q1 - A:

실수형 변수인 double 까지만 봤을 땐 var1/var2 를 하였을 시 2.5 가 출력이 될 텐데, 그 다음 줄에서 실수형 변수가 아닌 정수형 변수 int 를 사용함으로써 var3 이 2.5 가 아닌
소수점을 뺀 정수 2 까지만 저장하였기 때문에 var3*var2 의 값은 4 가 나오게 된다!

Q2:

  • 다음 코드를 실행했을 때 출력 결과는 무엇입니까? (증감연산자에 대해 알아보세요!)
int x=10;
int y=20;
int z = (++x) + (y--);
System.out.println(z);

Q2 - A:

증감 연산자를 계산함에 있어 증감연산자 끼리는 ++-- 리터럴 앞이나 뒤에 오게 되더라도
항상 먼저 계산 후 진행이 되지만, 지금은 (++x) 과 (y--) 사이에 + 연산자가 있기 때문에
++ 의 값인 1과 x 의 값인 10이 먼저 더해진 값 11 과 y 의 값인 20만 더하고 y 뒤에 있는
-- 는 적용되지 않는다!(반복문 같은 경우 사용이 되어질 것 같다.)
출력 결과 값은 31 이다.

Q3:

  • while문과 Math.random() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고, 눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성해보세요. 눈의 합이 5가 되는 조합은 (1,4), (4,1), (2,3), (3,2)입니다.
    • 출력 예시
      시작!
      (3,6)
      (2,6)
      (1,4)
      끝!

    Q3 - A:

public class QnA03 {
    public static void main(String[] args) {
        while (true){
            int num1 = (int) (Math.random() * 6) +1;
            int num2 = (int) (Math.random() * 6) +1;
            System.out.println("(" + num1 + ", " + num2 + ")");
            if ((num1 + num2) == 5){
                break;
            }
        }
    }
}

//Math.random 을 이용해 주사위 수 안에서 랜덤으로 설정이 되도록 했고 num1 과 num2 의
//합이 5가 되면 break 를 걸도록 했다.
profile
Fun_Dev

0개의 댓글