1. 다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었습니다. 어디에서 잘못 작성된 것일까요?
int var1=5;
int var2=2;
double var3=var1/var2;
int var4=(int)(var3*var2);
System.out.println(var4);
-> var 3 출력 값은 int type 변수이기 때문에 5/2 = 2.5 가 아니고 소수점이 사라져서 2가 된다. var3를 double type 으로 설정했기 때문에 2.0이 나온다.
2.5 값이 출력 되기를 원했다면 앞에 (double) 을 적어준다.
double var3 = (double) var1/var2
line 4는 2*2 이기 때문에 마지막 int var4의 출력 값은 4가 된다.
2. 다음 코드를 실행했을 때 출력 결과는 무엇입니까? (증감연산자에 대해 알아보세요!)
int x=10;
int y=20;
int z = (++x) + (y--);
System.out.println(z);
-> 증감연산자(++,--0)가 값의 앞에 오면 증감연산자를 실행하고 나서 연산이 실행이 되고 뒤에 오면 연산을 실행한 후 다음식에서 증감연산자가 실행이 된다.
따라서, line3의 ++x == 11, y-- ==20 이기 때문에 int z == 31 이다.
3. while문과 Math.random() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고, 눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성해보세요. 눈의 합이 5가 되는 조합은 (1,4), (4,1), (2,3), (3,2)입니다.
-> 주사위 하나의 랜덤 값을 구하기 위한 수식은 아래와 같다.
int num = (int) (Math.random()*6)+1;
public class Ex2_1 {
public static void main(String[] args) {
System.out.println("시작!");
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;
}
}
System.out.println("끝");
}
}
while문을 사용해서 조건문을 사용하였다.
주사위 두개의 합 (num1 +num2)이 5가 되면 while 문이 실행을 멈추고 조건문을 블락을 벗어난다.
출력해본 값은 아래와 같다.
시작!
(4,5)
(3,4)
(1,1)
(4,2)
(1,6)
(6,3)
(5,1)
(4,2)
(3,6)
(5,1)
(1,2)
(1,5)
(1,3)
(3,1)
(2,6)
(1,5)
(5,1)
(6,6)
(4,4)
(6,3)
(1,6)
(2,2)
(5,2)
(5,1)
(3,1)
(5,3)
(4,5)
(5,5)
(1,4)
끝
생각보다 길다.
과제 끝!