본문 바로가기
Programming/JAVA

제너릭과 컬렉션

by 안녕주 2020. 10. 16.

명품자바프로그래밍 Chapter7_Lab06

실습1| Vector <Integer> 실습

import java.util.Scanner;
import java.util.Vector;

public class VectorTest {
	
	public static void PrintV(Vector<Integer> v) {
		//삭제전, 후 Vector 출력
		System.out.print("[");  //[ 출력
		for(int i = 0; i<v.size()-1;i++) { //0 ~ v.size()-1 까지 출력
			int x = v.get(i); 
			System.out.print(x+ ", "); //    , 때문에 v.size()-1 까지 출력 후
		}
		System.out.print(v.get(v.size()-1) + "]\n"); //마지막 숫자를 따로 출력 + ] 
	}
	
	public static void DeleteBig(Vector<Integer> v) {
		int d_big = 0;  //가장 큰 숫자의 인덱스를 저장할 변수
		for (int i =1; i<v.size(); i++) { //1 번째 부터 비교
			if (v.get(d_big) < v.get(i)) { //크기 비교
				d_big = i;  // 새로 비교되는 대상이 클 경우 d_big에 해당 인덱스 저장
			}
		}
		System.out.println("가장 큰 수 "+ v.get(d_big) + " 삭제");		
		v.remove(d_big); //remove는 메소드는 index를 넘겨주어야함
	}
	
	public static void DeleteSmall(Vector<Integer> v) { //인덱스로 비교 
		int d_small = 0; //가장 큰 작은의 인덱스를 저장할 변수
		for (int i =1; i<v.size(); i++) { //1 번째 부터 비교
			if (v.get(d_small) > v.get(i)) { //크기 비교
				d_small = i;  // 새로 비교되는 대상이 작을 경우 d_small에 해당 인덱스 저장
			}
		}
		System.out.println("가장 작은 수  "+ v.get(d_small) + " 삭제");
		v.remove(d_small); //remove는 메소드는 index를 넘겨주어야함
	}
	
	public static void main(String[] args) {
		Vector<Integer> v = new Vector<>(); //Vector<Integer> 생성
		Scanner scan = new Scanner(System.in); //Scanner 생성
		
		// 사용자로부터 여러개의 정수를 입력받아서 저장
		System.out.print("정수(-1이 입력될 때까지)>> ");
		while(true){
			int n = scan.nextInt();
			if(n == -1) //-1을 입력받았을시 while문 탈출
				break;
			v.add(n); //입력한 n들을 Vector에 추가
		}
		
		scan.close();
		System.out.print("삭제 전 : ");
		PrintV(v); // 삭제 전 값들 프린트
		
		DeleteBig(v); // 가장 큰 수 삭제
		System.out.print("삭제 후 : ");
		PrintV(v); // 삭제 후 값들 프린트
		
		DeleteSmall(v); // 가장 작은 수 삭제
		System.out.print("삭제 후 : ");
		PrintV(v); // 삭제 후 값들 프린트
		
		
	}
}

 

실습4| 강수량 관리 프로그램

import java.util.Scanner;
import java.util.Vector;

public class VectorRainfall {
	public static void main(String[] args) {
		Vector<Integer> v = new Vector<>(); //Vector 컬렉션 사용
		Scanner scan = new Scanner(System.in); //Scanner 선언
			
		while(true){ //0을 입력받아 break가  때까지 반복
			System.out.print("강수량 입력 (0 입력시 종료)>> "); 
			int n = scan.nextInt();  //int형으로 입력 받기
			if (n == 0) //0을 입력받으면 break. while문 탈출
				break;
			v.add(n);  // Vector에 해당 element를 삽입
			
			int equal = 0;
			for(int i=0; i<v.size();i++) { // 강수량 입력한거 전체 출력 (0부터 vector의 사이즈 전까지 )
				System.out.print(v.get(i)+ " "); // 전체 element를 반복문이 돌아가면서 출력
				equal += v.get(i); // equal 에 해당 값을 누적해서 더하기
			}
			equal /= v.size(); // 더한 것을 vector의 크기만큼 나누기.
			System.out.println("\n현재 평균 " + equal); // 평균 출력
		}
		
		scan.close();	
	}
}

 

실습6| 도시 위도, 경도 정보 저장(Location.java, LocationManager.java)

public class Location {
	private String city; // 도시 이름 (문자열)
	private double longitude; //경도 (실수)
	private double latitude; //위도 (실수)
	
	public Location(String city, double longitude, double latitude) { //생성자
		this.city = city;
		this.longitude = longitude;
		this.latitude = latitude;
	}
	
	public String getCity() { //각각의 Setter, Getter 메소드 생성
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public double getLongitude() {
		return longitude;
	}
	public void setLongitude(double longitude) {
		this.longitude = longitude;
	}
	public double getLatitude() {
		return latitude;
	}
	public void setLatitude(double latitude) {
		this.latitude = latitude;
	}
	
}
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

public class LocationManger {	
	
	public static void printAll(HashMap<String,Location> map) { //모든 요소들 출력, (key, Location)쌍 출력
		Set<String> keys = map.keySet(); // key 문자열을 가진 집합 Set 컬렉션 리턴.
		Iterator<String> it = keys.iterator(); //key 문자열을 순서대로 접근할 수 있는 iterator 리턴
		
		System.out.println("------------------------------");
		while(it.hasNext()) {
			String city = it.next(); //도시 이름 알아내기
			Location lo = map.get(city); //city를 key로 map에서 해당 Location 객체 찾기
			System.out.println(lo.getCity() + "\t" + lo.getLongitude() + "\t" + lo.getLatitude() ); //모두 출력
		}
	
	}

	public static void main(String[] args) {	
		HashMap<String,Location> map = new HashMap<String,Location>(); //도시이름을 key로 하는 HashMap<String,Location> 컬렉션 생성
		Scanner scan = new Scanner(System.in); //scanner 생성
		
		System.out.println("도시,위도,경도를 입력하세요.");
		for(int i =0;i<4;i++) {// 4개의 도시를 입력하라고 문제에서 제시해서 for문으로 4번 반복
			System.out.print(">> ");
			String full = scan.nextLine();
			String[] s = full.split(","); //,를 기준으로 split해서 s 배열에 넣기
			
			String city = s[0]; //city는 0번째 인덱스
			double longitude = Double.parseDouble(s[1]); //위도는 1번째 인덱스
			double latitude = Double.parseDouble(s[2]); //경도는 2번째 인덱스
			
			Location lo = new Location(city,longitude,latitude); //lo 클래스에  각각 입력받은 내용들로 클래스 생성
			map.put(city, lo); //해시맵에 각각 추가 (city는 키, lo는 값)
		}
		
		printAll(map); //해시 맵에 있는 모든 도시출력

		System.out.println("------------------------------");
		while(true) {
			System.out.print("도시 이름 >> ");
			String city = scan.next(); //사용자로 부터 입력
			if(city.equals("그만")) break; //그만을 입력할 경우 while문 탈출
			Location lo = map.get(city); //city이름에 해당하는 Location 객체 검색
			if (lo == null) // lo가 없는 경우 --> 없는 도시
				System.out.println(city + "는 없는 도시입니다.");
			else //lo 가 있을 경우 --> 있는 도시
				System.out.println(lo.getCity() + "\t" + lo.getLongitude() + "\t" + lo.getLatitude());
		}
		scan.close();
	}

}

 

실습8 | 고객 포인트 점수 관리 프로그램

import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

public class CustomerManager {
	public static void printAll(HashMap<String,Integer> map) { //모든 요소들 출력, (key, Location)쌍 출력
		Set<String> keys = map.keySet(); // key 문자열을 가진 집합 Set 컬렉션 리턴.
		Iterator<String> it = keys.iterator(); //key 문자열을 순서대로 접근할 수 있는 iterator 리턴
		
		while(it.hasNext()) {
			String name = it.next(); //이름 알아내기
			int point = map.get(name); //name을 key로 map에서 해당 point객체 찾기
			System.out.print("("+ name +","+ point +")"); //모두 출력
		}
	}
	
	public static void main(String[] args) {
		HashMap<String,Integer> map = new HashMap<String,Integer>(); 
		Scanner scan = new Scanner(System.in);
		
		System.out.print("** 포인트 관리 프로그램입니다 **");
		while(true) {
			System.out.print("\n이름과 포인트 입력>> ");
			String name = scan.next(); //이름 입력 받기
			if (name.equals("그만")) break; //그만을 입력했으면 프로그램종료
			int point = scan.nextInt(); //포인트 입력받기
			
			Integer x = map.get(name); // 이름에 해당하는 Integer 객체 검색
			if (x != null) { //기존에 이름이 있을 경우
				point += x; //누적 합
			}
			map.put(name,point); //신규일 경우 map에 추가 (name과 point)
			printAll(map); //현재까지의 총 map 프린트
			
		}
		scan.close();		
	}
}

 

+ 추가 과제

* 영화 정보 프로그램 (Movie.java, MovieTest.java)

public class Movie {
	private String title; //제목
	private String director; //감독
	private String genre; //장르
	private int release; //개봉연도
	
	public Movie(String title, String director, String genre, int release) { //생성자
		this.title = title;
		this.director = director;
		this.genre = genre;
		this.release = release;
	}

	public String getTitle() { //각각의 Setter 와 Getter 생성
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getDirector() {
		return director;
	}

	public void setDirector(String director) {
		this.director = director;
	}

	public String getGenre() {
		return genre;
	}

	public void setGenre(String genre) {
		this.genre = genre;
	}

	public int getRelease() {
		return release;
	}

	public void setRelease(int release) {
		this.release = release;
	}

	@Override
	public String toString() { //toString으로 문자열 반환 (2번 menu에서 사용할 string)
		return "[제목 :" + title + ", 감독:"+ director +", 장르:" + genre + ", 개봉년도:"+ release+"]";
	}
	
	
	
	
	
}
import java.util.Scanner;
import java.util.Vector;

public class MovieTest {
	public static Vector<Movie> v = new Vector<>(); //Vector 컬렉션 사용
	public static Scanner scan = new Scanner(System.in); //Scanner 선언
	
	public static void menu1() { // 영화 정보 입력
		System.out.print("제목:");
		String title = scan.nextLine();
		System.out.print("감독:");
		String director = scan.nextLine();
		System.out.print("장르:");
		String genre = scan.nextLine();
		System.out.print("년도:");
		int release = scan.nextInt();
		
		Movie m = new Movie(title,director,genre,release); // 입력받은 정보를 토대로 Movie 객체 생성
		v.add(m); // Vector에 해당 Movie 객체 삽입
	}
	
	public static void menu2() { // 영화 정보 출력
		for(int i =0; i<v.size();i++) { //movie 객체의 개수 만큼 print
			Movie m = v.get(i); //벡터에서 i번째 Movie 객체얻어내기
			System.out.println(m); //m.toString()을 이용해서 객체 m출력
		}
	}
	
	public static void menu3() { // 영화 정보 검색
		System.out.print("검색할 제목 입력:");
		String Searchtitle = scan.nextLine();
		
		for(int i =0;i<v.size(); i++) { //기존에 저장된 Movie객체와 입력한 제목이랑 비교
			Movie m = v.get(i); //Vector의 i번째 객체를 Movie m 에 저장
			if(Searchtitle.equals(m.getTitle())) { //입력한 title이 Movie 객체의  title과 같을 경우
				System.out.println(m);
				break;
			}
			if (i == v.size()-1 && !Searchtitle.equals(m.getTitle())) // 반복문의 마지막번째 까지 도달했을경우, 그리고 검색결과 false일 경우
				System.out.println("검색한 제목의 영화가 없습니다."); //검색한 제목의 영화가 없음
		}		
	}

	public static void menu4() { // 영화 정보 수정
		System.out.print("수정할 제목 입력:");
		String Searchtitle = scan.nextLine();
		
		int j=0;
		for(int i =0;i<v.size(); i++) { //기존에 저장된 Movie객체와 입력한 제목이랑 비교
			Movie m = v.get(i); //Vector의 i번째 객체를 Movie m 에 저장
			if(Searchtitle.equals(m.getTitle())) {//입력한 title이 Movie 객체의  title과 같을 경우
				System.out.println(m);
				j = i; //해당 인덱스를 j에 저장
				break;
			}
			if(i == v.size()-1 && !Searchtitle.equals(m.getTitle())) // 반복문의 마지막번째 까지 도달했을경우, 그리고 검색결과 false일 경우
				System.out.println("수정할 제목의 영화가 없습니다.");
		}
		
		System.out.print("제목:");
		String title = scan.nextLine();
		System.out.print("감독:");
		String director = scan.nextLine();
		System.out.print("장르:");
		String genre = scan.nextLine();
		System.out.print("년도:");
		int release = scan.nextInt();
		
		Movie m = new Movie(title,director,genre,release); // Movie 객체 재생성
		v.set(j,m); // Vector의 수정할 번호의 인덱스 j에  수정된 내용의 Movie 객체 삽입
		
	}
	
	public static void menu5() {
		System.out.print("삭제할 영화 제목 입력: ");
		String Searchtitle = scan.nextLine();
		
		int j =0;
		for(int i =0;i<v.size(); i++) { //기존에 저장된 Movie객체와 입력한 제목이랑 비교
			Movie m = v.get(i); //Vector의 i번째 객체를 Movie m 에 저장
			if(Searchtitle.equals(m.getTitle())) {//입력한 title이 Movie 객체의  title과 같을 경우
				System.out.println(m+ "을 삭제합니다.");
				v.remove(j); //인덱스를 넘겨주어서 삭제
				break;
			}
			if (i == v.size()-1 && !Searchtitle.equals(m.getTitle())) // 반복문의 마지막번째 까지 도달했을경우, 그리고 검색결과 false일 경우
				System.out.println("삭제할 제목의 영화가 없습니다.");
		}	
	}
	
	public static void main(String[] args) {		
		
		while(true) {
			System.out.println("===========영화 정보 관리===========");
			System.out.print("1. 입력/2. 출력/3. 검색/4. 수정/5. 삭제/6. 종료\n메뉴입력>> ");
			int n = scan.nextInt(); // 메뉴입력 저장
			String a = scan.nextLine(); //개행문자 받아주는 코드
			
			if (n ==6) break; //6번 일 경우 삭제
			
			if (n==1) { //1번 메뉴를 선택했을 경우
				menu1();
			}
			else if(n==2) { //2번 메뉴를 선택했을 경우
				menu2();
			}
			else if (n==3) {//3번 메뉴를 선택했을 경우
				menu3();
			}
			else if (n==4) {//4번 메뉴를 선택했을 경우
				menu4();
			}
			else if (n==5) {//5번 메뉴를 선택했을 경우
				menu5();
			}

		}			
		scan.close();
	}
}

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

자바 기말 플젝 코드(미완성)  (0) 2020.12.30
입출력 스트림과 파일 입출력  (0) 2020.10.16
패키지 개념과 자바 기본 패키지  (0) 2020.10.16
상속  (0) 2020.10.16
클래스와 객체  (0) 2020.10.16

댓글