자바 프로그래밍 문제 풀이 #1
상수와 리터럴
Q1 변수 두개를 선언해서 10과 2.0을 대입하고 두 변수의 사칙 연산 결과를 정수로 출력해 보세요.
public class A69p {
public static void main(String[]args) {
int num1 = 7;
double num2 = 2.7;
int number1 = (int)(num1 + num2);
int number2 = (int)(num1 - num2);
int number3 = (int)num1 * (int)num2;
int number4 = (int)(num1 / num2);
System.out.println(number1);
System.out.println(number2);
System.out.println(number3);
System.out.println(number4);
}
}
묵시적 형변환을 사용해 num2를 실수에서 정수로 바꿔주었다. 그런데 위에 number3를 보면 다른 변수들과 형 변환의 모습이 다르다.
int number = (int)
(num1 연산자 num2)
;
의 경우 연산을 끝낸 후 정수로 바꾸어 주는 형태로 number3는 이 형태로 계산을 할 경우 출력값으로 18이 나오게 된다.
(뭔가 내키지 않는다.)
그렇기 때문에 형변환 후 연산을 할 수 있도록
int number = int
(int)num1
연산자
(int)num2
;
로 계산을 해주어야 한다. 이렇게 계산할 경우 num2의 값을 2로 변환해 곱하게 되어 출력값으로 14가 나온다.
Q2 다음 코드가 수행될 때 출력되는 값을 적어 보시오.
public class A89p {
public static void main(String[] args) {
int num;
num = 5 + 3 * 10 / 2;
System.out.println(num);
}
}
위 예제 속 연산자를 살펴보자. 우선 '-'는 뺄셈, '+'는 당연히 더하기를 뜻할 것이고 자바에서 '*'은 곱하기, '/'은 나누기 연산자에 해당한다.
여러가지 연산자가 함께 있을 경우 나누기와 곱하기를 우선적으로 계산하여야 하므로 출력값으로 10이 나오게 된다.
Q3 다음 코드가 수행될 때 출력되는 값을 적어 보시오.
public class A89p2 {
public static void main(String[]args) {
int num = 10;
System.out.println(num);
System.out.println(num++);
System.out.println(num);
System.out.println(--num);
}
}
num 옆에 붙어있는 '++'와 '--'연산자는 증감,감소 연산자이다. 사용할 때 주의해야 할 것이 있는데 바로 연산자의 위치이다. 연산자의 위치가 앞에 있을 경우 num에 연산을 한 뒤 문장이 끝난다.
int value = 10;
int num = ++vlaue;
즉, vlaue에 1이 우선적으로 더해진 후 문장이 마무리되어 결과값으로 11이 나오게 된다.
반대로
int value = 10;
int num = vlaue++;
연산자가 뒤에 올 경우 문장이 끝난 뒤 연산이 되어 +1이 예정되어 있는 상태가 된다.
결국 출력값으로는 10이 나오게 되나 그 다음 문장에서 vlaue의 값을 11로 시작하게 되는 것이다.
다시 위의 예제로 돌아가 연산자의 위치를 살펴보며 내려오게 되면 출력값으로 10, 10, 11, 10 이 나오게 된다.
Q4다음 코드가 수행될 때 출력되는 값을 적어 보시오.
public class A89p3 {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
boolean result;
result = ((num1 > 10) && (num2 > 10)); //1
System.out.println(result);
result = ((num1 > 10) || (num2 > 10));
System.out.println(result); //2
System.out.println(!result); //3
}
}
우선 boolean은 논리 연산자로 'ture' 또는 'false'로 출력값이 나온다. 주석으로 숫자가 달린 문장이 'ture'인지 'false'인지 알아보는 문제가 되겠다.
다음으로 문장에 있는 연산자들을 살펴보자.
&&은 논리곱이라고 하는 연산자로 두 항이 모두 참인 경우에만 결과 값이 참(ture)로 결과값이 출력된다. 그렇지 않은 경우는 거짓(false)으로 출력된다.
||은 논리합이라고 하는 연산자이다. 두 항 중 하나의 항만 참이면 결과 값은 참이된다. 두 항이 모두 거짓이면 결과 값은 거짓이다.
ㅤ
!은 부정이라고 하는 연산자이다. 단항 연산자로 참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꾼다.
ㅤ
자 이제 문장과 연산자를 살펴보고 'ture'로 출력될지 'false'로 출력될지 알아보자.
논리 곱을 사용하는 첫 문장은 '10이 10보다 크다' , '20이 10보다 크다'라고 말하고 있다. 두번째 예는 맞았으나 아쉽게 첫번째 예는 틀렸으므로 1의 결과값으로 'false'가 출력된다.ㅤ
두번째 문장은 논리 합을 사용하므로 첫번째 예가 틀렸어도 2의 결과값으로 'ture'가 출력된다.
ㅤ
마지막 3은 부정을 사용하였기 때문에 'ture'의 반대인 'false'가 출력된다.