Java 과제 풀이

Dorothy·2022년 11월 18일
0

항해99

목록 보기
6/17

2주차 프로그래밍 기초

문제 1

다음 코드를 실행하면 출력 결과로 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로 강제 타입 변환을 사용하였다.


문제 2

다음 코드를 실행했을 때 출력 결과는 무엇입니까? (증감연산자에 대해 알아보세요!)

int x = 10;
int y = 20;
int z = (++x) + (y--);
System.out.println(z); // 31

증감 연산자인 ++가 x의 앞에 있기 때문에 연산을 수행하기전 x의 값이 1이 증가한 11이 되어 31이라는 값이 출력된다. y는 --가 뒤에 있기때문에 연산을 수행한 후 1이 감소되어 19가 된다.


문제 3

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

임의의 정수 뽑는법

  1. Math.random() 메소드는 0.0~1.0 사이에 속하는 double 타입의 난수 하나를 리턴한다. 비교 연산자로 표현하면 다음과 같다.
0.0 <= Math.random() < 1.0
  1. 1~10 사이의 정수 중에서 하나의 정수를 얻기 위해 10을 곱하면 다음 범위에 속하는 하나의 double 타입 값을 얻는다.
0.0 * 10 <= Math.random() * 10 < 1.0 * 10
  1. 이 상태에서 int 타입으로 강제 타입 변환하면 하나의 정수값을 얻을 수 있다.
(int) 0.0 <= (int) (Math.random() * 10) < (int) 10.0
  1. 여기에 1을 더하면 1~10 사의의 정수 중에서 하나의 정수를 얻게 된다.
0 +1 <= (int) (Math.random() *10) + 1 < 10 + 1
  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문을 사용했다.

0개의 댓글