HRD_훈련/실습

[JAVA] Iterator 심화 문제 풀이 (17일차)

리드미. 2023. 6. 8. 20:23
728x90
반응형

문제

  1. 입력 부분
     -> 다음과 같이 Person클래스에 스캐너로 입력된 값 저장
     -> String name : 이름 (ex, 홍길동)
     -> int age : 나이 (ex, 30)
     -> String addr : 주소 (ex, 서울)

     => 해당 Person 객체를 map에 저장
     => 키 값은 name

     ex, map.put("홍길동",new Person("홍길동", 30, "서울"));

  2. 삭제 부분
    스캐너로 입력한 값과 객체의 name 변수 값과 동일 할 경우 맵에서 삭제
     -> ex, 스캐너로 "홍길동"을 입력하면 name의 변수가 "홍길동"인 map을 제거

  3. 출력 부분
     -> 콘솔에 '이름 : 홍길동, 나이 : 30, 주소 : 서울' 과 같은 형태로 출력

  4. 종료 부분
     -> 프로그램 종료

 

 


▶ Person 클래스

public class Person {
	private String name;
	private int age;
	private String addr;
	
	Person(String name, int age, String addr){
		this.name=name;
		this.age=age;
		this.addr=addr;
	}

	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}

	public String getAddr() {
		return addr;
	}
}

 

 


▶ main 코드

1) 입력 부분

				System.out.print("이름을 입력하세요 >> ");
				String name = scan.next();
				System.out.print("나이를 입력하세요 >> ");
				int age = scan.nextInt();
				System.out.print("주소를 입력하세요 >> ");
				String addr = scan.next();
	
				map.put(name, new Person(name, age, addr));

 

 

2) 삭제 부분

				Set<String> keys = map.keySet();//key 값을 순차적으로 접근할 수 있다.
				Iterator<String> it = keys.iterator();
				
				System.out.print("삭제할 이름을 입력하세요 >> ");
				String rname = scan.next();

				while(it.hasNext()){
					if(rname.equals(map.get(it.next()).getName())) //입력된 값과 일치하면 삭제
						map.remove(rname);
				}

 

※ 위 코드는 Iterator을 이용한 코드이다. 아래 코드로 작성해도 같은 결과를 가져온다.

				if(map.containsKey(rname)){
					map.remove(rname);
				}

 

 

3) 출력 부분

				Set<String> keys = map.keySet();//key 값을 순차적으로 접근할 수 있다.
				Iterator<String> it = keys.iterator();
				
				while(it.hasNext()){
					Person p = map.get(it.next());
					System.out.print("이름 : " + p.getName());
					System.out.print(", 나이 : " + p.getAge());
					System.out.println(", 주소 : " + p.getAddr());
				}

 

 

4) 종료 부분

				System.out.println("프로그램 종료");
				break;

 

 

 


▶ 출력 결과

1) 입력

(1)입력, (2)삭제, (3)출력, (4)종료 : 1
이름을 입력하세요 >> 홍길동
나이를 입력하세요 >> 30
주소를 입력하세요 >> 서울

 

 

2) 입력한 내용 출력

(1)입력, (2)삭제, (3)출력, (4)종료 : 3
이름 : 홍길동, 나이 : 30, 주소 : 서울

 

 

3) 스캐너로 입력한 값과 name value 값이 동일할 경우 삭제

(1)입력, (2)삭제, (3)출력, (4)종료 : 2
삭제할 이름을 입력하세요 >> 홍길동

(1)입력, (2)삭제, (3)출력, (4)종료 : 3

※ 일치하지 않는다면 삭제되지 않는다.

 

4) 프로그램 종료

(1)입력, (2)삭제, (3)출력, (4)종료 : 4
프로그램 종료

 

 

 


▶ 전체 코드

		HashMap<String,Person> map = new HashMap<String,Person>();
		Scanner scan = new Scanner(System.in);

		while(true){
			System.out.print("(1)입력, (2)삭제, (3)출력, (4)종료 : ");
			int get=scan.nextInt();

			if(get==1){ //입력
				
				System.out.print("이름을 입력하세요 >> ");
				String name = scan.next();
				System.out.print("나이를 입력하세요 >> ");
				int age = scan.nextInt();
				System.out.print("주소를 입력하세요 >> ");
				String addr = scan.next();
	
				map.put(name, new Person(name, age, addr));
			

			} else if(get==2){ //삭제
				Set<String> keys = map.keySet();//key 값을 순차적으로 접근할 수 있다.
				Iterator<String> it = keys.iterator();
				
				System.out.print("삭제할 이름을 입력하세요 >> ");
				String rname = scan.next();

				while(it.hasNext()){
					if(rname.equals(map.get(it.next()).getName())) //입력된 값과 일치하면 삭제
						map.remove(rname);
				}
//				or
//				if(map.containsKey(rname)){
//					map.remove(rname);
//				}
				
			} else if(get==3){ //출력
				Set<String> keys = map.keySet();//key 값을 순차적으로 접근할 수 있다.
				Iterator<String> it = keys.iterator();
				
				while(it.hasNext()){
					Person p = map.get(it.next());
					System.out.print("이름 : " + p.getName());
					System.out.print(", 나이 : " + p.getAge());
					System.out.println(", 주소 : " + p.getAddr());
				}
				
			} else if(get==4){ //종료
				System.out.println("프로그램 종료");
				break;
			}
			System.out.println(); //줄바꿈
		}//while_end

 

 

 

 

 

 

[JAVA] Iterator (17일차)

1. HashMap과 ArrayList 2. Iterator 3. 심화 문제 풀이 1. HashMap과 ArrayList [JAVA] 해시맵 심화 문제 풀이 (17일차) 문제1 입력 부분 -> 다음과 같이 map에 스캐너로 입력된 값 저장 -> key : name, value : 이름 (ex, 홍

deliciouscode.tistory.com

 

728x90
반응형