🔥 Top 함정 10 — 틀리면 바로 점수 깎이는 것들
5 / 2 = 2 (2.5 아님!). 한쪽이라도 실수면 실수 나눗셈: 5.0 / 2 = 2.5. 나머지는 %: 5 % 2 = 1.
f 접미사 빈출float x = 0.01; → 컴파일 오류 (0.01은 double). float x = 0.01f; 가 맞다. 마찬가지로 int n = 100.0; 도 오류 → int n = 100;.
이론값은 50.5지만 부동소수점 오차로 둘 다 다르다. double은 마지막 i가 1.0보다 살짝 커져 마지막 항이 빠져 49.5가 된다. 정수 카운터(for(int c=0;c<100;c++))로 100번 보장하면 50.50000000000003.
2+3=5(숫자) → +"x"="5x" → 그 뒤로는 모두 문자열 연결 → "5x23".
String의 S는 대문자, 메서드엔 static 빈출string[] args → 'cannot find symbol'. main에서 부르는 메서드에 static이 없으면 'non-static method cannot be referenced from a static context'.
반복 변수를 바꾸는 문장이 없으면 조건이 영원히 참. 반복 횟수 세기도 단골: for(i=0;i<10;i++) → 10번, for(i=1;i<=10;i++) → 10번.
do-while은 최소 1번 실행 빈출조건을 나중에 검사하므로 조건이 처음부터 거짓이어도 본문이 한 번은 실행된다.
인수의 값을 복사해 전달하므로 메서드 안에서 매개변수를 바꿔도 호출한 쪽 변수는 그대로.
int f(int x) 와 double f(int x) 를 함께 두면 'already defined' 오류. 같은 이름 + 다른 매개변수 목록이어야 오버로딩. 매개변수 이름만 달라도 같은 시그니처(오버로딩 아님).
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/2 | 2 / 1 / 2.5 |
1 + 2*3 - 4 | 3 |
(int)9.99 / (int)(3.8+0.5) | 9 / 4 |
10 / 3.0 | 3.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++ 출력 후 ++i | 5 그다음 7 |
'a' + 1 | 98 (char 아닌 int) |
🧠 개념 한 줄 정리
• JVM: 소스(.java) → 컴파일러(javac) → 바이트코드(.class) → 각 OS의 JVM이 실행 ⇒ 플랫폼 독립.
• && 둘 다 참일 때만 참 / || 하나라도 참이면 참 / ! 부정(단항).
• 단축 평가: &&는 왼쪽 거짓이면 오른쪽 안 봄, ||는 왼쪽 참이면 오른쪽 안 봄.
• 다중 if-else는 위에서 처음 참인 가지 하나만 실행.
• for ↔ while 상호 변환 가능 / 최소 1회 보장은 do-while.
• void = 반환값 없음(return 생략 가능) / 값 반환 메서드는 결과를 식·변수에 사용.
• switch 문은 시험 범위 제외.