과제1

2022. 9. 23. 12:13과제

728x90
SMALL

문제 1. 다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력된 이유는?

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

- int 타입으로 변수타입을 지정하고 계산을 하게 되면 소수의 결과가 나오더라도  int 타입인 정수만 가지고와서 출력되기 때문에 처음 var1 / var2 로 계산을 하게 되면 2.5가 나오는 것이 아닌 정수 2만이 출력되게 되고 그 상태에서 double로 지정하여 저장해주었기 때문에 var3 는 2.0이 된다.

그래서 최종적으로 4의 결과값이 나온다.

 

[5값 출력을 위한 코드 변경]

int var1=5; // 정수 5
int var2=2; // 정수 2
double var3=(double)var1/var2; // var1 과 var2 의 계산값 타입을 double로 변경해준다. 
int var4=(int)(var3*var2); // 정수 var2 와 소수 var3 를 곱하여 나온 5.0 을 int 타입으로 다시 지정하여 정수로 저장
System.out.println(var4); // var4 값 5 출력

 

 

 

문제 2. 다음 코드를 실행했을 때 출력 결과는?

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

- 해당 코드를 이해하기 위해선 증감연산자에 대한 내용을 알고 있으면 좋다.

   증감연산자에는 '++' 와 '--' 와 같은 같은 기호가 존재하는데, 이는 일반적인 '+' 와 '-' 와 같이 값을 증가시키고 감소시키는     역할에 대해서는 동일하지만 기입한 위치에 따라 반영되는 값이 다르다.

 

   '++' 혹은 '--' 를 위의 코드와 같이 변수 앞에 기입하게 되면 먼저 증가값 1이 먼저 변수 x에 반영되어 x 는 11이 된다.

   y변수 뒤에 '--' 기입하게 되면 계산식에는 우선 y변수에 저장된 값으로 계산된 이후에 변수 y에 감소값이 1이 적용된다. 

 

   즉, 기호를 앞에 쓰면 증감이 적용된 상태로 변수가 지정된 상태이고, 뒤에 쓰게 되면 증감이 적용되지 않은 상태로 초기     값 변수가 우선 지정되게 된다. 

   (뒤에 쓰게 된 증감이 적용되는 것은 다시 한번 더 해당 변수를 이용하여 계산식을 적용시켜보면 확인할 수 있다

 

 

 

문제 3. 주사위 문제

[조건]

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

  • 출력 예시
시작!
(3,6)
(2,6)
(1,4)
끝!

 

[작성 코드]

	public static void main(String[] args){
        int[] dice1 = {1,2,3,4,5,6}; // 주사위1 설정 (배열)
        int[] dice2 = {1,2,3,4,5,6}; // 주사위2 설정 (배열)

        int dice_result = 0; // 주사위1 과 주사위2의 눈 합이 저장될 변수 설정 및 초기화
        boolean true_false = true; // 틀린 결과(false)가 나올때까지 무한히 돌면서 실행되는 while문의 초기 true 값

        System.out.println("시작!"); 

        while(true_false){ // true 값으로 설정된 true_false 변수 덕분에 계속 무한 루프
            int dice_num1 = dice1[(int)(Math.random() * dice1.length)]; 
            int dice_num2 = dice2[(int)(Math.random() * dice2.length)];
            // 지정된 주사위1과 주사위2 배열 내부의 값 중 랜덤하게 하나 추출하기 위해 math.random() 사용
            // math.random()은 초기에 소수점 미만의 값들이 랜덤하게 추출되어 나온다. 예) 0.123456778~, 0.87665554~
            // 현재 주사위 배열 내부의 길이는 6 이므로 주사위 내부의 값들로 범위를 제한하면서 결과를 나오게 하려면 주사위 내부길이 값인 6으로 곱해줘야한다.
               (이는 dice1.length 길이를 구하는 명령어로 곱해줘도 무방하다)
            // 또한, 주사위 눈의 값이 소수점으로 나오면 안되기 때문에 int 타입으로 변경해준다.

            dice_result = dice_num1 + dice_num2; // 주사위1 과 주사위2의 합 결과를 미리 만들어준 dice_result 변수에 저장한다.

            if(dice_result == 5){ // 조건에 나와있는 것처럼 dice_result 값이 5이면 추출될 수 있도록 한다.
                true_false = false; // true로 인해 무한루프로 돌아가는 while문을 멈추고 빠져나오기 위해 다시 true_false 변수를 false로 바꿔주도록 한다.
                System.out.println("(" + dice_num1 + ", " + dice_num2 + ")"); // 조건에 나와있는 결과 양식대로 나올 수 있도록 한다.
            }
        }

        System.out.println("끝!");
    }

- 처음에 문제의 조건이 주어졌을때 적혀있는 조합이 모두 나올 수 있도록 하는 것인줄 알았으나, 제대로 다시 읽어보니 5      가 나오면 바로 출력되고 끝이나는 조건이였다.

   코딩에 대한 이해도도 중요하지만 그에 따라 주어지는 구문들에 대한 이해력도 키울 필요가 있어보인다.

 

 

728x90
반응형
LIST