본문 바로가기
Programming Study/절대JAVA

[절대JAVA]7장 프로그래밍 연습문제(2)

by 푸고배 2018. 9. 25.

6. 다음 조건을 만족하도록 오늘이 속한 월의 달력을 출력하는 프로그램을 작성하시오.

 - 다음과 같이 출력되도록 한다.

<소스코드>

package Chapter7_6;

import java.util.Calendar;

public class Chapter7_6 { // 윤년X
	public static void print(int k, int date) { // k는 공백 개수, date는 월의 마지막 날짜 
		int count=1;
		for(int i=0;i<6;i++) {
			for(int j=0;j<7;j++) {
				if(i<k && j==0) {
					System.out.print("\t");
				} else {
					if(count<=date)
						System.out.print(count+++"\t");
				}
			}
			System.out.println();
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Calendar cal = Calendar.getInstance();
		int year = cal.get(Calendar.YEAR);
		int month = cal.get(Calendar.MONTH)+1;
		int date = cal.get(Calendar.DATE);
		System.out.println(year+"년 "+month+"월  달력\n");
		System.out.println("일\t월\t화\t수\t목\t금\t토");
		int k = cal.get(Calendar.DAY_OF_WEEK);
		switch(month) {
		case 1:
		case 3:
		case 5: 
		case 7:
		case 8: 
		case 10: 
		case 12:
			print(k,31);
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			print(k,30);
			break;
		case 2:
			print(k,28);
			break;
		default:
			break;
		}
	}

}

 

7. 다음 조건을 만족하며, 표준 입력으로 입력되는 단어에서 중복된 단어와 유일한 단어를 구분하여 출력하는 프로그램을 HashSet을 이용하여 작성하시오.

- 콘솔 표준입력에서 quit를 입력하면 표준입력이 종료

- 출력은 HashSet 객체를 그대로 출력하며, 입출력은 다음과 같도록 한다.

표준입력으로 문자열을 여러 줄에 입력하세요.

결과를 보시려면 마지막에 표준입력으로 quit를 입력하세요.

표준 입력으로 문자열을 여러 줄에 입력하세요.

결과를 보시려면 마지막에 표준입력으로 quit를 입력하세요.

quit

 

중복되지 않은 문자열 => [quit를, 여러, 마지막에, 줄에, 보시려면, 결과를, 문자열을]

 

중복된 문자열 => [입력하세요., 표준입력으로]

<소스코드>

package Chapter7_7;

import java.util.HashSet;
import java.util.Scanner;

public class Chapter7_7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);
		String tmp;
		HashSet<String> set1 = new HashSet<String>(); // 중복되지 않은 문자열
		HashSet<String> set2 = new HashSet<String>(); // 중복된 문자열
		System.out.println("표준입력으로 문자열을 여러 줄에 입력하세요.");
		System.out.println("결과를 보시려면 마지막에 표준입력으로 quit를 입력하세요.");
		while(true) {
			tmp = s.next();
			if(tmp.equals("quit")) {
				break;
			} else {
				if(set1.contains(tmp)) {
					set2.add(tmp);
					set1.remove(tmp);
				} else {
					set1.add(tmp);
				}
			}
		}
		System.out.println("중복되지 않은 문자열 =>"+ set1+"\n");
		System.out.println("중복된 문자열 =>"+ set2);
	}

}

 

 

8. 다음 조건을 만족하며, 명령행 인자로 입력되는 단어에서 단어의 출현 횟수를 출력하는 프로그램을 HashMap을 이용하여 작성하시오.

- Map을 이용하여 <단어, 출현횟수>의 키와 값을 저장

- 명령행 인자를 모두 출력, 단어의 종류 수를 출력, 각 단어와 출현 횟수를 출력

- 출력 결과 화면

[java, c, java, cpp, cpp, cobol, java]

4 distinct words detexted :

[cobol=1, cpp=2, c1, java=1]

<소스코드>

package Chapter7_8;

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

public class Chapter7_8 {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		String tmp;
		HashMap<String, Integer> m = new HashMap<String, Integer>();
		Vector<String> v = new Vector<String>();
		int count;
		for(int i=0;i<args.length;i++) {
			if(m.containsKey(args[i])) {
				count = m.get(args[i]); // key 값으로 출현 횟수 탐색
			}else {
				count=0;
			}
			m.put(args[i], ++count);
			v.add(args[i]);
		}
		System.out.println(v);
		System.out.println(m.size()+" distinct words detected");
		System.out.println(m);
	}

}

 

 

9. 클래스 HashMap을 사용하여 이름과 전화번호가 저장되는 간단한 전화번호부를 만들어 이름으로 검색하는 프로그램을 작성하시오.

- 입출력 결과 화면

검색할 이름을 적으세요. >>

김미현

입력하신 김미현의 전화번호는 010-3675-8754 입니다.

<소스코드>

package Chapter7_9;

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

public class Chapter7_9 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HashMap<String,String> m = new HashMap<String,String>();
		m.put("김미현", "010-3675-8754");
		m.put("박나현", "010-2834-9384");
		m.put("강다현", "010-1294-2349");
		Scanner s = new Scanner(System.in);
		String name;
		System.out.println("검색할 이름을 적으세요. >>");
		name=s.nextLine();
		System.out.println("입력하신 "+name+"의 전화번호는 "+m.get(name)+" 입니다.");
		
	}

}

 

 

10. 이름과 전화번호, 이동통신사가 저장되는 간단한 전화번호부를 만들기 위해, 키 하나에 값을 2개 입력할 수 있는 클래스 MyData를 구현하여 다음 조건을 만족하도록 프로그램을 작성하시오.

- 일반화 유형을 지원하는 클래스 MyData의 구현

class MyData<K, V1, V2> {

 

}

- 입출력 결과 화면

검색할 이름을 적으세요. >>

김이용 

 입력하신 김이용의 전화번호는 010-3196-3985, 이동통신사는 KT입니다.

<소스코드>

 

package Chapter7_10;

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

class MyData<K, V1, V2>{
	private HashMap<K,V1> m1; // 이름, (폰번호,통신사)
	private HashMap<K,V2> m2; // 폰번호, 통신사
	public MyData() {
		m1=new HashMap<K,V1>();
		m2=new HashMap<K,V2>();
	}
	public void add(K n, V1 p, V2 a) { // 이름, 폰번호, 통신사
		m1.put(n, p);
		m2.put(n, a);
	}
	public V1 getV1(K n){
		return m1.get(n);
	}
	public V2 getV2(K n) {
		return m2.get(n);
	}
}
public class Chapter7_10 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyData<String, String, String> my = new MyData<String, String, String>();
		my.add("김이용", "010-3196-3985", "KT");
		my.add("정아영", "010-1342-1453", "SK");
		my.add("강은영", "010-1236-4573", "LG");
		
		Scanner s = new Scanner(System.in);
		System.out.println("검색할 이름을 적으세요. >>");
		String name = s.nextLine();
		System.out.println("입력하신 "+name+"의 전화번호는 "+my.getV1(name)+", 이동통신 사는 "+my.getV2(name)+"입니다.");
	}

}

 

참고자료 : 인피니티북스 절대 JAVA

github 주소 : 

https://github.com/ch1517/Network-programming/tree/master/Chapter7

반응형

댓글