티스토리 뷰
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 |
'면접준비 > KOSMO 허쌤 숙제' 카테고리의 다른 글
switch문, 절대값, while, break, continue, 구구단, 배수 (21/10/07) (0) | 2021.10.27 |
---|---|
비트연산자, 쉬프트연산자, 조건문, 삼항연산자(21/10/06) (0) | 2021.10.27 |
아스키코드, 부동소수법, 상수, 리터럴(21/10/04) (0) | 2021.10.27 |
변수, 자료형, JDK, JVM(21/10/01) (0) | 2021.10.27 |
javac, java 명령어(21/09/30) (0) | 2021.10.27 |