자바 프로그래밍 입문-연습 문제 #1

파핑·2022년 3월 22일
0

JAVA practice

목록 보기
1/2
post-thumbnail

자바 프로그래밍 문제 풀이 #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'가 출력된다.

profile
html/css공부 중(JAVA잠시 접어두는 중)

0개의 댓글