본문 바로가기
Java/Java

항해99 - Java 스터디 과제

by 전재경 2022. 11. 18.

Q1.

다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었습니다.

어디에서 잘못 작성된 것일까요?

 

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

 

우선 정수와 실수의 개념을 알아야한다. int는 정수변수, double은 실수 변수이다.

일반적으로 정수 실수가 아닌 일반적으로 계산을 했을 경우는 5 ÷ 2 를 하면 2.5가 나오는게 우리가 배운 기본개념이다.

하지만 정수 5, 정수 2를 나누면 결과는 소수점 뒤 .5를 버리고 2만 산출된다. 

 

 double var3=var1/var2;

 

결과는 2.5가 아닌 2가 나온 것이고 double var3의 값은 2가 아닌  2.0으로 저장이 됐을 것이다.

int var4=(int)(var3*var2);

 

var3 * var2의 값은 var3= 2.0 , var 2의 값은 2 

이 둘만 있다면 4.0의 실수 값으로 곱해졌다.

이를 받는 var4의 값을 double var4 = (var3 * var2);

int의 변수타입 변환이 필요가 없기 때문

결과는 4.0의 실수 값으로 출력된다.

 

하지만 받는 var4의 값을 int 정수, 그리고 (int)(var3 * var2);로 정수로 변환하여 출력하였기 때문에

4.0이 아닌 4의 값이 출력된다.

 

A1.

변수의 변환을 이용하여 해결하면 될것이다.

 

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

 

var1 / var2를 나눌때 실수 값으로 변환하여 문제를 해결하면 될것이다.

그게 아니라면

 

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

처음 var1과 var2의 받는 변수의 값을 실수변수 double 형태로 받으면 된다.

 


Q2.

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

 

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

 

A2.

우선 증감연산자의 위치를 봐야한다.

앞에 있는지, 뒤에 있는지

++x 와 같이 앞에 있다면 먼저 1을 증가한 뒤 계산을 할 것이고,

y--와 같이 뒤에 있다면 계산을 한 다음 1을 감소할 것이다.

 

그렇기에 int z = 11 (1이 증가) + 20 ; (계산 후 1이 감소)

출력 값은 31이 나올 것이다.

 

하지만 다음 값을 출력하게 된다면 

int z = 12 (11에서 다시 1이 증가하여 계산) + 19(1이 감소하여 20-1이 저장되어 있고 이가 먼저 계산이 되고 1이 감소)

출력 값은 다시 31이 나올 것이다.

 

계속하여 이 연산식의 값은 반복문으로 돌려도 끝없이 31이라는 값이 나올 것이다.

 

while(true)
{
    int x=10;
    int y=20;
    int z = (++x) + (y--);
    System.out.println(z);
}

 

Q3.

while문과 Math.random() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고,

눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성해보세요.

눈의 합이 5가 되는 조합은 (1,4), (4,1), (2,3), (3,2)입니다.

 

A3.

 

[Java]Math.random()이란 ?

Math.random() 함수 double 형으로 0.0이상 1.0 미만 사이의 값을 반환하는 함수이다. 난수를 만들고 싶을때 자주 이용되는 함수이다. public class MathRandomTest{ public static void main(String[] args){ System.out.println(

jkadv.tistory.com

 

[Java]주사위 랜덤 뽑기

Math.random() 함수 Math.random()함수를 이용해 뽑을 수 있다. 0.0은 범위에 포함되고 1.0은 포함되지 않는다. 이것을 비교연산자로 표현하면 아래와 같다. 0.0

jkadv.tistory.com

 

이전에 작성해 놨던 글이 도움이 된다.

 

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

 

우선 주사위 랜덤 뽑기의 코드이다.

while문을 사용하여 숫자의 합이 5가 되면 멈추게 break문으로 작성을 하면 된다.

 

public class Main {
    public static void main(String[] args) {
        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;
            }
        }
    }
}

 

위에서 작성한 주사위 랜덤 뽑기 코드를 통해 2가지 값을 뽑고,

num1의 값과 num2의 값을 (num1 ,num2) 이렇게 나오게 출력한다.

그 후 if문을 통해 두 수의 합이 5가 될 경우 break문이 작동하게 되어 코드를 끝낸다.

 

이상 Java스터디 과제 끝!

 

그래도 공부를 조금 해서 쉽게 풀수 있었던 과제였던 것 같다.

'Java > Java' 카테고리의 다른 글

[Java]StringBuilder 란 ?  (0) 2022.11.20
[Java] Stream이란 ?  (0) 2022.11.20
[Java]StringTokenizer 문자열 분리하기  (0) 2022.11.11
[Java]열거 타입  (0) 2022.11.11
[Java]향상된 for문  (0) 2022.11.11

댓글