package ch01_list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/*
 * ArrayList
 * → 객체를 index로 관리.
 * → 저장용량이 초과되면 자동으로 늘어남.
 * 
 * Iterator ( 반복자 )
 * → collection 에 보관하고 있는 데이터에 순차적으로 접근할 때 사용.
 *   > hasNext() : 데이터 있는지 확인.
 *     next()    : 데이터 가져오기
 *     remove()  : 데이터 삭제
 */

public class ExArrayList {
	
	public static void main(String[] args) {
		
		ArrayList<String> exA = new ArrayList<>();
		List<String> exB = new ArrayList<>();
		
		// add() : 데이터 추가
		exA.add("추신수");
		exA.add("김연경");
		exA.add("김하성");
		
		System.out.println(exA);
		
		// add(index, value) : index 위치에 추가
		exA.add(1,"손흥민");
		System.out.println(exA);
		
		// size() : 요소의 수
		System.out.println("데이터 수 : " + exA.size());
		
		// contains( Object ) : 데이터 확인
		System.out.println("손흥민 확인 : " + exA.contains("손흥민"));
		System.out.println("박지성 확인 : " + exA.contains("박지성"));
		
		// remove( Object or index ) : 데이터 제거
		System.out.println("추신수 삭제 : " + exA.remove("추신수"));
		System.out.println(exA);
		System.out.println("1번 데이터 삭제 : " + exA.remove(1));
		System.out.println(exA);
		
		// set( index, value ) : 데이터 수정
		System.out.println("0번 index 수정 : " + exA.set(0, "이강인"));
		System.out.println(exA);
		
		// get( index ) : 데이터 확인
		System.out.println("1번 데이터 : " + exA.get(1));
		
		System.out.println();
		
		// 각 객체 확인
		for(int i=0; i<exA.size(); i++) {
			System.out.println(i + "번 : " + exA.get(i));
		}
		
		// foreach - for( 변수명 : collection ) 
		for( String data : exA) {
			System.out.println(data);
		}
		System.out.println();
	    System.out.println('1');
		// Iterator
		Iterator<String> it = exA.iterator();
		while(it.hasNext()) { // 데이터가 있는지 확인.
			System.out.println(it.next());
		}
		
		
		
	}
}
// Member 
package ch01_list;

public class Member {
	private String name;
	private int age;
	
	public Member(String name, int age ) { this.name = name; this.age = age;}
	
	public String getName() { return name; }
	public void setName(String name) { this.name =name;}
	
	public int getAge() {return age;}
	public void setAge(int age) {this.age=age;}
	
	public String toString() {
		return name + " - " + age;
	}
	
}
--------------------------------------------------------------------------------

// MemberManager
package ch01_list;

import java.util.ArrayList;
import java.util.Scanner;

public class MemberManager {
	private Scanner sc = new Scanner(System.in);
	private ArrayList<Member> list;
	
	public MemberManager() {list = new ArrayList<>();}
	
	public int inputInteger(String message) {
		System.out.println(message);
		return sc.nextInt();
	}
	
	// 회원 관리 메뉴
	public void menu() {
		
		while(true) {
			int select = inputInteger("1.추가 2.삭제 3.목록 4.수정 5.확인");
			switch(select) {
			case 1: // 추가
				insert(); break;
			case 2: // 삭제
				delete(); break;
			case 3: // 목록
				view(); break;
			case 4: // 수정 
				modify(); break;
			case 5: // 확인
				config(); break;
			case 0:
				end();
			default:
				System.out.println("선택 오류...");
			}
			System.out.println();
		}
		
	} // menu
	
	// 회원 추가
	public void insert() {
		System.out.println("--- 회 원  추 가 ---");
		System.out.print("이름 입력 > ");
		String name = sc.next();
		System.out.print("나이 입력 > ");
		int age = sc.nextInt();
		list.add(new Member(name,age));
	}// insert
	
	// 회원 조회
	public void view() {
		System.out.println("--- 회 원  목 록 ---");
		for(Member mem : list) {
			System.out.print(mem + " ");
		}
		System.out.println("회원 수 : " + list.size());
	} // view
	
	public void delete() {
		System.out.println("--- 회 원  삭 제 ---");
		System.out.print("삭제 이름 입력 > ");
		String del_name = sc.next();
		Member man = findName(del_name);
		if(man == null) {
			System.out.println("없는 회원입니다..");
			return;
		}
		list.remove(man);
		System.out.println(man + " 삭제");
	} // delete
	
	public Member findName(String search) {
		for(Member man : list) {
			if(man.getName().equals(search))
				return man;
		}
		return null;
	}
	
	// 회원 정보 수정 
	public void modify() {
		System.out.println("--- 회 원 수 정 ---");
		System.out.print("수정할 회원 입력 > ");
		String find_name = sc.next();
		Member man = findName(find_name);
		if(man == null) {
			System.out.println("없는 회원입니다..");
			return;
		} else {
			System.out.print("수정할 이름 입력 > ");
			String modi_name = sc.next();
			System.out.print("수정할 나이 입력 > ");
			int modi_age = sc.nextInt();
			Member man2 = new Member(modi_name,modi_age);
			list.set(list.indexOf(man), man2);
		}
	}// modify
	
	public void config() {
		System.out.println("--- 회 원 확 인 ---");
		System.out.print("검색 이름 입력 > ");
		String name = sc.next();
		Member man = findName(name);
		if(man!=null) {
			System.out.println(man);
		}
		else
			System.out.println("없는 회원입니다..");
	}
	
	// 프로그램 종료
	public void end() {
		System.out.println(" - Program end - ");
		System.exit(0); // 현 위치에서 프로그램 강제 종료.
	}
		
}
--------------------------------------------------------------------------------

// MemberMain
package ch01_list;

public class MemberMain {

	public static void main(String[] args) {
		
		MemberManager manager = new MemberManager();
		manager.menu();
		
	}
}