학과 프로그램 만들기 #1 - jihyeong-ji99hy99.tistory.com/84
이전 학과 프로그램 #1에서 만든 클래스와 메서드를 진행하므로 #1을 보고 오도록 하자.
n개의 객체 입력하기
void readAll() {
int id = 0;
while(true) {
id = s.nextInt();
if(id == 0) break;
Student st = new Student(id);
st.read(s);
studentList.add(st);
}
}
보통 위의 같은 코드를 생각하면 id 값을 기준으로 객체가 생성하므로 옳다고 생각할 수 있지만 위의 코드는 InputMismatchException 오류가 발생한다. 해당 오류는 왜 발생하는가?
그것은 read() 함수에서 id 값을 한번 더 읽어 들이기 때문이다. 우리가 그 다음 읽게 되는 데이터는 이름(string) 데이터이기 때문에 int형 데이터 타입과도 맞지 않게 된다.
이를 해결하기 위해서 두 가지 방법이 존재한다.
① 객체 생성자에 매개변수 넘겨주기
void readAll(){
int id;
while(true){
id = s.nextInt();
if(id==0) break;
st = new Student(id); // Student 객체를 생성할 때 id 값을 생성자 매개변수로 준다.
st.read(s);
}
}
위의 경우에는 생성자를 new Student(id) 값으로 만들었다. 따라서 다음 생성자를 만들 때도 id 값을 기준으로 만들어야 한다.
② read() 메서드에 id 값 넘겨주기
class Department(){
st = new Student();
st.read(s, id);
}
class Student(){
void read(Scanner s, int id){
this.id = id;
name = s.next();
...
}
}
왜냐하면 이전 코드에서 오류 나는 부분이 id(학번) 부분을 바깥에서 입력하여 read() 메서드에 남아있던 id=nextInt(); 코드에 올바르지 않은 자료형(String name 값)이 들어가기 때문이다. 따라서 read() 메서드에 id 값을 매개변수로 넘겨주어, 디폴트 생성자를 유지시키면서 객체에 저장될 수 있도록 만든다.
'Backend > JAVA' 카테고리의 다른 글
[JAVA] Store 프로젝트 (0) | 2020.10.23 |
---|---|
[JAVA] 학과 프로그램 #5 - 강의 수강 기능 추가(+파일) (0) | 2020.10.03 |
[JAVA] 학과 프로그램 #4 - 점수 기능 추가하기(+파일) (0) | 2020.09.20 |
[JAVA] 학과 프로그램 #3 - 검색 기능 추가하기 (0) | 2020.09.20 |
[JAVA] 학과 프로그램 #1 - 기본 클래스 만들기 (0) | 2020.09.20 |
댓글