항해99 프로그래밍 기초주차 언어 과제 제출 (Java)
< 문제1 >
다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었다.
어디서 잘못 작성된 것일까?
int var1=5;
int var2=2;
double var3=var1/var2;
int var4=(int)(var3 * var2);
System.out.println(var4);
// 출력 : 4
문제 해석)
5라는 값을 정수형 변수 var1에 할당,
2라는 값을 정수형 변수 var에 할당,
변수 var1을 변수 var2로 나눈 값을 실수형 변수 var3에 할당,
변수 var3과 var2를 곱한 값을 int 형으로 캐스팅하여 var4에 할당
이에 대한 값을 5로 기대했는데 4로 출력되었다.
위에서는 정수형 변수인 var1과 var2를 나눈 값, (5/2= 2.5지만 정수 타입끼리의 연산이기에 2) 2가 var3에 할당되었다.
5가 출력되게 하기 위해서는 var3에 대한 값을 2.5로 할당해줘야 하는데,
그렇기 위해서는 변수 var1이나 var2의 타입을 둘 중에 하나 혹은 전부 double로 지정해줘야 한다.
위에서는 정수형 변수였던 var2를 아래의 답에선 double로 지정해주어 var3의 값은 2.5가 되었고
var3 * var2 (2.5 * 2 = 5.0)를 정수형으로 캐스팅해주어 변수 var4의 값으로 기대했던 5가 출력될 수 있다.
답)
int var1=5; // 정수형 변수 var1에 5 할당
double var2=2; // 실수형 변수 var2에 2 할당
double var3=var1/var2; // 변수 var1을 var2로 나눈 값을 실수형 변수 var3에 할당(2.5)
int var4=(int)(var3 * var2); // 변수 var3과 var2를 곱한 값을 정수형으로 캐스팅하여 변수 var4에 할당
System.out.println(var4); // 변수 var4 출력
// 출력 : 5
< 문제2 >
다음 코드를 실행했을 때 출력 결과는 무엇인가?(tip. 증감연산자)
int x=10;
int y=20;
int z= (++x) + (y--);
System.out.println(z);
문제 해석)
증감연산자는 기호의 위치에 따라 값이 달라지는데,
앞에 위치하면 연산이 끝나기 전에 증감시켜주고 반대로 뒤에 위치하면 연산이 끝난 후에 증감을 시켜준다.
따라서 ++x 는 값인 10에 1을 먼저 더해준 11이 되고
y--는 기호가 변수 뒤에 위치하여 값인 20이 먼저 연산되어
11 + 20 = 31이 변수 z에 저장된 뒤 y에는 1 감소되어 19가 저장되어진다. 따라서 출력되는 값은 31이다.
답)
int x=10; // 정수형 변수 x에 10 할당
int y=20; // 정수형 변수 y에 20 할당
int z= (++x) + (y--); // z = 11(x+1=11=x) + 20(y=20) = 31 z에 31이 저장되고 y= y-1 = 19저장
System.out.println(z); // 31
// 출력 : 31
< 문제3 >
while문과 Math.random() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고,
눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성할 것.
눈의 합이 5가 되는 조합은 (1, 4), (4, 1), (3, 2) 이다.
# 출력 예시
시작!
(3, 6)
(2, 6)
(1, 4)
끝!
답)
while (true) { // while에 true를 지정하면 무한 루프
int num1 = (int) (Math.random()*6) +1; // double 값을 갖기 때문에 int 변환
int num2 = (int) (Math.random()*6) +1; // 1~6까지의 숫자 랜덤 추출
System.out.println("("+num1+", "+num2+")"); // (눈1, 눈2)형식으로 출력
if (num1 + num2 == 5) { // 합이 5가 될 때까지 루프
break; // 5가 되는 순간 멈춤
}
}
// 출력(예시) :
(4, 5) // 합9
(4, 4) // 합8
(3, 1) // 합4
(1, 4) // 합5(루프 종료)