저번시간에 배운 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 |