Java/스터디 예제 풀이

15장 제네릭과 컬렉션 연습 문제 및 LAB 문제-1

안정민 2023. 3. 3. 12:46

1. Simple Pair 클래스 작성하기

package 제네릭과컬렉션;

public class SimplePair<T> {
	
	private T name1;
	private T name2;
	
	public SimplePair(T name1,T name2) {
		this.name1=name1;
		this.name2=name2;
	}
	public void setFirst(T name1) {
		this.name1=name1;
	}
	public void setSecond(T name2) {
		this.name2=name2;
	}
	public T getFirst() {
		return name1;
	}
	public T getSecond() {
		return name2;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SimplePair<String> pair=new SimplePair<String>("apple", "Tomato");
		System.out.println(pair.getFirst());
		System.out.println(pair.getSecond());
	}

}

2. 배열 안에서 i번째 요소와 j 번째 요소를 바꾸는 swap 메소드를 제네릭 메소드로 작성해보자

package 제네릭과컬렉션;

public class MyArrayAlg {
	public static <T> void swap(T[] language, int a, int b) {
		T empty=language[a];
		language[a]=language[b];
		language[b]=empty;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[] language= {"C++","C#","JAVA"};
		MyArrayAlg.swap(language,1,2);
		for(String value:language)     
			System.out.println(value);
	}

}

3. 정수배열, 실수배열, 문자열배열을 모두 출력하는 제네릭 메소드

package 제네릭과컬렉션;

public class GenericMethodTest {
	
	public static <T> void printArray(T[] Array){
		for(int i=0;i<Array.length;i++)
			System.out.print(Array[i]+ " ");
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer[] iArray= {10,20,30,40,50};
		Double[] dArray= {1.1,1.2,1.3,1.4,1.5};
		Character[] cArray= {'K','O','R','E','A'};
		
		printArray(iArray);
		printArray(dArray);
		printArray(cArray);
	}

}

4. Map 사용하여서 영어사전 구현

package 제네릭과컬렉션;

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

public class Dictionarl {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, String> dic=new HashMap<String, String>();
		dic.put("map", "지도");
		dic.put("school", "학교");
		
		while(true) {
			Scanner input=new Scanner(System.in);
			System.out.print("영어 단어를 입력하시오: ");
			String s=input.next();
			if(s.equals("quit"))
				break;
			System.out.println("단어의 의미는 "+ dic.get(s));
		}
	
	}

}

5. Scanner 클래스로 -1이 입력될 때까지 양의 정수를 입력받아 벡터에 저장하고 벡터를 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.

정수(-1이 입력될 때까지)>> 10 6 22 6 88 77 -1

가장 큰 수는 88

package 제네릭과컬렉션;

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

public class VectorClass {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Vector vc=new Vector();
		int a;
		int  maxValue=0;
		System.out.print("정수 (-1이 입력될 때까지) >> ");
		
		do {
			Scanner input=new Scanner(System.in);
			a=input.nextInt();
			vc.add(a);
		} while(a!=-1);
		
		for(int i=0;i<vc.size();i++) {
			if(maxValue<(int)vc.get(i))
				maxValue=(int)vc.get(i);
		}
		
		System.out.println("가장 큰 수는 "+ maxValue);
	
	}
}

6. Scanner 클래스를 사용하여 6개 학점('A', 'B', 'C', 'D', 'F')을 문자로 입력받아 ArrayList에 저장하고, ArrayList를 검색하여 학점을 점수(A=4.0, B=3.0, C=2.0, D=1.0, F=0)로 변환하여 평균을 출력하는 프로그램을 작성하라.

6개의 학점을 빈 칸으로 분리 입력(A/B/C/D/F) >> A C A B F D

2.3333333333333335

package 제네릭과컬렉션;

import java.util.*;

public class Grade {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Character> grade=new ArrayList<Character>();
		Scanner input=new Scanner(System.in);
		System.out.print("6개의 학점을 빈 칸으로 분리 입력(A/B/C/D/E) >>> ");
		for(int i=0; i<6; i++) {
			char c = input.next().charAt(0); // 솔직하게 여기만 조금 베껴왔는데 조재체 빈칸으로 구분해서 받는 메소드가 뭐임 이거 설명 듣기
			grade.add(c);
		}
		double sum=0;
		for(int i=0;i<6;i++) {
			if(grade.get(i)=='A')
				sum+=4.0;
			else if(grade.get(i)=='B') // elseif 아니고 그냥 바로 if문 사용해도 됨
				sum+=3.0;
			else if(grade.get(i)=='C')
				sum+=2.0;
			else if(grade.get(i)=='D')
				sum+=1.0;
			else 
				sum+=0;
		}
		
		System.out.print(sum/6);
	}
}

7."그만"이 입력될 때까지 나라 이름과 인구를 입력받아 저장하고, 다시 나라 이름을 입력받아 인구를 출력하는 프로그램을 작성하라. 다음 해시맵을 이용하라.

나라 이름과 인구를 입력하세요.(예: Korea 5000)

나라 이름, 인구 >> Korea 5000

나라 이름, 인구 >> USA 1000000

나라 이름, 인구 >> Swiss 2000

나라 이름, 인구 >> France 3000

나라 이름, 인구 >> 그만

인구 검색 >> France

France의 인구는 3000

인구 검색 >> 스위스

스위스 나라는 없습니다.

인구 검색 >> 그만

 

*** 이문제 진짜 힘들었음

package 제네릭과컬렉션;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

class Location {
	private String city;
	private double latitude;
	private double longitute;
	
	public Location(String city, double latitude, double longitute) {
		this.city=city;
		this.latitude=latitude;
		this.longitute=longitute;
	}
	
	public String getCity() {
		return city;
	}
	public double getLatitude() {
		return latitude;
	}
	public double getLongitute() {
		return longitute;
	}
}


public class LocationHashmap {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HashMap<String, Location> location=new HashMap<String, Location>();
		Scanner input=new Scanner(System.in);
		
		System.out.println("도시, 경도, 위도를 입력하세요.");
		for(int i=0;i<4;i++) {
			System.out.print(">>>"); 
			String s=input.nextLine();
			String p[]=s.split(", "); //문자열을 가르는 함수라 쪼갠 뒤 반환하는 형도 문자열
			String city = p[0];
			double latitude = Double.parseDouble(p[1]); // 아 이거 형변환은 Double.parseDouble() 함수 이용하면 된다!
			double longitute  = Double.parseDouble(p[2]);
			
			location.put(city, new Location(city, latitude, longitute));			
		}
		
		System.out.println("------------------------");
		Set<String> keys=location.keySet();
		Iterator<String> it=keys.iterator();
		
		while(it.hasNext()) {
			String n=it.next();
			Location l=location.get(n);
			System.out.println(l.getCity()+", "+l.getLatitude()+", "+l.getLongitute());
		}
		System.out.println("------------------------");
		
		while(true) {
			System.out.print("도시 이름 >> ");
			String inputcity=input.next();
			if(inputcity.equals("그만"))
				break;
			Location s = location.get(inputcity);
			if(s==null)
				System.out.println(inputcity+"는 없습니다.");
				
			else
				System.out.println(s.getCity()+", "+s.getLatitude()+", "+s.getLongitute());
						

		}
		
		
		
	}

}