15장 제네릭과 컬렉션 연습 문제 및 LAB 문제-1
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());
}
}
}