상세 컨텐츠

본문 제목

고급자바_1221-1

자바

by 정재화니 2022. 12. 21. 13:54

본문

저번시간에 배운 Set을 이용하여 로또를 구매하는 프로그램을 만들어보았습니다.


 

반복문을 통하여 선택지를 만들어줍니다.

private void start() {
		
		while(true) {
			int choice = displayMenu();
			switch(choice) {
			case 1 :	//Lotto 구입
				lottoBuy();
				break;
			case 2 :	//프로그램 종료
				System.out.println("\n감사합니다.");
				return;
			default:
				System.out.println("번호를 잘못 입력했습니다. 다시 입력하세요.");
				
			}
			
		}
	}

그리고 필요한 메서드들을 만들어줍니다.

메뉴를 출력하고 메뉴 선택번호를 입력받아 반환하는 메서드를 작성한다.

private int displayMenu() {
		System.out.println("========================");
		System.out.println("Lotto 프로그램");
		System.out.println("------------------------");
		System.out.println("1. Lotto 구입");
		System.out.println("2. 프로그램 종료");
		System.out.println("========================");
		System.out.print("메뉴선택 : ");
		return sc.nextInt();
	}

그리고 로또를 구입하는 메서드를 만든다.

private void lottoBuy() {
		System.out.println("Lotto 구입 시작");
		System.out.println("(1000원에 로또번호 하나입니다.)");
		System.out.print("금액입력: ");
		 int money = sc.nextInt();
		 
		 if(money < 1000) {
			 System.out.println("입력 금액이 너무 적습니다. 로또번호 구입 실패!!");
			 return;
		 }
		 
		 if(money > 101000) {
			 System.out.println("입력금액이 너무 많습니다. 로또번호 구입 실패!!");
			 return;
		 }
		 
		 //로또 번호 만들기
		 Set<Integer> lottoSet = new HashSet<Integer>();
		 Random rnd = new Random();
		 
		 int count = money / 1000;  // 구매할 로또 개수
		 System.out.println();
		 System.out.println("행운의 로또번호는 아래와 같습니다.");
		 for(int i = 1; i <= count; i++) {
			 while(lottoSet.size() < 6) {
				 lottoSet.add(rnd.nextInt(45) + 1);
			 }
			 List<Integer> lottoList = new ArrayList<Integer>(lottoSet);
			 Collections.sort(lottoList);
			 System.out.println("로또번호" + i + " : " + lottoList);
			 lottoSet.clear(); // 이전 자료 모두 삭제
		 }
		 System.out.println();
		 System.out.println("받은 금액은" + money + "원이고 거스름돈은" + (money%1000) + "원입니다.");
		
	}

실행결과를 보자면


번호가 나오고 금액과 거스름돈이 출력되는 것을 볼 수 있다.

 

적은 금액이나 많은 금액을 입력했을때는

구입이 실패되는 것을 알 수 있습니다.


이번에는 Map에 대하여 공부하였습니다.

Map은   key값과 value값을 한 쌍으로 관리하는 객체이며 
key값은중복을 허용하지 않고 순서가 없다. (Set의 특징을 갖는다.)  value값은 중복을 허용한다.
 Map에다 자료를 추가, 수정, 삭제, 읽기를 해보겠습니다.

 

public static void main(String[] args) {
		HashMap<String, String> map = new HashMap<String, String>();
		
		// 자료 추가==> (key값, value값)
		map.put("name", "정재환");
		map.put("addr", "대전");
		map.put("tel", "010-4724-7168");
		
		System.out.println("map => " + map);
		
		//자료 수정 ==> 데이터를 추가할 때 key값이 같으면 나중에 추가한 값이 저장된다.
		map.put("addr", "집");
		System.out.println("map => " + map);
		
		//자료 삭제 ==> remove(key값) : key값이 같은 자료를 찾아서 삭제한다.
		//				반환값 = 삭제된 데이터의 value값
//		String removeData = map.remove("tel");
//		System.out.println("map => " + map);
//		System.out.println("삭제된 값: " + removeData);
		
		//자료 읽기 ==> get(key값) : 해당 key값과 짝이 되는 value값을 반환한다.
		//							==> key값이 없으면 null을 반환한다. 
		System.out.println("이름 : " + map.get("name"));
		System.out.println("성별 : " + map.get("gender"));
		
		//key값이 존재하는지 여부를 나타내는 메서드 ==> containsKey(key값)
		// ==> 해당 key값이 있으면 true, 없으면 false가 반환된다.
		System.out.println("tel 키값의 존재 여부 : " + map.containsKey("tel"));
		System.out.println("age 키값의 존재 여부 : " + map.containsKey("age"));
		System.out.println();
		
		//Map에 저장된 전체 데이터를 가져와 사용하기
		
		//방법1 : 전체 key값들을 가져와 처리하기 ==> keySet()메서드 이용하기
		// keySet() 메서드 ==> Map의 모든 key값들을 읽어와 Set형으로 반환한다.
		
		//방법1-1 : keySet()과 Iterator를 이용한 방법 
		Set<String> keyset = map.keySet();
		
		Iterator<String> keyIt = keyset.iterator();
		while(keyIt.hasNext()){
			String key = keyIt.next();
			String value = map.get(key);
			System.out.println(key + " : " + value);
		}
		System.out.println("------------------------------------");
		
		//방법 1-2 : keySet()과 향상된 for문을 이용하는 방법
		//for(String key2 : map.keySet()) {
		for(String key2 : keyset) {
			String value2 = map.get(key2);
			System.out.println(key2 + " : " + value2);
		}
		System.out.println("------------------------------------");
		
		//방법2 : value값만 읽어와 처리하기 ==> values()메서드 이용하기
		for(String value3 : map.values()) {
			System.out.println(value3);
		}
		System.out.println("------------------------------------");
	}

 

'자바' 카테고리의 다른 글

고급자바_1222-2  (2) 2022.12.22
고급자바_1222-1  (0) 2022.12.22
고급자바_1220-1  (0) 2022.12.20
고급자바1219-2  (0) 2022.12.19
고급자바 1219-1  (0) 2022.12.19

관련글 더보기