20221118 JAVA 과제

황지성·2022년 11월 18일
1

오늘은 간단한 3개의 JAVA 문제들을 풀어보자.

1. 자료형별 연산의 이해

[문제 설명]
자료형별 사칙연산의 결과가 무엇인지 제대로 알고 있는지 확인하는 간단한 문제이다. 쉬운 문제이기에 바로 살펴보자.

[필요한 정보]

연산자별 연산의 결과는 위와 같다. 자료형이 동일하다면 동일한 자료형을 가진 결과가 나오고 자료형이 다르다면 범위가 더 넓은 자료형으로 결과값이 생성된다.

[문제 풀이]

public static void main(String args[]){
	int var1 = 5;						// 5
    int var2 = 2;						// 2
    double var3 = var1/var2;			// 2
    int var4 = (int)(var3*var2);		// 2 * 2
    
    System.out.println(var4);			// 4
}

현재 주석으로 표시된 결과값들이 생성된다. 문제는 3번째 줄이다. 연산 결과를 저장하는 변수의 자료형이 double형일 뿐, 연산 자체는 int형 연산이다. 그렇기에 해당 부분을 아래와 같이 변경해주면 된다.

// 1.
public static void main(String args[]){
	int var1 = 5;						// 5
    int var2 = 2;						// 2
    double var3 = (double)var1/var2;	// 2.5
    int var4 = (int)(var3*var2);		// 2.5 * 2
    
    System.out.println(var4);			// 5
}
// 2.
double var3 = (double)var1/(double)var2;

2번 코드처럼 해줘도 상관없지만 굳이 할 필요는 없다.
var1만 double형으로 형변환해주면 위의 표처럼 결과값은 범위가 더 큰 double형으로 연산되기 때문이다.

2. 연산자의 이해

[문제 설명]
증감 연산자이자 단항 연산자인, '++'와 '--'에 대한 이해를 묻고 있는 문제이다. 쉬운 문제이기에 바로 살펴보자.

[필요한 정보]

처음 증감 연산자를 겪으면 바로 이해하지 못할 수 도 있다. 아래의 예시를 보면서 살펴보자.

public static void main(String args[]){
	int x = 1;
	int y = 1;
	
	System.out.println(x);			//1번. 결과값 : 1
	System.out.println(++x);		//2번. 결과값 : 2
	System.out.println(x++);		//3번. 결과값 : 2
	System.out.println(x);			//     결과값 : 3

	System.out.println((++x) + y); 	//4번. 결과값 : 5
	System.out.println((x++) + y);	//5번. 결과값 : 5
	
}

주석은 결과값이다. 우선 증감 연산자가 어떻게 동작하는지 알아보자.
'++'는 +1과 동일하다. 하지만 변수의 앞에 존재하는지, 뒤에 존재하는지에 따라 동작 방식은 다르다.

  • ++x
    변수의 앞에 붙을 때, 즉 위 코드의 2번과 같을 때는 동작 하기 전에 연산이 먼저 진행된다.
    기존 x = 1이였지만 출력함수가 동작하기 전 x = x + 1 연산이 진행되어 x = 2가 되는 이유이다.

    마이너스 연산도 동일하게 진행된다.

  • x++
    변수의 뒤에 붙을 때, 즉 위 코드의 3번과 같을 때는 동작을 한 후에 연산이 진행된다.
    앞의 연산을 통해 x = 2가 된 상태로 3번이 진행되면 출력함수가 동작을 한 후, x = x + 1이 되어 3의 결과 값이 담긴다. 그래서 출력 결과는 3이 아닌 2가 된다.

    마이너스 연산도 동일하게 진행된다.

[문제 풀이]

public static void main(String args[]){
  int x = 10;
  int y = 20;
  int z = (++x) + (y--); // '++'는 변수 앞에 있기에 '+'연산 전 선행됨.
						 // '--'는 변수 뒤에 있기에 '+'연산 후 진행됨.
						 // 결과값: 11 + 20 = 31
  System.out.println(y); // 연산이 진행된 후의 y값 : 19

  System.out.println(z); // 결과값 : 31
}

3. 반복문 활용

[문제 설명]
Java의 Math 클래스를 활용해보는 문제이다. 쉬운 문제이기에 함께 풀어보자.

[필요한 정보]

Java의 Math 클래스를 사용한다. Math 클래스는 어떤 역할을 할까?

Math는 java.lang 패키지에 포함된 클래스이다. 수학과 관련된 일련의 작업들을 손쉽게 처리할 수 있도록 제공하는 메소드들이 존재한다. Math 클래스의 다양한 메소드들은 static으로 구현되어 있으므로 따로 객체를 생성하지 않고 사용할 수 있다.

1. abs() : 인자로 넘긴 데이터의 절대값을 반환해준다.
2. random : 0.0 ~ 1.0 사이의 임의의 double형 데이터를 생성하여 반환해준다. 이를 활용해 특정 범위 내의 난수를 발생시킬 수 있다.

3. 그 외의 유용한 함수들

[문제 풀이]

public static void main(String[] args) throws IOException {

      int[] dice = {0, 0};        // dice 배열 선언 및 초기화

      while(true){
          dice[0] = (int)((Math.random() * 6) + 1);   // dice[0] input random number (1 - 6)
          dice[1] = (int)((Math.random() * 6) + 1);   // dice[1] input random number (1 - 6)

          System.out.printf("(%d, %d)\n", dice[0], dice[1]);  // output

          if((dice[0] + dice[1]) == 5){
              System.out.println("끝 !");
              break;
          }
      }
  }

dice를 선언 후, 각각의 주사위를 random 함수를 통해 굴린다.

두 주사위의 합이 5가 된다면 while문을 종료한다.

profile
성장하는 개발자

0개의 댓글

관련 채용 정보