Map, Vector, Sort, Comparator

문이빈·2023년 7월 25일
0

1~100사이의 난수를 50개 발생한다. 발생한 난수 중에서 짝수만 골라서 출력도 하고, 짝수의 합만 구하여 출력하는 프로그램을 작성

숙제

Map

package collection;

import java.util.HashMap;
import java.util.Map;

public class MapMain {

public MapMain() {
	Map<String, String> map = new HashMap<String, String>();
	map.put("book101", "백설공주");
	map.put("book201", "인어공주");
	map.put("book101", "백설공주"); // Value의 값은 중복이 허용된다.
	map.put("book301", "피오나");
	map.put("book101", "엄지공주"); // Key도 중복 허용
	
	System.out.println(map.get("book101"));
	System.out.println(map.get("book102"));
	System.out.println(map.get("book501")); // error가 아닌 null 값을 가져온다.
	
}

public static void main(String[] args) {
	new MapMain();

    }
}

Vector

package collection;

import java.util.Iterator;
import java.util.Vector;

public class VectorMain {

public VectorMain() {
	
Vector<String> v = new Vector<String>();
System.out.println("벡터 크기 = " + v.size()); 
	// vector 안에 들어 있는 항목의 갯수 , 아직 들어온게 없으니 0
System.out.println("벡터 용량 = " + v.capacity()); 
	// 담을 수 있는 용량, 기본 10개
System.out.println();

System.out.println("항목 추가");

for(int i=1; i<=10; i++) {
	v.add(i+""); // 숫자를 문자열로 -> 결합 (+"")
}//for

for(int i=0; i<10; i++) {
	System.out.print(v.get(i) + " ");
}
System.out.println();
System.out.println("벡터 크기 = " + v.size()); 
System.out.println("벡터 용량 = " + v.capacity()); 
System.out.println();

System.out.println("항목 1개 추가");
v.add("5"); // 중복 허용

for(int i=0; i<v.size(); i++) {
	System.out.print(v.get(i) + " ");
}

System.out.println();
System.out.println("벡터 크기 = " + v.size()); 
System.out.println("벡터 용량 = " + v.capacity()); 

System.out.println("마지막 항목 삭제");
v.remove(10); // 인데스 위치인 10을 작성

Iterator<String> it = v.iterator();
while(it.hasNext()) {
	System.out.print(it.next()+" ");
}
System.out.println();
}

public static void main(String[] args) {
	new VectorMain();
    }
}

Sort(정렬)

Comparable / Comparator 인터페이스

객체를 정렬하는데 필요한 메소드가 정의되어 있다.

비교대상자가 더 크면(<) -1, 같다면(==) 0, 작으면(>) 1을 반환시켜줍니다.
-> 이 값을 비교하여 정렬을 할 수 있다.

일반적인 int, char, double 같은 타입의 배열이라면 다음 함수들을 이용
Collections(또는 Arrays).sort() : 정렬
Collectoins(또는 Arrays).reverse() : 뒤집기

  1. Comparable (java.lang) - 기본 정렬기준을 구현하는데 사용
  • 주로 Integer와 같은 warpper클래스와 String, Date, File과 같은 것
  • 기본적으로 오름차순으로 정렬되도록 구현되어 있다
  • public int compareTo(T o)
    public final class Integer
    extends Number
    implements Comparable<Integer>

  1. Comparator (java.util) - 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
  • public int compare(T o1, T o2)

  • public boolean equals(Object obj)

  • Collections.sort()
    객체 정렬

    package collection;
    
    public class PersonDTO implements Comparable<PersonDTO>{ // 1인분 클래스
        //  implements Comparable<T> - 객체 대 객체 끼리 비교 시켜줌.
    
    private String name;
    private int age;
    
    public PersonDTO() {} // 기본 생성자
    
    public PersonDTO(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
        @Override 
        //PersonDTO에서주소가 나오게 하는게 아닌 결과 값을 바뀐 값으로 하기 위해 오버라이딩
    
        public String toString() {
            return name + "\t" + age;
            }
    
        @Override
        public int compareTo(PersonDTO p) {
            // 나이로 오름차순
    //		if(this.age < p.age) return -1;
    //		else if(this.age> p.age ) return 1;
    //		return 0;
    
            // 나이로 내림차순
            if(this.age < p.age) return 1;
            else if(this.age> p.age ) return -1;
            else return 0;
        }
    }
    
    
    --------------------------------------------------------
package collection;

import java.util.Arrays;

public class PersonSort {

public static void main(String[] args) {
	String[] ar = {"orange", "apple", "banna", "pear", "peach", "applemango"};

System.out.print("정렬 전 = ");
for(String data : ar) {
	System.out.print(data+" ");
}
System.out.println();

Arrays.sort(ar); // 배열에 관련된 모든 메소드를 가진 클래스 - sort는 static으로 선언되어 있다. 

System.out.print("정렬 후 = ");
for(String data : ar) {
	System.out.print(data+" ");
}
System.out.println();
    }
}

숙제

package sungJuk;

public class SungJukMain {

public static void main(String[] args) {
	SungJukService sungjukservice = new SungJukService();
	sungjukservice.menu();
	System.out.println("성적 프로그램을 종료합니다.");
    }
}

------------------------------------------------------------

package sungJuk;

import java.util.ArrayList;

public interface SungJuk {
    public void execute(ArrayList<SungJukDTO> arrayList);
}

------------------------------------------------------------

package sungJuk; // 1인분

public class SungJukDTO {
    private int no;
    private String name;
    private int kor;
    private int eng;
    private int math;
    private int tot;
    private double avg;

public void calc() {
	tot = kor + eng + math;
	setAvg(tot/3);
}

public SungJukDTO(int no, String name, int kor, int eng, int math) {
	this.no = no;
	this.name = name;
	this.kor = kor;
	this.eng = eng;
	this.math = math;
}

public int getNo() {
	return no;
}

public void setNo(int no) {
	this.no = no;
}

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public int getKor() {
	return kor;
}

public void setKor(int kor) {
	this.kor = kor;
}

public int getEng() {
	return eng;
}

public void setEng(int eng) {
	this.eng = eng;
}

public int getMath() {
	return math;
}

public void setMath(int math) {
	this.math = math;
}

public double getAvg() {
	return avg;
}

public int getTot() {
	return tot;
}

public void setTot(int tot) {
	this.tot = tot;
}

public void setAvg(double avg) {
	this.avg = avg;
}

@Override
public String toString() {
	
	return ""+no+ "\t" +
	       name + "\t" +
		   kor  + "\t" +
	       eng  + "\t" +
		   math + "\t" +
	       tot  + "\t" +
		   avg;
    }
}

------------------------------------------------------------

package sungJuk;

import java.util.ArrayList;
import java.util.Scanner;

public class SungJukService {
    private ArrayList<SungJukDTO> arrayList = new ArrayList<SungJukDTO>();
    Scanner scan = new Scanner(System.in);

    public void menu() {
        SungJuk sungjuk = null;
        int num;

        while(true) {

        System.out.println();
        System.out.println("*************");
        System.out.println("1. 성적 입력");
        System.out.println("2. 성적 출력");
        System.out.println("3. 성적 수정");
        System.out.println("4. 정보 삭제");
        System.out.println("5. 성적 정렬");
        System.out.println("6. 종료");
        System.out.println("*************");
        System.out.print  ("메뉴 번호 선택: ");
        num = scan.nextInt();

        if(num==6) {
            System.out.println("종료합니다.");
            break;
        }

        if(num==1) {
            sungjuk = new SungJukInsert();
            sungjuk.execute(arrayList);

        }else if(num==2) {
            sungjuk = new SungJukList();
            sungjuk.execute(arrayList);

        }else if(num==3) {
            sungjuk = new SungJukUpdate();
            sungjuk.execute(arrayList);

        }else if(num==4) {
            sungjuk = new SungJukDelete();
            sungjuk.execute(arrayList);

        }else if(num==5) {
            sungjuk = new SungJukSort();
            sungjuk.execute(arrayList);


        }else {
            System.out.println("1 ~ 6 까지만 번호를 허용합니다.");
        }

    }//while
  }//menu()
}

------------------------------------------------------------

package sungJuk;

import java.util.ArrayList;
import java.util.Scanner;

public class SungJukInsert implements SungJuk{

@Override
public void execute(ArrayList<SungJukDTO> arrayList) {
	Scanner scan = new Scanner(System.in);
	
	System.out.println("*************");
	System.out.print("1. 번호 입력 : ");
    int no = scan.nextInt();
	System.out.print("2. 이름 입력 : ");
	String name = scan.next();
	System.out.print("3. 국어 입력 : ");
	int kor = scan.nextInt();
	System.out.print("4. 영어 입력 : ");
	int eng = scan.nextInt();
	System.out.print("5. 수학 입력 : ");
	int math =scan.nextInt();
	System.out.println("6. 등록 완료 ");
	System.out.println("*************");
	
	SungJukDTO sungjukDTO = new SungJukDTO(no, name, kor, eng, math);
	sungjukDTO.calc();
	
	arrayList.add(sungjukDTO);
	}
}

------------------------------------------------------------

package sungJuk;

import java.util.ArrayList;

public class SungJukList implements SungJuk{

@Override
public void execute(ArrayList<SungJukDTO> arrayList) {
	System.out.println();
    System.out.println("번호\t이름\t국어\t영어\t수학\t총점\t평균");
    for (SungJukDTO sj : arrayList) {
        System.out.printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2f\n",
                sj.getNo(), sj.getName(), sj.getKor(), sj.getEng(),
                sj.getMath(), sj.getTot(), sj.getAvg());
        }
    }
}

------------------------------------------------------------

/*
- 없는 번호가 입력되면 "잘못된 번호 입니다." 라고 출력한다.
- 있는 번호가 입력되면 번호에 해당하는 데이틀 출력 후 수정한다.
번호 입력 : 78
잘못된 번호 입니다.

또는 
번호 입력 : 10

번호		이름		국어		영어		수학		총점		평균
10		홍길동

수정 할 이름 입력 : 
수정 할 국어 입력 : 
수정 할 영어 입력 : 
수정 할 수학 입력 : 

수정하였습니다.
*/

package sungJuk;

import java.util.ArrayList;
import java.util.Scanner;

public class SungJukUpdate implements SungJuk{

@Override
public void execute(ArrayList<SungJukDTO> arrayList) {
	Scanner scan = new Scanner(System.in);
	
	System.out.println("*************");
	System.out.print  ("수정할 번호 입력 : ");
    int no = scan.nextInt();
    
    boolean soojung = false;
    for (SungJukDTO sj : arrayList){
    	if(sj.getNo() == no) {
    		System.out.println();
    		System.out.println("번호\t이름\t국어\t영어\t수학\t총점\t평균");
    		System.out.println(sj.toString());

    		System.out.print("수정 할 이름 입력 : ");
    		String name = scan.next();
    		System.out.print("수정 할 국어 입력 : ");
    		int kor = scan.nextInt();
    		System.out.print("수정 할 영어 입력 : ");
    		int eng = scan.nextInt();
    		System.out.print("수정 할 수학 입력 : ");
    		int math = scan.nextInt();
    		
    		sj.setName(name);
            sj.setKor(kor);
            sj.setEng(eng);
            sj.setMath(math);
            sj.calc();
            
            System.out.println("수정 완료 하였습니다.");
            soojung = true;
            break;
    	}
    }
    
    if(!soojung) {
    	System.out.println("잘못된 번호 입니다.");
        }
    }
}

------------------------------------------------------------

/*
- 이름을 입력하여 없는 이름이면 "회원의 정보가 없습니다" 출력하시오
- 똑같은 이름이 있으면 모두 삭제한다.

삭제할 이름 입력 : 천사
회원의 정보가 없습니다

또는 
삭제할 이름 입력 : 홍길동 (홍길동이라는 이름 가진 SungJukDTO를 모두 제거)
삭제하였습니다.
*/


package sungJuk;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

public class SungJukDelete implements SungJuk{

@Override
public void execute(ArrayList<SungJukDTO> arrayList) {
	Scanner scan = new Scanner(System.in);
	
	System.out.println("*************");
	System.out.print  ("삭제할 이름 입력 : ");
	String name = scan.next();
	
	boolean delt = false;
	Iterator<SungJukDTO> iterator = arrayList.iterator();
	while (iterator.hasNext()) {
		SungJukDTO sj = iterator.next();
		if(sj.getName().equals(name)) {
			iterator.remove();
			delt = true;
		}
	}
	if (delt) {
		System.out.println("삭제하였습니다.");
	}else {
		System.out.println("회원의 정보가 없습니다.");
          }
     }
}

------------------------------------------------------------

/*
- menu() 만들어서 작성하시오

********************
  1. 총점으로 내림차순
  2. 이름으로 오름차순
  3. 이전 메뉴
********************
  번호 : 
*/

package sungJuk;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class SungJukSort implements SungJuk{

@Override
public void execute(ArrayList<SungJukDTO> arrayList) {
	Scanner scan = new Scanner(System.in);
	
	while(true) {
		System.out.println("*************");
		System.out.println(" 1. 총점으로 내림차순 : ");
		System.out.println(" 2. 이름으로 오름차순 : ");
		System.out.println(" 3. 이전 메뉴 ");
		System.out.println("*************");
		System.out.print("번호 : ");
		
		int num = scan.nextInt();
		
		if(num == 3) {
			System.out.println("이전 메뉴로 돌아갑니다.");
			break;
		}
		if(num == 1) {
			System.out.println();
			System.out.println("총점순으로 내림차순으로 정렬합니다.");
			Collections.sort(arrayList, new Comparator<SungJukDTO>() {

				@Override
				public int compare(SungJukDTO sj1, SungJukDTO sj2) {
					return sj2.getTot() - sj1.getTot();
				}
			});
			System.out.println();
			
			System.out.println("아래와 같이 정렬됩니다.");
			
			System.out.println();
			System.out.println("번호\t이름\t국어\t영어\t수학\t총점\t평균");
            for (SungJukDTO sj : arrayList) {
                System.out.printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2f\n",
                        sj.getNo(), sj.getName(), sj.getKor(), sj.getEng(),
                        sj.getMath(), sj.getTot(), sj.getAvg());
            }
			
		}else if(num == 2) {
			System.out.println("이름순으로 오름차순 정렬합니다.");
			Collections.sort(arrayList, new Comparator<SungJukDTO>() {

				@Override
				public int compare(SungJukDTO sj1, SungJukDTO sj2) {
					return sj1.getName().compareTo(sj2.getName());
				}
			});
			System.out.println();
			System.out.println("아래와 같이 정렬됩니다.");
			System.out.println();
			System.out.println("번호\t이름\t국어\t영어\t수학\t총점\t평균");
            for (SungJukDTO sj : arrayList) {
                System.out.printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2f\n",
                        sj.getNo(), sj.getName(), sj.getKor(), sj.getEng(),
                        sj.getMath(), sj.getTot(), sj.getAvg());
            }
            
		}else {
			System.out.println("1 ~ 3 번까지만 입력해 주세요.");
            }
        }
    }
}







0개의 댓글