🎯

Computer Science A — 기말 족집게 노트

시험 직전 압축 · 교재 Ch.1~5 · "코드 출력 예측 + 오류 찾기" 빈출 함정 모음

🔥 Top 함정 10 — 틀리면 바로 점수 깎이는 것들

1. 정수 나눗셈은 소수점을 버린다 빈출

5 / 2 = 2 (2.5 아님!). 한쪽이라도 실수면 실수 나눗셈: 5.0 / 2 = 2.5. 나머지는 %: 5 % 2 = 1.

2. float 리터럴엔 반드시 f 접미사 빈출

float x = 0.01; → 컴파일 오류 (0.01은 double). float x = 0.01f; 가 맞다. 마찬가지로 int n = 100.0; 도 오류 → int n = 100;.

error: incompatible types: possible lossy conversion
3. float vs double 합 — double도 50.5가 아니다! 교재 핵심
for (float i = 0.01f; i <= 1.0f; i += 0.01f) sum += i; // float for (double i = 0.01; i <= 1.0; i += 0.01) sum += i; // double
float → 50.499985 double → 49.50000000000003

이론값은 50.5지만 부동소수점 오차로 둘 다 다르다. double은 마지막 i가 1.0보다 살짝 커져 마지막 항이 빠져 49.5가 된다. 정수 카운터(for(int c=0;c<100;c++))로 100번 보장하면 50.50000000000003.

4. 문자열 + 연산은 왼쪽부터, 문자열을 만나면 연결 빈출
System.out.println(2 + 3 + "x" + 2 + 3);
5x23

2+3=5(숫자) → +"x"="5x" → 그 뒤로는 모두 문자열 연결 → "5x23".

5. String의 S는 대문자, 메서드엔 static 빈출

string[] args → 'cannot find symbol'. main에서 부르는 메서드에 static이 없으면 'non-static method cannot be referenced from a static context'.

6. 증감식 누락 = 무한 루프 빈출
int j = 0; while (j < 5) { System.out.println(j); } // j++ 없음 → 무한

반복 변수를 바꾸는 문장이 없으면 조건이 영원히 참. 반복 횟수 세기도 단골: for(i=0;i<10;i++) → 10번, for(i=1;i<=10;i++) → 10번.

7. do-while은 최소 1번 실행 빈출
int i = 10; do { System.out.println("run " + i); i++; } while (i < 10);
run 10

조건을 나중에 검사하므로 조건이 처음부터 거짓이어도 본문이 한 번은 실행된다.

8. 자바는 pass by value — 원본은 안 바뀐다 빈출
int x = 1; increment(x); System.out.println(x); static void increment(int n) { n = n + 10; }
1

인수의 값을 복사해 전달하므로 메서드 안에서 매개변수를 바꿔도 호출한 쪽 변수는 그대로.

9. 오버로딩은 매개변수로만 구분 (반환 타입 X) 빈출

int f(int x)double f(int x) 를 함께 두면 'already defined' 오류. 같은 이름 + 다른 매개변수 목록이어야 오버로딩. 매개변수 이름만 달라도 같은 시그니처(오버로딩 아님).

10. 오버로딩 선택 — 가장 구체적인 메서드 / 자동 변환 교재 §5.8

max(int,int)max(double,double) 가 있을 때: max(3,4)int 버전(더 구체적). max(2, 2.5) → 2가 double 2.0으로 자동 변환되어 double 버전.

📤 꼭 외워둘 출력값 (실제 Java 검증)

코드출력
5/2 / 5%2 / 5.0/22 / 1 / 2.5
1 + 2*3 - 43
(int)9.99 / (int)(3.8+0.5)9 / 4
10 / 3.03.3333333333333335
float 합 (0.01~1.0)50.499985
double 합 (같은 루프)49.50000000000003
누적합 print(sum); sum+=i+1; (i=0..9)0 1 3 6 10 15 21 28 36 45
누적곱 1!~5!1 2 6 24 120
gcd(12, 25)1 (서로소)
i=5; i++ 출력 후 ++i5 그다음 7
'a' + 198 (char 아닌 int)

🧠 개념 한 줄 정리

JVM: 소스(.java) → 컴파일러(javac) → 바이트코드(.class) → 각 OS의 JVM이 실행 ⇒ 플랫폼 독립.
&& 둘 다 참일 때만 참 / || 하나라도 참이면 참 / ! 부정(단항).
단축 평가: &&는 왼쪽 거짓이면 오른쪽 안 봄, ||는 왼쪽 참이면 오른쪽 안 봄.
• 다중 if-else는 위에서 처음 참인 가지 하나만 실행.
for ↔ while 상호 변환 가능 / 최소 1회 보장은 do-while.
void = 반환값 없음(return 생략 가능) / 값 반환 메서드는 결과를 식·변수에 사용.
switch 문은 시험 범위 제외.