🌎 Web/Java

[Java] 정수 나눗셈 연산, 증감 연산자, while문과 조건식

오늘 ONEUL 2022. 11. 18. 11:47

정수 나눗셈 연산

(혼자 공부하는 자바 p.80)

다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었다. 어디에서 잘못 작성된 것일까?

int var1 = 5;
int var2 = 2;
double var3 = var1 / var2;
int var4 = (int)(var3 * var2);
System.out.println(var4); // 4

 

3번 라인의 결과값부터 잘못 되었다고 할 수 있다.
이유는 자바에서 정수 연산의 결과는 정수이기 때문이다.
디버깅 모드로 라인 하나하나를 살펴보자.


7번 라인에서 var1 / var2의 연산 결과는 2.5가 아니라 2가 되고, 2를 double 타입으로 변수 var3에 저장하므로 2.0이 된다.
8번 라인에서 var3 * var2의 연산 결과는 4.0이 되고, 4.0을 int로 강제 타입 변환하여 소수점 이하 부분은 버려지고 정수 부분만 저장되므로 4가 된다. 따라서 var4의 출력 결과는 4가 되는 것이다.

그럼 어떻게 해야 5를 출력할 수 있을까?

3번 라인의 var1 / var2를 정수 연산이 아니라 실수 연산으로 변경해야 한다. var1과 var2 둘 중 하나 또는 둘 모두를 double 타입으로 변환하는 것이다. 정수 타입을 실수 타입으로 변환하는 방법은 다음과 같다.

float floatValue = (float) 정수;
double doubleValue = (double) 정수;

이제 다음과 같이 코드를 변경할 수 있다.

int var1 = 5;
int var2 = 2;
double var3 = (double)var1 / var2;
int var4 = (int)(var3 * var2);
System.out.println(var4); // 5

3번 라인에서 var1를 double 타입으로 변환하였다. var2를 double로 변환시켜 주어도 되고, 둘 다 변환시켜주어도 되지만 (double)(var1 / var2)의 결과는 2.5가 아니라 2.0이 된다. (var1 / var2)가 먼저 연산되어 2가 되고, 여기에 (double) 2를 적용해서 2.0이 되기 때문이다.

 

 

 

증감 연산자

(혼자 공부하는 자바 p.111)

다음 코드를 실행했을 때 출력 결과는 무엇일까?

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

 

변수 z의 출력 결과는 31이다.

증감 연산자는 다른 연산자를 함께 사용한다면 증감 연산자의 위치에 따라 결과가 다르게 나온다.

  • 증감 연산자가 변수 앞에 있으면? (++x) → 우선 변수값을 1 증가 또는 1 감소시킨 후에 다른 연산자 처리
  • 증감 연산자가 변수 뒤에 있으면? (y—) → 다른 연산자를 먼저 처리한 후 변수 값을 1 증가 또는 1 감소

어떤 흐름으로 연산이 진행되는지 살펴보자.

7번 라인에서 x의 값은 1 증가되어 11이 된 후 y와 합해서 31이 되고, 그 후에 y의 값이 1 감소되어 19가 된다.

 

 

while문과 조건식

(혼자 공부하는 자바 p.161 Q3)

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

[출력 예시]

시작!
(3, 6)
(2, 6)
(1, 4)
끝!

 

먼저 Math.random() 메소드를 이용해 정수 난수를 만들어준다. (혼자 공부하는 자바 p.139)

정수 난수를 만드는 자세한 내용은 이전의 포스팅을 참고하자. 👉 정수 무작위수(난수) 출력 방법

int num = (int)(Math.random() * 6) + 1;

while문 안에서 반복적으로 난수를 만들고, x + y의 합이 5가 되었을 때 반복이 멈출 수 있도록 조건식을 작성한다.

package algorithm.homework;

public class Homework3 {
    public static void main(String[] args) {
        System.out.println("시작!");
        int x = 0;
        int y = 0;
        while (x + y != 5) {
            x = (int)(Math.random() * 6) + 1;
            y = (int)(Math.random() * 6) + 1;
            System.out.println("(" + x + ", " + y + ")");
        }
        System.out.println("끝!");
    }
}

 

 

 

※ 이 내용은 책 [혼자 공부하는 자바]를 보고 정리한 내용입니다.