본문 바로가기
자바 풀스택 공부

Day 13-2.

by seung_nari 2022. 1. 19.

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("======================================================================================");
	}
}

'자바 풀스택 공부' 카테고리의 다른 글

Day 15.  (0) 2022.01.19
Day 14.  (0) 2022.01.19
Day 13.  (0) 2022.01.18
Day 12-3.  (0) 2022.01.18
Day 12-2.  (0) 2022.01.18

댓글