1. “그만”이 입력될 때까지 나라 이름과 인구를 입력받아 저장하고, 다시 나라 이름을 입력받아 인구를 출력하는 프로그램을 작성하라. 다음 해시맵을 이용하라.
나라 이름과 인구를 입력하세요.(예: Korea 5000) 나라 이름, 인구 >> Korea 5000 나라 이름, 인구 >> USA 1000000 나라 이름, 인구 >> Swiss 2000 나라 이름, 인구 >> France 3000 나라 이름, 인구 >> 그만 인구 검색 >> France France의 인구는 3000 인구 검색 >> 스위스 스위스 나라는 없습니다.
1-1. 메인 클래스
import java.util.HashMap;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Population {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashMap<String, Integer> map =
new HashMap<>();
System.out.println("나라 이름과 인구를 입력하세요.");
System.out.println("ex) Korea 5000");
try {
while (true) {
System.out.print("나라 이름, 인구 >> ");
String str = scanner.nextLine();
if (str.equals("그만"))
break;
String[] temp = str.split(" ");
String cntry = temp[0];
Integer pop = Integer.parseInt(temp[1]);
map.put(cntry, pop);
}
while (true) {
System.out.print("인구 검색 >> ");
String cntry = scanner.next();
if (cntry.equals("그만"))
break;
Integer result = map.get(cntry);
if (result == null)
System.out.println(cntry + " 나라는 없습니다.");
else
System.out.println(cntry + "의 인구는 " + result);
}
} catch (NoSuchElementException e) {
System.out.println("잘못된 입력 값 입니다.");
System.out.println("쉼표 및 띄어쓰기를 누락하지 않으셨는지 다시 확인 후 입력해주세요.");
}
scanner.close();
}
}
2. 하나의 학생 정보를 나타내는 Student 클래스에는 이름, 학과, 학번, 학점 평균을 저장하는 필드가 있다.
(1) 학생마다 Student 객체를 생성하고 4명의 학생 정보를 ArrayList< Student > 컬렉션에 저장한 후에, ArrayList< 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 학생 이름 >> 그만
2-1. 메인 클래스
import java.util.ArrayList;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class StudentGradeMain {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<Student> list = new ArrayList<>();
Student[] student = new Student[4];
System.out.println("학생 이름, 학과, 학번, 학점평균을 입력하세요.");
System.out.println("ex) 황기태, 모바일, 1, 4.1");
try {
for (int i = 0; i < student.length; i++) {
System.out.print(">> ");
String str = scanner.nextLine();
String[] temp = str.split(", ");
String name = temp[0];
String dept = temp[1];
int classNum = Integer.parseInt(temp[2]);
double grdAvg = Double.parseDouble(temp[3]);
student[i] = new Student(name, dept, classNum, grdAvg);
list.add(student[i]);
}
System.out.println("----------------------------------");
for (int i = 0; i < student.length; i++) {
System.out.println(list.get(i));
System.out.println("----------------------------------");
}
while (true) {
System.out.print("학생 이름 >> ");
String name = scanner.next();
if (name.equals("그만"))
break;
Student findStudent = new Student();
for (Student s : list) {
if (name.equals(s.getName())) {
findStudent = s;
}
}
System.out.println(findStudent.getName() + ", "
+ findStudent.getDept() + ", "
+ findStudent.getClassNum() + ", "
+ findStudent.getGrdAvg());
}
} catch (NoSuchElementException e) {
System.out.println("잘못된 입력 값 입니다.");
System.out.println("쉼표 및 띄어쓰기를 누락하지 않으셨는지 다시 확인 후 입력해주세요.");
}
scanner.close();
}
}
2-2. Student 클래스
public class Student {
private String name;
private String dept;
private int classNum;
private double grdAvg;
public Student() {}
public Student(String name, String dept,
int classNum, double grdAvg) {
this.name = name;
this.dept = dept;
this.classNum = classNum;
this.grdAvg = grdAvg;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public int getClassNum() {
return classNum;
}
public void setClassNum(int classNum) {
this.classNum = classNum;
}
public double getGrdAvg() {
return grdAvg;
}
public void setGrdAvg(double grdAvg) {
this.grdAvg = grdAvg;
}
@Override
public String toString() {
return "이름: " + name + "\n"
+ "학과: " + dept + "\n"
+ "학번: " + classNum + "\n"
+ "학점평균: " + grdAvg;
}
}
3. ArrayList< Student > 대신, HashMap<String, Studnet> 해시맵을 이용하여 다시 작성하라. 해시맵에서 키는 학생 이름으로 한다.
3-1. 메인 클래스
import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.Set;
public class StudentGradeMain02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashMap<String, Student> map =
new HashMap<>();
Student[] student = new Student[4];
System.out.println("학생 이름, 학과, 학번, 학점평균을 입력하세요.");
System.out.println("ex) 황기태, 모바일, 1, 4.1");
try {
for (int i = 0; i < student.length; i++) {
System.out.print(">> ");
String str = scanner.nextLine();
String[] temp = str.split(", ");
String name = temp[0];
String dept = temp[1];
int classNum = Integer.parseInt(temp[2]);
double grdAvg = Double.parseDouble(temp[3]);
student[i] = new Student(name, dept, classNum, grdAvg);
map.put(name, student[i]);
}
Set<String> key = map.keySet();
Iterator<String> itr = key.iterator();
System.out.println("----------------------------------");
while(itr.hasNext()) {
String name = itr.next();
Student s = map.get(name);
System.out.println(s);
}
System.out.println("----------------------------------");
while(true) {
System.out.print("학생 이름 >> ");
String name = scanner.next();
if(name.equals("그만"))
break;
Student s = map.get(name);
if(s == null)
System.out.println(name + "님의 정보는 없습니다.");
else
System.out.println(s.getName() + " "
+ s.getDept() + " "
+ s.getClassNum() + " "
+ s.getGrdAvg());
}
} catch (NoSuchElementException e) {
System.out.println("잘못된 입력 값 입니다.");
System.out.println("쉼표 및 띄어쓰기를 누락하지 않으셨는지 다시 확인 후 입력해주세요.");
}
scanner.close();
}
}
3-2. Student 클래스
public class Student {
private String name;
private String dept;
private int classNum;
private double grdAvg;
public Student() {}
public Student(String name, String dept,
int classNum, double grdAvg) {
this.name = name;
this.dept = dept;
this.classNum = classNum;
this.grdAvg = grdAvg;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public int getClassNum() {
return classNum;
}
public void setClassNum(int classNum) {
this.classNum = classNum;
}
public double getGrdAvg() {
return grdAvg;
}
public void setGrdAvg(double grdAvg) {
this.grdAvg = grdAvg;
}
@Override
public String toString() {
return "이름: " + name + "\n"
+ "학과: " + dept + "\n"
+ "학번: " + classNum + "\n"
+ "학점평균: " + grdAvg + "\n"
+ "----------------------------------";
}
}
4. 도시 이름, 위도, 경도 정보를 가진 Location 클래스를 작성하고, 도시 이름을 ‘키’로 하는 HashMap<String, Location> 컬렉션을 만들고, 사용자로부터 입력 받아 4개의 도시를 저장하라. 그리고 도시 이름으로 검색하는 프로그램을 작성하라.
도시, 경도, 위도를 입력하세요. >> 서울, 37, 126 >> LA, 34, -118 >> 파리, 2, 48 >> 시드니, 151, -33 ---------------------------------- 서울 37 126 LA 34 -118 파리 2 48 시드니 151 -33 ---------------------------------- 도시 이름 >> 피리 피리는 없습니다. 도시 이름 >> 파리 파리 2 48 도시 이름 >> 그만
4-1. 메인 클래스
import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
public class LocationMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Location[] location = new Location[4];
HashMap<String, Location> map
= new HashMap<String, Location>();
System.out.println("도시, 경도, 위도를 입력하세요.");
System.out.println("ex) 서울, 37, 126");
try {
for(int i=0; i<location.length; i++) {
System.out.print(">> ");
String text = sc.nextLine();
StringTokenizer st = new StringTokenizer(text, ",");
String city = st.nextToken().trim();
int longitude = Integer.parseInt(st.nextToken().trim());
int latitude = Integer.parseInt(st.nextToken().trim());
location[i] = new Location(city, longitude, latitude);
map.put(city, location[i]);
}
Set<String> key = map.keySet();
Iterator<String> it = key.iterator();
System.out.println("----------------------------------");
while(it.hasNext()) {
String city = it.next();
Location s = map.get(city);
System.out.println(s.getCity() + " "
+ s.getLongitude() + " "
+ s.getLatitude());
}
System.out.println("----------------------------------");
while(true) {
System.out.print("도시 이름 >> ");
String city = sc.next();
if(city.equals("그만"))
break;
Location s = map.get(city);
if(s == null)
System.out.println(city + "는 없습니다.");
else
System.out.println(s.getCity() + " "
+ s.getLongitude() + " "
+ s.getLatitude());
}
} catch (NoSuchElementException e) {
System.out.println("잘못된 입력 값 입니다.");
System.out.println("쉼표 및 띄어쓰기를 누락하지 않으셨는지 다시 확인 후 입력해주세요.");
}
sc.close();
}
}
4-2. Location 클래스
public class Location {
private String city; // 도시이름
private int longitude; // 경도
private int latitude; // 위도
public Location(String city, int longitude, int latitude) {
this.city = city;
this.longitude = longitude;
this.latitude = latitude;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public int getLongitude() {
return longitude;
}
public void setLongitude(int longitude) {
this.longitude = longitude;
}
public int getLatitude() {
return latitude;
}
public void setLatitude(int latitude) {
this.latitude = latitude;
}
}
5. 이름과 학점(4.5만점)을 5개 입력받아 해시맵에 저장하고, 장학생 선발 기준을 입력 받아 장학생 명단을 출력하라.
미래장학금관리시스템입니다. 이름과 학점 >> 적당히 3.1 이름과 학점 >> 나탈락 2.4 이름과 학점 >> 최고조 4.3 이름과 학점 >> 상당히 3.9 이름과 학점 >> 고득점 4.0 장학생 선발 학점 기준 입력 >> 3.2 장학생 명단 : 최고조 상당히 고득점
[Hint] HashMap의 전체 요소를 검색하여 학점이 3.2 이상인 학생을 알아내야 한다.
5-1. 메인 클래스
import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.Set;
public class ScholarshipMain {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashMap<String, Double> map = new HashMap<>();
System.out.println("미래장학금 관리시스템입니다.");
System.out.println("이름과 학점을 띄어써서 입력해주세요.");
System.out.println("ex) 홍길동 3.5");
try {
for (int i = 1; i <= 5; i++) {
System.out.print("이름과 학점 >> ");
String str = scanner.nextLine();
String[] temp = str.split(" ");
String name = temp[0];
Double grade = Double.parseDouble(temp[1]);
map.put(name, grade);
}
System.out.println();
System.out.print("장학생 선발 학점 기준 입력 >> ");
Double criteria = scanner.nextDouble();
System.out.print("장학생 명단 : ");
Set<String> nameSet = map.keySet();
Iterator<String> it = nameSet.iterator();
while(it.hasNext()) {
String name = it.next();
double score = map.get(name);
if(score > criteria)
System.out.print(name+ " ");
}
} catch (NoSuchElementException e) {
System.out.println("잘못된 입력 값 입니다.");
System.out.println("띄어쓰기를 누락하지 않으셨는지 다시 확인 후 입력해주세요.");
}
scanner.close();
}
}
6. 큐와 스택에 대하여 설명하시오.
6-1. 큐(Queue)
: 데이터가 오고감에 있어 선입 선출(First In First Out)의 형태를 가지는 자료구조이다.
이때, 데이터가 들어오는 것을 오퍼(Offer), 나가는 것을 폴(Poll)이라 한다.
6-2. 스택(Stack)
: 데이터가 오고감에 있어 후입 선출(Last In First Out)의 형태를 가지는 자료구조이다.
이때, 데이터가 들어오는 것을 푸시(Push), 나가는 것을 팝(Pop)이라 한다.
7. Map 에 대하여 설명하시오.
: Key와 Value의 형태로 이루어진 컬렉션 프레임워크 중 하나로 중복성을 가지지 않는 Key의 특성을 이용해 해당되는 Value 값을 다룰 수 있는 특징을 가진다.
8. 아래의 TreeMap의 Value를 확인 하기 위한 소스를 짜시오.
TreeMap<Integer, String> map = new TreeMap<>(); map.put(45, "Brown"); map.put(37, "James"); map.put(23, "Martin");
8-1. 메인 클래스
import java.util.Set;
import java.util.TreeMap;
public class TreeMapMain {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
Set<Integer> ks = map.keySet();
for (Integer n : ks) {
System.out.print(map.get(n).toString() + '\t');
}
System.out.println();
}
}
9. 아래의 IntegerComparator를 내림차순 정렬이 되게끔 구현하시오.
class ComparatorIntegerDemo {
public static void main(String[] args) {
TreeSet<Integer> tr = new TreeSet<>(new IntegerComparator());
tr.add(30);
tr.add(10);
tr.add(20);
System.out.println(tr);
}
}
9-1. IntegerComparator 클래스
import java.util.Comparator;
public class IntegerComparator implements Comparator<Integer> {
@Override
public int compare(Integer n1, Integer n2) {
if (n1 - n2 > 0) {
return -1;
} else if (n1 - n2 < 0) {
return 1;
} else {
return 0;
}
}
}
10. Objects.hash의 용도와 사용법은?
: 파라미터에 주어진 값을 이용해서 해시 코드를 생성하는 역할로 매개값들로 배열을 생성하고 hashCode() 메소드를 호출해서 해당 값을 리턴한다.
@Override
public int hashCode() {
return Objects.hash(field1, field2, field3);
}
import java.util.Objects;
public class HashCodeExample {
public static void main(String[] args) {
Student s1 = new Student(1, "홍길동");
Student s2 = new Student(1, "홍길동");
System.out.println(s1.hashCode());
System.out.println(Objects.hashCode(s2));
}
static class Student {
int sno;
String name;
Student(int sno, String name) {
this.sno = sno;
this.name = name;
}
@Override
public int hashCode() { // hashCode 호출
return Objects.hash(sno, name); // Objects.hash 메소드를 적용하여 객체의 해시코드를 리턴
}
}
'WebDev > 본과정' 카테고리의 다른 글
마크업 언어와 서블릿의 출력 (0) | 2021.05.14 |
---|---|
JSP 개요 (0) | 2021.05.14 |
List와 Set (0) | 2021.05.13 |
Generic 심화 및 컬렉션 프레임워크 개요 (0) | 2021.05.13 |
Java의 기본 클래스 및 제네릭 개요 (0) | 2021.05.13 |
최근댓글