티스토리 뷰

1. 리터럴이란?

☞프로그램에서 직접 표현한 값, 소스 코드의 고정된 값을 대표하는 용어
정수, 실수, 문자, 논리, 문자열 리터럴 존재

 

정수 리터럴:

>> int 타입: int a = 7; 그냥 숫자. 

>> long타입: long b = 26L; 숫자 뒤에 L또는 ㅣ 붙여서 표시. 

 

 

실수 리터럴:

>> double타입: double c = 3.14; 혹은 double c = 3.14D;

>> float타입: float d = 3.14f; 끝에 f 반드시 붙인다.

 

문자 리터럴:

>> char타입: char e = 'a'; 작은 따옴표를 ㅅ ㅏ용한다.

>> 문자열타입: String f = "Happy day"; 큰 따옴표를 사용한다.

>> Iter + 26 = "Iter26"

 

 

 

논리 리터럴:

>> boolean타입: 변수에 치환하거나 조건문에 이용

 

2. 아래의 내용이 에러가 나는 이유와 수정 방법은?

System.out.println(3147483647 + 3147483648); //에러남

☞괄호 안의 두 개의 정수 모두 31억이 넘는다. jvm은 32비트 메모리 구조라 아무런 데이터 타입 설정이 없을 경우 4byte의 int를 최우선으로 적용한다.
4byte의 int는 구현 가능한 자릿수가 약 - 21억 부터 + 21억이라 이 범위를 초과할 경우 오류가 발생하는 것이다.
때문에 int보다 범위가 크고 31억이라는 숫자 연산이 가능한 long을 데이터 타입으로 설정할 경우 에러가 발생하지 않으며 
System.out.println(3147483647L + 3147483648L); 각 숫자 끝에 L을 붙이면 오류가 없이 연산이 진행된다.



3. 자동 형변환과 명시적 형변환에 대하여 설명하시오.

☞명시적 형변환은 (double)num1 / 3 처럼 (double)을 붙여 정수값으로 계산될 연산에 실수 계산을 진행하라고 강제적으로 형변환 명령을 시키는 것이다.



4.아래의 에러가 나는 이유를 설명하고 수정 하시오. ( 형변환으로 설명)
int a = 3;
int b = 4;
double result = a / b;
System.out.println(result);

☞int는 정수형 데이터 타입인데 3나누기 4를 하면 1 이하의 소수가 나온다. 컴퓨터는 int를 정수로 인식하기 때문에 1 이하의 소수일 경우 0으로 출력이 될 것이다.
때문에 실수 계산을 요하는 double result를 명령하여도 정수 계산 이후 실수화가 진행되어 0.0으로 표현될 뿐 원하는 값은 도출되지 않는다.
이를 수정하기 위해 명시적 형변환을 진행하는데, double result = (double)a/b; 혹은 double result=a/(double)b;라고 하면 된다.




5. 이스케이프 시퀀스의 종류를 나열하고 기능을 설명하시오.☞ Escape sequence란 String 리터럴이나 문자에 함께 사용되나 그 문자 그대로의 의미를 뜻하지는 않는다.

컴퓨터 언어로 표현하기 힘든 기능, 문자를 \(Escape Character) 사용하여 표현한는 방법이다. 

 형태이며 대표적으로 4 종류가 있다.

 

1) \b = Backspace

후 데이터를 한 칸 당기는 것이다. 한 칸 back한다와 동일. 따라서 한 칸 당겨질 때 기존에 있던 데이터 위에 덮어지는 것과 같아짐.
System.out.println("AB\b"+'C');
결과값: 

ABC

 

....AC가 나와야할텐데 왜저럼

 

2) \t  = Horizontal Tab

스페이스바와 같은 기능. 
System.out.println("AB\t"+'C');
결과값: 

AB      C

 

2-2) \v  = Vertical Tab

탭키와 같은 기능. 자바에서는 사용 불가 
sysout("AB"+\v+'C');

 

 

 

4) \n  = Newline

엔터와 같은 기능. 뉴(new)라인 재생, 개행이라고도 하며 행을 연다는 의미이다.
System.out.println("AB\n"+'C');
결과값: 

AB
C

 

5) \r  = Carriage Return

리턴을 뜻하며 후 데이터가 선데이터 제일 처음 값에 덮어 씌워진다. 실무에서 거의 안씀.

System.out.println("AB\r"+'C');
결과값: 

AB
C

.....CB이게 나와야하는데 뭐지 


6. 아래의 출력 결과를 확인하고, 130이 나오는 이유를 설명
System.out.println('A'); 
System.out.println('A' + 'A');

☞출력결과: A, 130
형변환 원칙과 같은 원리이다. int이하의 범위는 int로 형변화 한다. 정수를 담던지 말던지...
char ▷ int
short ▷ int
그래서 System.out.println('A'); 와 같은 하나짜리 char A는 println이 그저 뿌리는 것이다.
근데 System.out.println('A' + 'A');이거는 AA가 아니라 숫자 계산이 되어 130이 된다. char가 int로 형변환 되어 계산이 되었기 때문이다.
후 데이터 앞에 + 가 있고, 둘의 데이터 타입을 따져 봐야하는데 선 데이터와 후 데이터의 데이터 타입이 같은 상황이다. 
그리고 A의 대응되는 ASCII 번호는 65이므로 숫자로 표현된 A는 65+65로 130이 되는 것이다.




7. 결합 방향과 우선순위에 대하여 설명하시오.

☞수학 연산과 같은 개념이다. 1+2*(4-3)이 있을 경루 괄호를 우선으로 계산하고 그 후 곱셈, 덧셈 순으로 계산하는 것을 우선 순위라고 한다.
1+2-3이 있을 경우 좌측에서 우측으로 계산하는 것을 결합 방향이라고 한다. 이 경우 +와 -의 우선 순위가 같으므로 좌에서 우로 계산을 하는 것이다.



8. "1초과 100미만인가?"를 코딩으로 표현하면?

		int num = 5555;
		boolean result = (num>1 && num<100);
		System.out.println(result);


결과값:  false



9. "2의 배수 또는 3의 배수?" 를 코딩으로 표현 하면?

		int num = 54;
		boolean result = (num%2==0 || num%3==0);
		System.out.println(result);

 

결과값: true



10. 아래의 프린트 결과를 예측해 보고, 코딩 후 결과를 확인 하시오.

class SCE {
	public static void main(String[] args) {
    
		int num1 = 0;
		int num2 = 0;
		boolean result;

		result = ((num1 += 10) < 0) && ((num2 += 10) > 0);
        
	}
}


☞(num1 더하기 10은 0+10은 0보다 작다)&&(num2 더하기 10은 0+10은 0보다 크다). 좌false, 우true. &&은 양 옆 데이터 모두 true여야 true가 나오므로 result는 flase값이다. 
System.out.println("result = " + result);
☞result= false가 나올 것이다.


System.out.println("num1 = " + num1);

☞num1 = 0 이 나올 것이다.   ▶오답; 코딩결과 num1 = 10◀
▶▶num1=10이 나온 이유: (num1+=10)을 함으로서 num1 =10이 되었다. 10은 0보다 큰 것이 맞으므로 true가 된다. 
그 상태로 sysout(num1)값을 물으니 연산 결과 값인 10이 도출된 것이다.◀◀

System.out.println("num2 = " + num2);


☞num2 = 0 이 나올 것이다.


result = ((num1 += 10) > 0) || ((num2 += 10) > 0);

 

☞(num1 더하기 10은 0+10은 0보다 크다)|| (num2 더하기 10은 0+10은 0보다 크다). 좌true, 우true.||은 양 옆 데이터 둘 중 하나가 true면 true가 나오므로 result는 true값이다.

 

System.out.println("result = " + result);

 

☞result= true가 나올 것이다.

System.out.println("num1 = " + num1);

 

☞num1 = 0 이 나올 것이다.  ▶오답; 코딩결과 num1 = 20◀
▶▶num1=20이 나온 이유: (num1+=10)을 함으로서 num1은 앞서 10이 나온 값에서 +10을 더하게 되어 20이 된다. 
20은 0보다 큰 것이 맞으므로 true라는 값이 나온다. 따라서 sysout(num1)은 최종적으로 num1=0+10+10의 값인 20이 도출된다. ◀◀
sysout(num1)값을 물으니 연산 결과 값인 10이 도출된 것이다.

 



System.out.println("num2 = " + num2);

 

☞num2 = 0 이 나올 것이다

}
}

☞논리 연산자와 SCE(Short-Circuit Evaluation)
sce란 '최단거리 연산'이라고 한다. 연산 결과 나온 것에 대해 더 이상 연산을 수행하지 않는 것. JAVA와 JAVAScript그리고 Python은 SCE연산을 지원한다.
연산자: (&&)AND 선조건이 true일때만 후조건 실행. 선조건이 false인 경우 후조건 진행하지 않는다.
연산자: (||)OR 선조건이 true면 후조건을 진행하지 않는다. 선조건이 false인 경우에만 후조건을 실행.




11.아래를 프로그래밍 하시오.

국어 50, 영어 70, 수학 95점 일때

총점과 평균을 구하시오.
-단 평균은 소숫점 까지 나오도록 하시오

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Grade {
    public static void main(String[] args) {
 
        int kor = 50;
        int eng = 70;
        int math = 95;
 
        int total = kor + eng + math;
        System.out.println("총점: " + total);
 
        double avg = (double) total / 3;
        System.out.println("평균: " + avg);
        
 
    }
}
cs

 

 

 

 

 

 

 

댓글