오늘은 간단한 3개의 JAVA 문제들을 풀어보자.
[문제 설명]
자료형별 사칙연산의 결과가 무엇인지 제대로 알고 있는지 확인하는 간단한 문제이다. 쉬운 문제이기에 바로 살펴보자.
[필요한 정보]
연산자별 연산의 결과는 위와 같다. 자료형이 동일하다면 동일한 자료형을 가진 결과가 나오고 자료형이 다르다면 범위가 더 넓은 자료형으로 결과값이 생성된다.
[문제 풀이]
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형으로 연산되기 때문이다.
[문제 설명]
증감 연산자이자 단항 연산자인, '++'와 '--'에 대한 이해를 묻고 있는 문제이다. 쉬운 문제이기에 바로 살펴보자.
[필요한 정보]
처음 증감 연산자를 겪으면 바로 이해하지 못할 수 도 있다. 아래의 예시를 보면서 살펴보자.
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
}
[문제 설명]
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문을 종료한다.