이상민
[혼공자바 2주차] Chapter 04 ~ 05 본문
혼자공부하는 자바 2주차 (p.156 ~ p.232)
04. 조건문과 반복문
04-1 조건문: if, switch
구문설명
| if (조건) { 실행문; } | 조건이 참이면 블록 실행 |
| if ... else | 조건이 거짓이면 else 블록 실행 |
| if ... else if ... else | 다중 조건 분기 처리 |
| switch (변수) { case 값: ... break; default: ... } | 변수의 값에 따라 분기 실행 |
예제 코드 (switch):
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
switch (a % 3) {
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
break;
default:
System.out.println(3);
}
💡 break 문이 없으면 다음 case로 "fall through" 하니 주의!
04-2 반복문: for, while, do-while
| 구문 | 설명 |
| for (초기식; 조건; 증감) | 반복 횟수가 정해졌을 때 |
| while (조건) | 조건이 참일 동안 반복 |
| do { ... } while (조건); | 최소 한 번은 실행 후 조건 검사 |
- break: 반복문 강제 종료
- continue: 다음 반복으로 건너뜀
for (int i = 0; i < 5; i++) {
if (i == 3) continue;
System.out.println(i); // 0 1 2 4
}
05. 참조 타입
05-1 참조 타입과 참조 변수
- 기본 타입: byte, short, char, int, long, float, double, boolean
- 참조 타입: 배열, 클래스, 인터페이스, 열거형 등
- 메모리 구조:
- 메서드 영역: 클래스 정보, static
- 힙 영역: 객체 저장
- 스택 영역: 지역 변수 저장
- 참조 비교: ==은 주소(번지) 비교 → 같은 객체 참조 여부 확인
- null: 객체가 없음을 의미하며, 이를 통해 NullPointerException 발생 가능
⚠️ null인 참조 변수로 메소드나 필드를 호출하면 예외 발생
05-2 배열
- 배열 선언: int[] arr;, String[] names;
- 배열 생성:
int[] arr = {1, 2, 3};
String[] names = new String[3];
- 배열 길이: arr.length
- 다차원 배열:
int[][] matrix = new int[2][3];
System.out.println(matrix.length); // 2
System.out.println(matrix[0].length); // 3
- 향상된 for문:
for (int score : arr) {
System.out.println(score);
}
💡 향상된 for문은 인덱스가 필요 없을 때 간결하게 사용 가능
05-3 열거 타입 (Enum)
- 선언:
enum Week { MONDAY, TUESDAY, ..., SUNDAY }
- 사용:
Week today = Week.FRIDAY;
System.out.println(today);
- 특징:
- 타입 안정성 제공
- 코드 가독성 향상
열거형은 switch문과 함께 자주 사용됩니다.
기본 숙제
p.142 직접 해보는 손코딩 실행 후 결과 화면 캡쳐하기

추가 숙제
p.223 하단 확인 문제 6번 풀고 정리하기


전체 구조
public class Main { public static void main(String[] args) { ... } }
- Main 클래스는 실행 진입점(main 메서드)을 가지고 있습니다.
- Scanner를 이용해 사용자 입력을 반복적으로 받아 처리합니다.
주요 변수 설명
int studentNum = 0;
int[] scores = {0,};
Scanner scanner = new Scanner(System.in);
변수명설명
| studentNum | 학생 수를 저장하는 정수 변수 (초기값: 0) |
| scores | 학생들의 점수를 저장할 정수형 배열 (초기엔 {0}으로 초기화됨) |
| scanner | 사용자 입력을 받기 위한 Scanner 객체 |
메뉴 루프
while(true) {
System.out.println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료");
...
int a = Integer.parseInt(scanner.nextLine());
System.out.println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료");
...
int a = Integer.parseInt(scanner.nextLine());
- 무한 루프 (while(true))로 사용자가 5. 종료를 선택할 때까지 계속 실행
- 사용자에게 메뉴를 보여주고, 숫자(1~5)를 입력 받음 → int a
조건별 분기 처리
1. a == 1 → 학생 수 입력
studentNum = Integer.parseInt(scanner.nextLine());
scores = new int[studentNum];
- 사용자로부터 학생 수 입력 받아 studentNum에 저장
- 해당 크기만큼의 scores 배열 새로 생성 → 이전 내용은 초기화됨
2. a == 2 → 점수 입력
for (int i = 0; i < scores.length; i++) {
System.out.print("scores[" + i + "]> ");
scores[i] = Integer.parseInt(scanner.nextLine());
}
System.out.print("scores[" + i + "]> ");
scores[i] = Integer.parseInt(scanner.nextLine());
}
- 학생 수만큼 반복하며 점수 입력 받음
- 입력 받은 점수를 scores 배열에 저장
3. a == 3 → 점수 리스트 출력
for (int i = 0; i < scores.length; i++) {
System.out.println("scores[" + i + "]> " + scores[i]);
}
System.out.println("scores[" + i + "]> " + scores[i]);
}
- scores 배열에 저장된 점수들을 출력함
4. a == 4 → 최고 점수 및 평균 분석
int max = 0;
double avg = 0;
for (int i = 0; i < scores.length; i++) {
if (max < scores[i]) {
max = scores[i];
}
avg += scores[i];
}
System.out.println("최고 점수: " + max);
System.out.println("평균 점수: " + avg / scores.length);
double avg = 0;
for (int i = 0; i < scores.length; i++) {
if (max < scores[i]) {
max = scores[i];
}
avg += scores[i];
}
System.out.println("최고 점수: " + max);
System.out.println("평균 점수: " + avg / scores.length);
- 최고 점수(max)를 0부터 시작해서 갱신
- 평균(avg)은 합계를 누적해서 마지막에 전체 인원수로 나눔
- max < scores[i] 조건으로 최댓값 탐색
5. 그 외 (else) → 프로그램 종료
System.out.println("프로그램 종료");
break;
- 1~4 외의 숫자(예: 5)가 입력되면 종료 메시지를 출력하고 while 루프 탈출
'혼공' 카테고리의 다른 글
| [혼공자바 4주차] Chapter 07 (4) | 2025.07.27 |
|---|---|
| [혼공자바 3주차] Chapter 06 (1) | 2025.07.20 |
| [혼공자바 1주차] Chapter 01 ~ 03 (1) | 2025.07.01 |
| [혼공컴운 6주차] Chapter 14 ~ 15 (1) | 2024.02.06 |
| [혼공컴운 5주차] Chapter 12 ~ 13 (0) | 2024.02.01 |