해쉬맵 예제 : 학생 정보 검색 프로그램 해쉬맵으로 다시 작성하라
//학생마다 Student 객체를 생성하고 4명의 학생 정보를 HashMap<String, Student> 컬렉션에 저장한 후에,
//HashMap<String, Student>의 모든 학생(4명) 정보를 출력하고
//학생 이름을 입력 받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라.
//
//학생 이름, 학과, 학번, 학점평균 입력하세요.
//>> 황기태, 모바일, 1, 4.1
//>> 이재문, 안드로이드, 2, 3.9
//>> 김남윤, 웹공학, 3, 3.5
//>> 최찬미, 빅데이터, 4, 4.25
//----------------------------------
//이름: 황기태
//학과: 모바일
//학번: 1
//학점평균: 4.1
//----------------------------------
//이름: 이재문
//학과: 안드로이드
//학번: 2
//학점평균: 3.9
//----------------------------------
//이름: 김남윤
//학과: 웹공학
//학번: 3
//학점평균: 3.5
//----------------------------------
//이름: 최찬미
//학과: 빅데이터
//학번: 4
//학점평균: 4.25
//----------------------------------
//학생 이름 >> 최찬미
//최찬미, 빅데이터, 4, 4.25
//학생 이름 >> 이재문
//이재문, 안드로이드, 2, 3.9
//학생 이름 >> 그만
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Blog {
public static void main(String[] args) {
new Byul();
}
}
class Byul {
private static Scanner sc;
private static StringBuilder sb;
private static Map<String, Student> map;
private static StringTokenizer st;
public Byul() {
sc = new Scanner(System.in);
sb = new StringBuilder();
map = new HashMap<>();
main();
sc.close();
}
private static final void main() {
setStudent();
System.out.println("----------------------------------");
getAllStudent();
searchStudent();
}
private static final void setStudent() {
String[] tokens = new String[4];
System.out.println("학생 이름, 학과, 학번, 학점평균 입력하세요.");
while (map.size() < 4) {
System.out.print(">> ");
st = new StringTokenizer(sc.nextLine().trim(), ", ");
if (st.countTokens() != 4) {
System.out.println("띄어쓰기 또는 쉼표로 구분해서 입력해주세요");
continue;
}
int i = 0;
while (st.hasMoreTokens()) {
tokens[i++] = st.nextToken();
}
if (validateInput(tokens)) {
map.put(tokens[0], new Student(tokens[0], tokens[1], tokens[2], Double.parseDouble(tokens[3]), sb));
}
}
}
private static final void getAllStudent() {
for (Student s : map.values()) {
System.out.println(s);
}
}
private static final void searchStudent() {
while (true) {
System.out.print("학생 이름 >> ");
String s = sc.nextLine().trim();
if (s.contains("그만"))
break;
boolean noResult = false;
for (Student st : map.values()) {
if (s.contains(st.getName())) {
sb.append(st.getName() + ", ");
sb.append(st.getProgram() + ", ");
sb.append(st.getID() + ", ");
sb.append(st.getAvgGrade());
System.out.println(sb);
sb.setLength(0);
if (!noResult)
noResult = true;
}
}
if (!noResult)
System.out.println("없는 이름입니다.");
}
}
private static final boolean validateInput(String[] s) {
boolean b = true;
if (isNum(s[0]))
b = false;
if (isNum(s[1]))
b = false;
if (!isNum(s[2]))
b = false;
if (!isNum(s[3]))
b = false;
return b;
}
private static final boolean isNum(String s) {
try {
Double.parseDouble(s);
return true;
} catch (Exception e) {
return false;
}
}
}
class Student {
private final StringBuilder sb;
private String name;
private String program;
private String ID;
private double avgGrade;
public Student(String name, String program, String ID, double avgGrade, StringBuilder sb) {
this.name = name;
this.program = program;
this.ID = ID;
this.avgGrade = avgGrade;
this.sb = sb;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getProgram() {
return program;
}
public void setProgram(String program) {
this.program = program;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public double getAvgGrade() {
return avgGrade;
}
public void setAvgGrade(double avgGrade) {
this.avgGrade = avgGrade;
}
@Override
public String toString() {
sb.append("이름: " + name);
sb.append("\n학과: " + program);
sb.append("\n학번: " + ID);
sb.append("\n학점평균: " + avgGrade);
sb.append("\n----------------------------------");
String s = sb.toString();
sb.setLength(0);
return s;
}
}
댓글
댓글 쓰기