다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었습니다. 어디에서 잘못 작성된 것일까요?
int var1 = 5;
int var2 = 2;
double var3 = var1/var2; // 잘못 작성된 부분
int var4 = (int) (var3*var2);
System.out.println(var4); // 4
int var1 = 5;
int var2 = 2;
double var3 = (double) var1/var2 // double로 강제 타입 변환
int var4 = (int) (var3*var2);
System.out.println(var4); // 5
int 타입끼리의 연산에서는 값을 정수로만 계산하기때문에 실수 타입인 double로 강제 타입 변환을 사용하였다.
다음 코드를 실행했을 때 출력 결과는 무엇입니까? (증감연산자에 대해 알아보세요!)
int x = 10;
int y = 20;
int z = (++x) + (y--);
System.out.println(z); // 31
증감 연산자인 ++가 x의 앞에 있기 때문에 연산을 수행하기전 x의 값이 1이 증가한 11이 되어 31이라는 값이 출력된다. y는 --가 뒤에 있기때문에 연산을 수행한 후 1이 감소되어 19가 된다.
while문과 Math.random() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고, 눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성해보세요. 눈의 합이 5가 되는 조합은 (1,4), (4,1), (2,3), (3,2)입니다
임의의 정수 뽑는법
0.0 <= Math.random() < 1.0
0.0 * 10 <= Math.random() * 10 < 1.0 * 10
(int) 0.0 <= (int) (Math.random() * 10) < (int) 10.0
0 +1 <= (int) (Math.random() *10) + 1 < 10 + 1
int num = (int) (Math.random() * 6) + 1;
문제 풀이
while (true) {
int num1 = (int) (Math.random() *6) +1; // 주사위 번호1
int num2 = (int) (Math.random() *6) +1; // 주사위 번호2
System.out.println("(" + num1 + "," + num2 + ")"); // (num1+num2)의 형태로 출력
if (num1 + num2 == 5) { // 주사위 합이 5와 같아지면
break; // 중단한다
}
}
Math.random() 메소드를 이용하여 주사위 2개의 번호를 임의로 뽑아서 출력하고 num1과 num2의 합이 5가 되었을때는 중단하도록 break문을 사용했다.