import java.util.Scanner;
public class MakeArraylist {
static Scanner sc = new Scanner(System.in);
public static void main(String... args) {
Exam ex = new Exam();
boolean loop = true;
while (loop) {
int m = menu();
switch (m) {
case 1:
ex.input();
break;
case 2:
ex.output();
break;
case 3:
System.out.println("프로그램 종료.");
loop = false;
break;
default:
System.out.println("잘못된 값을 입력하셨습니다. 메뉴는 1~3까지입니다.");
}
}
sc.close();
}
static int menu() {
System.out.println(" -메인 메뉴-");
System.out.println("\t1. 성적입력 ");
System.out.println("\t2. 성적출력 ");
System.out.println("\t3. 종료 ");
System.out.print("\t선택> ");
int menu = sc.nextInt();
return menu;
}
}
|
cs |
main메소드, 초기화면 메소드가 포함된 클래스
import java.util.Scanner;
public class Exam {
static Scanner sc = new Scanner(System.in);
private AllSubject[] stu;
private int counter;
public Exam() { //생성자
stu = new AllSubject[2];
counter = 0;
}
void input() {
System.out.println(" -성적 입력-");
int kor, eng, math;
do {
System.out.printf("국어: ");
kor = sc.nextInt();
if (kor < 0 || 100 < kor) {
System.out.println("성적은 0~100까지의 범위만 입력이 가능합니다.");
}
} while (kor < 0 || 100 < kor);
do {
System.out.printf("영어: ");
eng = sc.nextInt();
if (eng < 0 || 100 < eng) {
System.out.println("성적은 0~100까지의 범위만 입력이 가능합니다.");
}
} while (eng < 0 || 100 < eng);
do {
System.out.printf("수학: ");
math = sc.nextInt();
if (math < 0 || 100 < math) {
System.out.println("성적은 0~100까지의 범위만 입력이 가능합니다.");
}
} while (math < 0 || 100 < math);
AllSubject score = new AllSubject();
score.setKor(kor);
score.setEng(eng);
score.setMath(math);
//배열 크기 늘리기
AllSubject[] stu = this.stu;
int size = this.counter;
if (stu.length == size) { //실제 배열길이와 데이터 입력때마다 증가시킨 카운터를 비교, 같으면 배열이 값으로 꽉참.
AllSubject[] tmp = new AllSubject[size + 1]; //기존배열보다 index가 하나 더있는 임시배열 생성
for (int i=0; i<size; i++) {
tmp[i] = stu[i]; //기존배열의 값들을 임시배열로 옮김
this.stu = tmp; //va객체의 stu배열이 tmp배열을 참조
}
}
this.stu[this.counter] = score;
this.counter++;
System.out.println("────────────────────────");
}
void output() {
int size = counter;
AllSubject[] stu = this.stu;
for (int i=0; i<size; i++) {
AllSubject score = stu[i];
int kor = score.getKor();
int eng = score.getEng();
int math = score.getMath();
int total = score.total();
float avg = score.avg();
System.out.println("국어: " + kor);
System.out.println("영어: " + eng);
System.out.println("수학: " + math);
System.out.println("총점: " + total);
System.out.println("평균: " + avg);
System.out.println("────────────────────────");
}
}
}
|
cs |
입출력 메소드와 배열 객체를 생성하는 클래스
public class AllSubject {
private int kor;
private int eng;
private int math;
public int getKor() {
return kor;
}
public int getEng() {
return eng;
}
public int getMath() {
return math;
}
public void setKor(int kor) {
this.kor = kor;
}
public void setEng(int eng) {
this.eng = eng;
}
public void setMath(int math) {
this.math = math;
}
public int total() {
return kor + eng + math;
}
public float avg() {
return total() / 3.0f;
}
}
|
cs |
각 과목 변수들과 그 변수들을 제어할 getter, setter들이 선언된 클래스
- 캡슐화의 핵심
클래스간 침범 없이 독립적으로 구성할것
배열객체를 참조하는 입/출력 메소드들은 배열이 선언된 클래스(Exam)로 위치 이동
다른 클래스에서 참조하여 사용했던 변수들은 getter, setter메소드를 통해 간접적으로 접근
캡슐화 테스트: 한 클래스에서 변수명을 수정하였을때, 다른 클래스에서 오류가 발생하는지 check
'Java' 카테고리의 다른 글
vscode야...넌 또 왜이러니... (0) | 2021.11.13 |
---|---|
왜 객체변수명을 클래스명과 통일시키는가? (0) | 2021.11.09 |
원시적인 방법으로 가변길이배열 구현하기 (0) | 2021.11.01 |
배열 객체를 생성해서 다수의 성적 입출력 (0) | 2021.11.01 |
객체 생성, 메소드의 파라미터로 객체를 쓰는법 (0) | 2021.11.01 |