Q. 수정 >_0
Exception in thread main java.util.NoSuchElementException
at java.util.Scanner.throwFor
와 같은 오류가 발생했지만!!
StudentEx에서 while문이 끝나기 전에 StudentService에서 Scanner을 닫았기에 발생한 오류!!
System.in은 실행프로그램에서 하나만 생성이 되고, 이를 여러개의 객체들이 공유하는 형태입니다!
이 때문에 scanner.close();를 실행하면, 다른 객체들이 공유하고 있는 System.in도 닫혀 오류 발생!!
class Student {
int id;
String name;
int LanguageScore;
int EnglishScore;
int MathScore;
double average() {
return ((LanguageScore + EnglishScore + MathScore) / 3.0 * 100) / 100;
}
int TotalScore() {
return LanguageScore + EnglishScore + MathScore;
}
}
import java.util.*;
public class StudentEx {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StudentService St_Service = new StudentService();
for(int i = 0; i < St_Service.st.length; i++) {
St_Service.st[i] = new Student();
} // 초기값 null로 초기화
St_Service.st[0].id = 20197028;
St_Service.st[0].name = "김승종";
St_Service.st[0].LanguageScore = 61;
St_Service.st[0].EnglishScore = 85;
St_Service.st[0].MathScore = 99;
int menu = 0;
while(menu != 5) {
// 인터페이스
System.out.println("1. 목록 조회");
System.out.println("2. 학생 등록");
System.out.println("3. 학생 정보 수정");
System.out.println("4. 학생 삭제");
System.out.println("5. 종료");
System.out.println();
System.out.println("번호를 입력해주세요. > ");
System.out.println();
menu = Integer.parseInt(sc.nextLine());
switch(menu) {
case 1:
St_Service.list();
break;
case 2:
St_Service.add();
break;
case 3:
St_Service.edit();
break;
case 4:
St_Service.delete();
break;
case 5:
System.out.println("종료합니다.");
break;
default:
System.out.print("다시 입력해주세요. > ");
break;
} // switch 종료
} // while문 종료
sc.close();
} // main end
} // class end
import java.util.Scanner;
public class StudentService {
Student[] st = new Student[10]; // 크기 10만큼 Student 배열 선언
// 1. 조회하기
void list() {
System.out.println();
System.out.printf("학번 \t\t 이름 \t\t 국어 \t 영어 \t 수학 \t 총점수 \t 평균\n");
System.out.println("======================================================================================");
int count = 0;
for(int i = 0; i < st.length; i++) {
if(st[i].name != null) {
System.out.printf("%d \t %s \t %d \t %d \t %d \t %d \t\t %.2f \n",
st[i].id, st[i].name, st[i].LanguageScore, st[i].EnglishScore, st[i].MathScore, st[i].TotalScore(), (float)st[i].average());
count++;
}
}
if(count > 0) {
System.out.println();
System.out.println("총 " + count + "명 학생이 등록되어있습니다.");
}
else
System.out.println("등록되어 있는 학생이 없습니다.");
System.out.println("======================================================================================");
System.out.println();
System.out.println();
} // end list
void add() {
Scanner scanner = new Scanner(System.in);
System.out.println("======================================================================================");
int count = 0;
for(int i = 0; i < st.length; i++) {
if((st[i].name == null) && (count == 0)) {
st[i] = new Student();
System.out.print("학번(8자리)을 입력하세요. > ");
st[i].id = Integer.parseInt(scanner.nextLine());
System.out.print("이름을 입력하세요. > ");
st[i].name = scanner.nextLine();
System.out.print("국어점수를 입력하세요. > ");
st[i].LanguageScore = Integer.parseInt(scanner.nextLine());
System.out.print("영어점수를 입력하세요. > ");
st[i].EnglishScore = Integer.parseInt(scanner.nextLine());
System.out.print("수학점수를 입력하세요. > ");
st[i].MathScore = Integer.parseInt(scanner.nextLine());
System.out.println();
System.out.println("입력하신 학생의 정보는");
System.out.printf("학번 \t\t 이름 \t\t 국어 \t 영어 \t 수학\n");
System.out.println("======================================================================================");
System.out.printf("%d \t %s \t %d \t %d \t %d \n",
st[i].id, st[i].name, st[i].LanguageScore, st[i].EnglishScore, st[i].MathScore);
count++;
}
}
if(count == 0) {
System.out.println("현재 저장할 수 있는 공간이 없습니다.");
System.out.println("저장공간 추가 및 데이터를 삭제 후 이용해주세요.");
}
System.out.println("======================================================================================");
} // end add
void edit() {
Scanner scanner = new Scanner(System.in);
System.out.println("======================================================================================");
int count = 0;
System.out.print("수정하려는 학생의 학번을 입력해주세요. > ");
int search = Integer.parseInt(scanner.nextLine());
for(int i = 0; i < st.length; i++) {
if(st[i].id == search) {
System.out.println("입력되어있는 학생의 정보는");
System.out.printf("학번 : %d\t이름 : %s\t국어점수 : %d\t영어점수 : %d\t수학점수: %d\n",
st[i].id, st[i].name, st[i].LanguageScore, st[i].EnglishScore, st[i].MathScore);
System.out.println("입니다.");
System.out.println("수정합니다.");
System.out.println();
System.out.print("학번을 입력하세요. > ");
st[i].id = Integer.parseInt(scanner.nextLine());
System.out.print("이름을 입력하세요. > ");
st[i].name = scanner.nextLine();
System.out.print("국어점수를 입력하세요. > ");
st[i].LanguageScore = Integer.parseInt(scanner.nextLine());
System.out.print("영어점수를 입력하세요. > ");
st[i].EnglishScore = Integer.parseInt(scanner.nextLine());
System.out.print("수학점수를 입력하세요. > ");
st[i].MathScore = Integer.parseInt(scanner.nextLine());
System.out.println();
System.out.println("수정한 학생의 정보는");
System.out.printf("학번 : %d\t이름 : %s\t국어점수 : %d\t영어점수 : %d\t수학점수: %d\n",
st[i].id, st[i].name, st[i].LanguageScore, st[i].EnglishScore, st[i].MathScore);
System.out.println("입니다.");
count++;
// break; 찾으면 더 찾을 필요 없이 끝내고 싶슴돠...
}
}
if(count == 0)
System.out.println("입력하신 학번과 일치하는 학생은 데이터에 없습니다.");
System.out.println();
System.out.println("======================================================================================");
} // end edit
void delete() {
Scanner scanner = new Scanner(System.in);
System.out.println("======================================================================================");
int count = 0;
System.out.print("삭제하려는 학생의 학번을 입력해주세요. > ");
int search = Integer.parseInt(scanner.nextLine());
for(int i = 0; i < st.length; i++) {
if(st[i].id == search) {
System.out.printf("학번 : %d\t이름 : %s\t국어점수 : %d\t영어점수 : %d\t수학점수: %d\n",
st[i].id, st[i].name, st[i].LanguageScore, st[i].EnglishScore, st[i].MathScore);
System.out.println("");
System.out.println("삭제합니다.");
st[i] = new Student();
count++;
break;
}
}
if(count == 0) {
System.out.println("입력하신 학번과 일치하는 학생은 데이터에 없습니다.");
System.out.println();
}
System.out.println("======================================================================================");
}
}
댓글