22-2: JAVA Map

jk·2024년 1월 30일
0

kdt 풀스택

목록 보기
42/127



1. 스택과 큐에 대하여 설명하시오.

  • stack: The box one side is open and the other side is closed.
  • queue: The box both sides are open.



2. Map 에 대하여 설명하시오.

  • Every elements have unique keys for itself.
  • An element can be called by its key.
  • One element has key and value. Key is unique only one but same values can be existed.
  • The value can be replaced when new element with same key is added.



3.아래의 TreeMap의 전체 Value 값을 확인 하기 위한 소스를 짜시오. ​

Map<Integer, String> map = new HashMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
//
//code
//
import java.util.*;
class Print {
    private static StringBuilder print = new StringBuilder();
    private static void printlnAndReset() {
        System.out.println(print);
        print.setLength(0);
    }
    static void printlnObject(Object obj) {
        print.append(obj);
        printlnAndReset();
    }
    static void printlnObject() {
        printlnAndReset();
    }
}
class Functions {
    static void run() {
        while(true) {
            try {
                printValuesOfMaps();
                break;
            } catch(Exception e) {
                e.printStackTrace();
            };
        };
    }
    private static void printValuesOfMaps() {
        Map<Integer, String> map = new HashMap<>();
        map.put(45, "Brown");
        map.put(37, "James");
        map.put(23, "Martin");
//        
        printValuesFromMap(map);
//        
        Map<Integer, String> map2 = new TreeMap<>();
        map2.put(45, "Brown");
        map2.put(37, "James");
        map2.put(23, "Martin");
//        
        printValuesFromMap(map2);
    }
    private static <K extends Integer, V extends String> void printValuesFromMap(Map<K, V> map) {
        Iterator<K> itr = map.keySet().iterator();
        while(itr.hasNext()) {
            Print.printlnObject(map.get(itr.next()));
        };
        Print.printlnObject();
    }
}
class MapMain {
    public static void main(String[] args) {
        Functions.run();
    }
}
/*print
James
Martin
Brown
​
Martin
James
Brown
​
*/



4. 다음을 프로그래밍 하시오.

"그만"이 입력될 때까지 나라 이름과 인구를 입력 받아 저장하고, 다시 나라 이름을 입력받아 인구를 출력하는 프로그램을 작성하라. 
​
다음 해시맵을 이용하라.
-containsKey 라는 함수를 사용해 보셔도 좋습니다.
​
=================================================================================
​
나라 이름과 인구를 입력하세요.(예: Korea 5000)
​
나라 이름, 인구 >> Korea 5000
나라 이름, 인구 >> USA 1000000
나라 이름, 인구 >> Swiss 2000
나라 이름, 인구 >> France 3000
나라 이름, 인구 >> 그만
​
​
​
인구 검색 >> France
France의 인구는 3000
인구 검색 >> 스위스
스위스 나라는 없습니다.
인구 검색 >> 그만
//
//code
//
import java.util.*;
class Const {
    static final String STOP = "그만";
    static final String COUNTRY_ERR = "countryErr";
    static final int ELEMENT_SIZE = 2;
}
class Print {
    private static StringBuilder print = new StringBuilder();
    private static void printAndReset() {
        System.out.print(print);
        print.setLength(0);
    }
    static <T> void print(T t) {
        print.append(t);
        printAndReset();
    }
}
class Functions {
    //private static Scanner scanner = new Scanner(System.in);
    private static Scanner scanner = new Scanner(System.in, "Cp949");
    private static Map<String, Integer> map = new HashMap<String, Integer>();
    static void run() {
        while(true) {
            try {
                printPopulationFromScanner();
                scanner.close();
                break;
            } catch(Exception e) {
                e.printStackTrace();
                //scanner = new Scanner(System.in);
                scanner = new Scanner(System.in, "Cp949");
            };
        };
    }
    private static void printPopulationFromScanner() {
        Print.print("나라 이름과 인구를 입력하세요.(예: Korea 5000)\n\n");
        while(true) {
            Print.print("나라 이름, 인구 >> ");
            String input = scanner.nextLine();
            if(input.equals(Const.STOP)) {
                break;
            } else {
                StringTokenizer st = new StringTokenizer(input, ", ");
                boolean ok = true;
                String country = Const.COUNTRY_ERR;
                Integer population = -1;
                if (st.countTokens() >= Const.ELEMENT_SIZE) {
                    country = st.nextToken();
                    try {
                        population = Integer.valueOf(st.nextToken());
                        if (population < 0) {
                            ok = false;
                        };
                    } catch(NumberFormatException e) {
                        ok = false;
                    };
                } else {
                    ok = false;
                };
                if (ok == false) {
                    Print.print("잘못 입력하셨습니다.\n");
                } else {
                    map.put(country, population);
                };
            };
        };
        Print.print("\n\n\n");
        while(true) {
            Print.print("인구 검색 >> ");
            String input = scanner.nextLine();
            if(input.equals(Const.STOP)) {
                break;
            } else {
                Print.print(input);
                if (map.containsKey(input)) {
                    Print.print("의 인구는 ");
                    Print.print(map.get(input));
                    Print.print("\n");
                } else {
                    Print.print(" 나라는 없습니다.\n");
                };
            };
        };
    }
}
class PrintPopulationMain {
    public static void main(String[] args) {
        Functions.run();
    }
}
/*print
나라 이름과 인구를 입력하세요.(예: Korea 5000)
​
나라 이름, 인구 >> Korea 5000
나라 이름, 인구 >> USA 1000000
나라 이름, 인구 >> Swiss 2000
나라 이름, 인구 >> France 3000
나라 이름, 인구 >> 그만
​
​
​
인구 검색 >> France
France의 인구는 3000
인구 검색 >> 스위스
스위스 나라는 없습니다.
인구 검색 >> 그만
*/
profile
Brave but clumsy

0개의 댓글