항해99 시작주차 2주차 항해일지 <1day - TIL>
문제에 대한 답을 나의 언어로 정리하고, 주석을 달아주세요.
- 다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었습니다. 어디에서 잘못 작성된 것일까요?
```java
int var1=5;
int var2=2;
/* double var3=var1/var2; */ #기존 코드
double var3= (double)var1/var2; #수정
# 실수형변수 double var3에 var1/Var2 의 연산값을 저장한다.
int var4=(int)(var3*var2);
# 실수형변수 var3에 정수형 변수 var2를 곱한값을 var4에 저장하는데,
# 정수 결과를 얻기위해 정수형 타입 캐스팅을 사용한다.
# 정수부분만 반환하고 소수점은 제외한다
System.out.println(var4);
```
문제풀이 ✏️
문제 : 결과값이 왜 4로 출력되었는가 ?
기본 데이터 타입은 내부적으로 할당된 메모리 공간을 어떤식으로 사용할 지 정의하고있다.
위 문제에서 var1/var2의 연산이 먼저 진행되고, 해당값을 임시 저장소에 저장해두었다가 이후 double 변수에 대입하는데, 연산에서 변수의 데이터 타입(int)을 참조해 공간을 적게 만들어두었기 때문에 데이터 손실이 발생함
풀이 :
연산이 이루어지기전에 형변환 (int -> double)을 하여 메모리 공간을 확보해서 데이터가 손실되지 않게 해야함!
- 다음 코드를 실행했을 때 출력 결과는 무엇입니까? (증감연산자에 대해 알아보세요!)
```java
int x=10;
int y=20;
int z = (++x) + (y--);
# (++x) 전위 연산자가 수행되어 변수의 값이 1 증가
# (--y) 후위 연산자는 할당 이후에 연산을 하게 되므로 해당 연산에서는 기존값으로 연산을 함
System.out.println(z); # 결과 31
```
문제풀이 ✏️
문제 : 다음코드를 실행했을 때 출력 결과는 무엇인지? : 결과 ) 31
풀이 :
전위(prefix) 연산자와 후위(postfix) 연산자를 사용한 연산의 결과를 구하는 소스코드
증감 연산자가 변수 앞에 쓰이면 연산을 먼저 처리하고 할당하고,
증가 연산자가 변수 뒤에 쓰이면 연산을 나중에 처리함
- while문과 Math.random() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고, 눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성해보세요. 눈의 합이 5가 되는 조합은 (1,4), (4,1), (2,3), (3,2)입니다.
public class HomeworkPrac3 {
public static void main(String[] args) {
int result = 0;
# 두 주사위의 합을 저장할 변수를 선언한다.
while (result != 5) {
# 두 주사위의 합이 5일때까지 반복한다
int num1 = (int) (Math.random() * 6) + 1;
int num2 = (int) (Math.random() * 6) + 1;
# 랜덤함수 Math.random을 이용하여 랜덤으로 숫자를 뽑는다.
# 랜덤함수는 기본형이 Double형이기에 (int) 로 정수화 시켜주어야하고,
# 랜덤함수는 0부터 나오기때문에 +1을 더해준다
result = num1 + num2;
#result의 두 숫자의 합을 더해서 저장한다.
System.out.println("|주사위 1 : " + num1 + "| 주사위 2 :" + num2 + "| 합 :" + result);
} System.out.println("두 주사위의 합이 5가되어 종료합니다.");
}
}
> Task : 출력 결과
|주사위 1 : 6| 주사위 2 :6| 합 :12
|주사위 1 : 6| 주사위 2 :4| 합 :10
|주사위 1 : 5| 주사위 2 :4| 합 :9
|주사위 1 : 4| 주사위 2 :4| 합 :8
|주사위 1 : 3| 주사위 2 :3| 합 :6
|주사위 1 : 3| 주사위 2 :4| 합 :7
|주사위 1 : 5| 주사위 2 :2| 합 :7
|주사위 1 : 1| 주사위 2 :4| 합 :5
두 주사위의 합이 5가되어 종료합니다.
문제풀이 ✏️
문제 : 랜덤으로 두 숫자를 받아서 두 수의 합이 5이 아니면 계속, 두수의 합이 5면 실행을 멈추는 코드를 만든다
풀이 :
랜덤함수(Math.random())을 사용하여 두 랜덤 숫자를 받는다.
Math.random()의 함수는 기본형이 double형이고, 0부터 시작하기 때문에 정수형으로 캐스팅해주고, +1을 더해서 1부터 나오도록 해서 두수의 연산을 하였다.