본문 바로가기

bitcamp/JAVA

컬렉션 프레임워크_연습문제2

1. 학생 정보를 나타내는 Student 클래스에는 이름, 학과, 학번, 학점 평균을 저장하는 필드가 있다.

  학생마다 Student 객체를 생성하고 4명의 학생 정보를 ArrayList<Student> 컬렉션에 저장한 후,
  ArrayList<Student>의 모든 학생(4명) 정보를 출력하고, 
  학생 이름을 입력받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라. 

 

· 참고

 

· 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 class Student{
    private String name, major, sNumber;
    private double grade;
    
    Student(String name, String major, String sNumber, double grade){
        this.name = name;
        this.major = major;
        this.sNumber = sNumber;
        this.grade = grade;
    }    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMajor() {
        return major;
    }
    public void setMajor(String major) {
        this.major = major;
    }
    public String getsNumber() {
        return sNumber;
    }
    public void setsNumber(String sNumber) {
        this.sNumber = sNumber;
    }
    public double getGrade() {
        return grade;
    }
    public void setGrade(double grade) {
        this.grade = grade;
    }
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 class Studentmain {
    final static int STUDENT_NUM = 4
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {
            ArrayList<Student> infoList = new ArrayList<Student>();
            System.out.println("학생 이름, 학과, 학번, 학점평균 입력하세요.");
        
            for(int i = 0; i < STUDENT_NUM; i++) {
                System.out.print(">> ");
                String text = sc.nextLine();
            
                StringTokenizer st = new StringTokenizer(text, ",");
                String name = st.nextToken().trim(); //trim은 중간에 공백이 있다면 삭제해라 라는 의미
                String major = st.nextToken().trim();
                String sNumber = st.nextToken().trim();
                double grade = Double.parseDouble(st.nextToken().trim());
            
                Student student = new Student(name, major, sNumber, grade);
                infoList.add(student);                
            }    
            Iterator<Student> it = infoList.iterator();
            while(it.hasNext()) {
                Student student = it.next();
                System.out.println("----------------");
                System.out.println("이름: " +student.getName());
                System.out.println("이름: " +student.getMajor());
                System.out.println("이름: " +student.getsNumber());
                System.out.println("이름: " +student.getGrade());
                System.out.println("----------------");
            }
        
            while(true) {
                System.out.print("학생 이름 >> ");
                String name = sc.nextLine();
            
                if(name.equals("그만"))
                    break;
            
                for(int i = 0; i < infoList.size(); i++) {
                    Student student = infoList.get(i);
                
                    if(student.getName().trim().equals(name.trim())) {
                        System.out.print(student.getName() + ", ");
                        System.out.print(student.getMajor() + ", ");
                        System.out.print(student.getsNumber() + ", ");
                        System.out.print(student.getGrade());
                        break;
                    }    
                  }
                }
            }catch(Exception e) {
                e.printStackTrace();
                System.out.println("프로그램이 에러입니다.");
            }
            System.out.println("프로그램이 종료 되었습니다.");
            sc.close();
    }
 }
cs

 

 

 

2. 1번 문제에서 ArrayList<Student>를, HashMap<String, Student>으로 이용하여 재작성하라. 

    단, 해시맵에서 키는 학생 이름으로 한다. 

 

· 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 class Studentmain {
    final static int STUDENT_NUM = 4
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {
            HashMap<String, Student> infoMap = new HashMap<>();
            System.out.println("학생 이름, 학과, 학번, 학점평균 입력하세요.");
        
            for(int i = 0; i < STUDENT_NUM; i++) {
                System.out.print(">> ");
                String text = sc.nextLine();
            
                StringTokenizer st = new StringTokenizer(text, ",");
                String name = st.nextToken().trim(); //trim은 중간에 공백이 있다면 삭제해라 라는 의미
                String major = st.nextToken().trim();
                String sNumber = st.nextToken().trim();
                double grade = Double.parseDouble(st.nextToken().trim());
            
                Student student = new Student(name, major, sNumber, grade);
                infoMap.put(sNumber, student);                
            }    
        
            Set<String> key = infoMap.keySet();
            Iterator<String> it = key.iterator();
            while(it.hasNext()) {
                String sNum = it.next();
                Student student = infoMap.get(sNum);
                System.out.println("----------------");
                System.out.println("이름: " +student.getName());
                System.out.println("이름: " +student.getMajor());
                System.out.println("이름: " +student.getsNumber());
                System.out.println("이름: " +student.getGrade());
                System.out.println("----------------");
            }
        
            while(true) {
                System.out.print("학생 번호 >> ");
                String name = sc.nextLine();
            
                if(name.equals("그만"))
                    break;
                Student student = infoMap.get(name);
            
                if(student == null) {
                    System.out.println(name + "학생 없습니다.");
                }else {
                    System.out.print(student.getName() + ", ");
                    System.out.print(student.getMajor() + ", ");
                    System.out.print(student.getsNumber() + ", ");
                    System.out.print(student.getGrade());
                }    
    }
    }catch(Exception e) {
                e.printStackTrace();
                System.out.println("프로그램이 에러입니다.");
    }
    System.out.println("프로그램이 종료 되었습니다.");
    sc.close();
    }
 }
cs

 

 

 

3. "그만"이 입력될 때까지 나라 이름과 인구를 입력받아 저장하고,

     다시 나라 이름을 입력받아 인구를 출력하는 프로그램을 작성하라. 

 

· 참고

 

· 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 class Country {
    public static void main(String[] args) {
    HashMap<String, Integer> coummap = new HashMap<>();
    Scanner sc = new Scanner(System.in);
    String key;
                
    System.out.println("나라 이름과 인구를 입력하세요.(예: Korea 5000)");
    while(true) {
    key = sc.next();
    if(key.equals("그만")) {
        System.out.println();
        break;
    }
    Integer value = sc.nextInt();
    coummap.put(key, value);
    }
        
    while(true) {
    System.out.print("인구 검색>>");
    String word = sc.next();
    if(word.equals("그만")) {
        System.out.println("프로그램을 종료합니다.");
        break;
    }else if(coummap.containsKey(word)) {
        System.out.println(word + "의 인구는 " + coummap.get(word));
    }else
        System.out.println(word + " 나라는 없습니다.");    
    }sc.close();    
    }
}
cs

 

 

4. 도시 이름, 위도, 경도 정보를 가진 Location 클래스를 작성하여라.

   도시 이름을 '키'로 하는 HashMap<String, Location> 컬렉션을 만들고, 사용자로부터 입력 받아 4개의 도시를 저장하라.

   그리고 도시 이름으로 검색하는 프로그램을 작성하라. 

 

· 참고

 

· 작성

1
2
3
4
5
6
7
8
9
10
11
12
 class Location {
    private int longitude;
    private int latitude;
    
    Location(int longitude, int latitude){
        this.longitude = longitude;
        this.latitude = latitude;
    }
    public String toString() {
        return longitude + " " + latitude;
    }
 }
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 class Locationmain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashMap<String, Location> map = new HashMap<>();
        Location[] loca = new Location[4];
        String city = null;
                
        System.out.println("도시, 경도, 위도를 입력하세요.");
        for(int i = 0; i < loca.length; i++) {
            city = sc.next();
            int longitude = sc.nextInt();
            int latitude = sc.nextInt();
            loca[i] = new Location(longitude, latitude);
            map.put(city, loca[i]);    
        }    
        Set<String> ks = map.keySet();
 
        while(true) {
            System.out.print("도시 이름 >> " );
            String str = sc.next();
            
            if(str.equals("그만")) {
                System.out.println("종료합니다.");
                break;
            }
            for(String s : ks) {
        //   System.out.print(map.get(s).toString() + '\t');
 
                if(str.equals(s)) {
                    System.out.println(s + " " + map.get(s)); 
                    break;
                }else
                    continue;
            }
      }sc.close();
   }
 }
cs

 

 

5. 이름과 학점(4.5만점)을 5개 입력받아 해시맵에 저장하고, 장학생 선발 기준을 입력 받아 

   장학생 명단을 출력하라. [Hint] HashMap의 전체 요소를 검색하여 학점이 3.2 이상인 학생을 알아내야 한다.

 

· 참고

 

· 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 class Student{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);    
        HashMap<String, Double> map = new HashMap<>();
        
        System.out.println("미래장학금관리시스템입니다.");
        while(map.size() < 3) {
            System.out.print("이름과 학점 >> ");
            String name = sc.next();
            Double grade = sc.nextDouble();
            map.put(name, grade);
        }
            
        System.out.print("장학생 선발 학점 기준 입력>> ");
        double num = sc.nextDouble();
        Set<String> ks =  map.keySet();
        System.out.print("장학생 명단: ");
        for(String e : ks) {            
            if(map.get(e) >= num) {
                System.out.print(e + " ");
    }
 }
cs

 

 

6. 아래의 TreeMap의 Value를 확인 하기 위한 소스를 짜시오. **필수**

· 참고

· 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 class Mapmain {
    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> set = map.keySet();
          for(Iterator<Integer> itr = set.iterator(); itr.hasNext();) {        
           // 반복자 사용
               System.out.println(map.get(itr.next()));                            
          }
     }
 }
cs

'bitcamp > JAVA' 카테고리의 다른 글

컬렉션 프레임워크_연습문제1  (0) 2021.02.06
컬렉션 프레임워크  (0) 2021.02.05
제네릭_연습문제  (0) 2021.01.26
제네릭  (0) 2021.01.25
자바의 기본 class_연습문제  (0) 2021.01.25