[7장 6번]
도시 이름, 위도, 경도 정보를 가진 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
도시 이름 >> 그만
[풀이]
import java.util.HashMap;import java.util.Iterator;import java.util.Scanner;import java.util.Set;import java.util.StringTokenizer;public class Prac_06 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Location[] location = new Location[4];HashMap<String, Location> manage = new HashMap<String, Location>();System.out.println("도시, 경도, 위도를 입력하세요.");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);manage.put(city, location[i]); // ArrayList에 저장}Set<String> key = manage.keySet();Iterator<String> it = key.iterator();System.out.println("----------------------------------");while(it.hasNext()) {String city = it.next();Location s = manage.get(city);System.out.println(s.get_city() +" "+s.get_longitude()+" "+s.get_latitude());}System.out.println("----------------------------------");while(true) {System.out.print("도시 이름 >> ");String city = sc.next();if(city.equals("그만"))break;Location s = manage.get(city);if( s == null)System.out.println(city+"는 없습니다.");elses.find_location(city);}sc.close();}}
[7장 7번]
이름과 학점(4.5만점)을 5개 입력받아 해시맵에 저장하고, 장학생 선발 기준을 입력 받아 장학생 명단을 출력하라.
미래장학금관리시스템입니다.
이름과 학점 >> 적당히 3.1
이름과 학점 >> 나탈락 2.4
이름과 학점 >> 최고조 4.3
이름과 학점 >> 상당히 3.9
이름과 학점 >> 고득점 4.0
장학생 선발 학점 기준 입력 >> 3.2
장학생 명단 : 최고조 상당히 고득점
[Hint] HashMap의 전체 요소를 검색하여 학점이 3.2 이상인 학생을 알아내야 한다. 예제 7-6은 해시맵 전체를 검색하는 코드 사례를 보여준다.
[풀이]
import java.util.HashMap;import java.util.Iterator;import java.util.Scanner;import java.util.Set;public class chap07_prac07 {public static void main(String[] args) {HashMap<String, Double> manage = new HashMap<String, Double>();Scanner sc = new Scanner(System.in);System.out.println("미래장학금관리시스템입니다.");for(int i=0; i<5; i++) {System.out.print("이름과 학점 >> ");String name = sc.next();double score = sc.nextDouble();manage.put(name, score);}System.out.print("장학생 선발 학점 기준 입력 >> ");double cutline = sc.nextDouble();System.out.print("장학생 명단 : ");Set<String> nameSet = manage.keySet();Iterator<String> it = nameSet.iterator();while(it.hasNext()) {String name = it.next();double score = manage.get(name);if(score > cutline)System.out.print(name+ " ");}System.out.println();sc.close();}}
[7장 8번]
고객의 이름과 포인트 점수를 관리하는 프로그램을 해시맵을 이용하여 작성하라. 프로그램은 고객의 이름과 포인트를 함께 저장 관리하는데, 포인트는 추가될 때마다 누적하여 저장된다.
** 포인트 관리 프로그램입니다 **
이름과 포인트 입력 >> 이재문 40
(이재문,40)
이름과 포인트 입력 >> 황기태 50
(이재문,40)(황기태,50)
이름과 포인트 입력 >> 황기태 60
(이재문,40)(황기태,110)
이름과 포인트 입력 >> 김남윤 30
(이재문,40)(김남윤,30)(황기태,110)
이름과 포인트 입력 >> 이재문 20
(이재문,60)(김남윤,30)(황기태,110)
이름과 포인트 입력 >> 그만
[풀이]
import java.util.HashMap;import java.util.Iterator;import java.util.Scanner;import java.util.Set;public class Prac08 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);HashMap<String, Integer> manage = new HashMap<String, Integer>();System.out.println("** 포인트 관리 프로그램입니다 **");while(true) {System.out.print("이름과 포인트 입력 >> ");String name = sc.next();if(name.equals("그만"))break;int point = sc.nextInt();if(manage.get(name) == null) {manage.put(name, point);}else {manage.put(name, manage.get(name)+point);}Set<String> key = manage.keySet();Iterator<String> it = key.iterator();while(it.hasNext()) {String people = it.next();Integer sum = manage.get(people);System.out.print("("+people+","+sum+")");}System.out.println();}sc.close();}}
[7장 9번]
다음 Istack 인터페이스가 있다.
interface IStack<T> {T pop();boolean push(T ob);}
IStack<T> 인터페이스를 구현(implements)하는 MyStack<T> 클래스를 작성하라. 스택의 원소는 Vector<E>를 이용하여 저장하라. 다음은 MyStack<Integer>로 구체화한 정수 스택을 생성하고 활용하는 코드와 실행 결과이다.
public class StackManager {public static void main(String[] args) {IStack<Integer> stack = new MyStack<Integer>();for (int i=0; i<10; i++) stack.push(i);while(true) {Integer n = stack.pop();if(n == null) break;System.out.print(n+" ");}}}
9 8 7 6 5 4 3 2 1 0
[풀이]
import java.util.ArrayList;public class StackManager {public static void main(String[] args) {IStack<Integer> stack = new MyStack<Integer>();for (int i=0; i<10; i++) stack.push(i);while(true) {Integer n = stack.pop();if(n == null) break;System.out.print(n+" ");}}}interface IStack<T> {T pop();boolean push(T ob);}class MyStack<T> implements IStack<T> {ArrayList<T> l = null;public MyStack() {l = new ArrayList<T>();}public T pop() {if (l.size() == 0)return null;elsereturn l.remove(0);}public boolean push(T ob) {l.add(0, ob);return true;}}
[7장 10번]
Vector<Shape>의 벡터를 이용하여 그래픽 편집기를 만들어보자. 본문 5.6절과 5.7절에서 사례로 든 추상 클래스 Shape과 Line, Rect, Circle 클래스 코드를 잘 완성하고 이를 활용하여 "삽입", "삭제", "모두 보기", "종료"의 4가지 그래픽 편집 기능을 프로그램을 작성하라. 6장 실습문제 6번을 Vector<Shape>을 이용하여 재작성하는 연습이다. Vector를 이용하면 6장 실습문제 6번보다 훨씬 간단히 작성됨을 경험할 수 있다.
그래픽 에디터 beauty을 실행합니다.
삽입(1), 삭제(2), 모두 보기(3), 종료(4) >> 1
Line(1), Rect(2), Circle(3) >> 2
삽입(1), 삭제(2), 모두 보기(3), 종료(4) >> 1
Line(1), Rect(2), Circle(3) >> 3
삽입(1), 삭제(2), 모두 보기(3), 종료(4) >> 2
삭제할 도형의 위치 >> 3
삭제할 수 없습니다.
삽입(1), 삭제(2), 모두 보기(3), 종료(4) >> 4
beauty을 종료합니다.
[풀이]
import java.util.Scanner;import java.util.Vector;public class Prac {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Vector<Shape> v = new Vector<Shape>();Shape shape = null;System.out.println("그래픽 에디터 beauty을 실행합니다.");while(true) {System.out.print("삽입(1), 삭제(2), 모두 보기(3), 종료(4) >> ");int select = sc.nextInt();switch(select) {case 1:System.out.print("Line(1), Rect(2), Circle(3) >> ");int choice = sc.nextInt();switch(choice) {case 1:shape = new Line();break;case 2:shape = new Rect();break;case 3:shape = new Circle();break;}v.add(shape);break;case 2:System.out.print("삭제할 도형의 위치 >> " );int position = sc.nextInt();if(v.size() == 0 || v.size() <= position)System.out.println("삭제할 수 없습니다.");elsev.remove(position);break;case 3:for(int i=0; i<v.size(); i++)v.get(i).draw();break;case 4:System.out.println("beauty을 종료합니다.");sc.close();return;}}}}abstract class Shape {private Shape next;public Shape() { next = null; }public void setNext(Shape obj) { next = obj; } //링크 연결public Shape getNext() { return next; }public abstract void draw();}class Line extends Shape {public void draw() {System.out.println("Line");}}class Rect extends Shape {public void draw() {System.out.println("Rect");}}class Circle extends Shape {public void draw() {System.out.println("Circle");}}
[7장 11번]
나라와 수도 맞추기 게임의 실행 예시는 다음과 같다.
**** 수도 맞추기 게임을 시작합니다. ****
입력:1, 퀴즈:2, 종료:3>> 1
현재 9개 나라와 수도가 입력되어 있습니다.
나라와 수도 입력10>> 한국 서울
나라와 수도 입력11>> 그리스 아테네
그리스는 이미 있습니다!
나라와 수도 입력11>> 호주 시드니
나라와 수도 입력12>> 이탈리아 로마
나라와 수도 입력13>> 그만
입력:1, 퀴즈:2, 종료:3>> 2
일본의 수도는? 동경
정답!!
스페인의 수도는? 하얼빈
아닙니다!!
프랑스의 수도는? 파리
정답!!
중국의 수도는? 베이징
정답!!
스페인의 수도는? 그만
입력:1, 퀴즈:2, 종료:3>> 3
게임을 종료합니다.
(1) 나라 이름(country)과 수도(capital)로 구성된 Nation 클래스를 작성하고 Vecotr<Nation> 컬렉션을 이용하여 프로그램을 작성하라.
import java.util.Scanner;import java.util.Vector;public class CapitalGame {private Vector<Nation> store = new Vector<Nation>();private Scanner scanner = new Scanner(System.in);public CapitalGame() {// store에 9 개의 아이템을 입력하여 초기화store.add(new Nation("멕시코", "멕시코시티"));store.add(new Nation("스페인", "리스본"));store.add(new Nation("프랑스", "파리"));store.add(new Nation("영국", "런던"));store.add(new Nation("그리스", "아테네"));store.add(new Nation("독일", "베를린"));store.add(new Nation("일본", "동경"));store.add(new Nation("중국", "베이징"));store.add(new Nation("러시아", "모스크바"));}private void error(String msg) {System.out.println(msg);}public void run() {System.out.println("**** 수도 맞추기 게임을 시작합니다. ****");while(true) {System.out.print("입력:1, 퀴즈:2, 종료:3>> ");int menu = scanner.nextInt();switch(menu) {case 1: input(); break;case 2: quiz(); break;case 3: finish(); return;default:error("잘못된 입력입니다.");}}}private boolean contains(String country) {for(int i=0; i<store.size(); i++) {if(store.get(i).getCountry().equals(country)) { // 사용자가 입력한 나라가 이미 있다면return true;}}return false;}private void input() {int n = store.size();System.out.println("현재 " + n + "개 나라와 수도가 입력되어 있습니다.");n++;while(true) {System.out.print("나라와 수도 입력" + n + ">> ");String country = scanner.next(); // 사용자 입력 나라if(country.equals("그만")) {break;}String capital = scanner.next(); // 사용자 입력, 수도if(contains(country)) { // 사용자가 입력한 나라가 이미 있다면System.out.println(country + "는 이미 있습니다!");continue;}store.add(new Nation(country, capital));n++;}}private void quiz() {// 모든 키(나라)를 알아낸다.while(true) {// 나라 중에서 하나를 선택한다.int index = (int)(Math.random()*store.size()); // 랜덤한 위치 결정// 문제(나라)와 정답(수도)을 결정한다.Nation nation = store.get(index);String question = nation.getCountry();String answer = nation.getCapital();// 문제를 출력한다.System.out.print(question + "의 수도는? ");String capitalFromUser = scanner.next(); // 사용자의 입력if(capitalFromUser.equals("그만")) {break;}if(capitalFromUser.equals(answer))System.out.println("정답!!");elseSystem.out.println("아닙니다!!");}}private void finish() {System.out.println("게임을 종료합니다.");}public static void main(String[] args) {CapitalGame game = new CapitalGame();game.run();}}class Nation {private String country;private String capital;public Nation(String country, String capital) {this.country = country;this.capital = capital;}public String getCountry() {return country;}public String getCapital() {return capital;}}
(2) 이 프로그램을 HahsMap<String, String>을 이용하여 작성하라. '키'는 나라 이름이고 '값'은 수도이다.
import java.util.HashMap;import java.util.Scanner;import java.util.Set;public class CapitalGame {private HashMap<String, String> store = new HashMap<String, String>();private Scanner scanner = new Scanner(System.in);public CapitalGame() {// store에 9 개의 아이템을 입력하여 초기화store.put("멕시코", "멕시코시티");store.put("스페인", "리스본");store.put("프랑스", "파리");store.put("영국", "런던");store.put("그리스", "아테네");store.put("독일", "베를린");store.put("일본", "동경");store.put("중국", "베이찡");store.put("러시아", "모스크바");}private void error(String msg) {System.out.println(msg);}public void run() {System.out.println("**** 수도 맞추기 게임을 시작합니다. ****");while(true) {System.out.print("입력:1, 퀴즈:2, 종료:3>> ");int menu = scanner.nextInt();switch(menu) {case 1: input(); break;case 2: quiz(); break;case 3: finish(); return;default:error("잘못된 입력입니다.");}}}private void input() {int n = store.size();System.out.println("현재 " + n + "개 나라와 수도가 입력되어 있습니다.");n++;while(true) {System.out.print("나라와 수도 입력" + n + ">> ");String country = scanner.next();if(country.equals("그만")) {break;}String capital = scanner.next();if(store.containsKey(country)) {System.out.println(country + "는 이미 있습니다");continue;}store.put(country, capital);n++;}}private void quiz() {// 모든 키(나라)를 알아낸다.Set<String> keys = store.keySet();Object [] array = (keys.toArray());while(true) {// 나라 중에서 하나를 선택한다.int index = (int)(Math.random()*array.length); // 랜덤한 위치 결정// 문제(나라)와 정답(수도)을 결정한다.String question = (String)array[index];String answer = store.get(question);// 문제를 출력한다.System.out.print(question + "의 수도는? ");String capitalFromUser = scanner.next(); // 사용자의 입력if(capitalFromUser.equals("그만")) {break;}if(capitalFromUser.equals(answer))System.out.println("정답!!");elseSystem.out.println("아닙니다!!");}}private void finish() {System.out.println("게임을 종료합니다.");}public static void main(String[] args) {CapitalGame game = new CapitalGame();game.run();}}
'Solution_ > 명품 java' 카테고리의 다른 글
[명품 JAVA] 7장 실습문제(1~5) (제네릭과 컬렉션) (3) | 2019.09.22 |
---|---|
[명품 JAVA] 7장 연습문제 (제네릭과 컬렉션) (2) | 2019.05.27 |
[명품 JAVA] 6장 실습문제 (모듈과 패키지 개념, 자바 기본 패키지) (2) | 2019.05.16 |
[명품 JAVA] 6장 연습문제 (모듈과 패키지 개념, 자바 기본 패키지) (0) | 2019.05.15 |
[명품 JAVA] 5장 실습문제(9~14) (상속) (12) | 2019.04.21 |
댓글