package day16;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

//HashMap을 이용하여 학생 이름과 자바 점수를 기록하는 
// 관리 프로그램을 작성하세요. 
// 아래 프로그램 메뉴에서 각 번호로 서비스 선택하고, 
// 6번을 입력받으면 프로그램 종료. 
/*
 	** 자바 성적 관리 프로그램 **
	1. 전체 조회 
	2. 등록
	3. 수정
	4. 삭제
	5. 전체 평균
	6. 프로그램 종료
*/
public class Test04Ex {
	HashMap<String, Integer> data = new HashMap<String, Integer>(); 
	Scanner sc = new Scanner(System.in);
	
	private void printAll() {
		Set<String> keys = data.keySet(); 
		Iterator<String> it = keys.iterator(); 
		while(it.hasNext()) {
			String name = it.next(); 
			int score = data.get(name); 
			System.out.println(name + " : " + score);
		}
		System.out.println("=====================================");
	}
	private void addData() {
		System.out.print("이름>> ");
		String name = sc.nextLine(); 
		System.out.print("점수>> ");
		// String name = sc.nextLine();
		// int score = Integer.parseInt(name);
		int score = Integer.parseInt(sc.nextLine()); 
		// map안에 key값으로 이미 저장된 이름이 있는지 확인 
		Set<String> keys = data.keySet(); 
		if(keys.contains(name)) { // key들중에 입력받은 name과 동일한 값이 있냐? 
			System.out.println("이미 존재하는 학생입니다. 이름을 다시 입력해주세요.");
			//addData(); 
		}else {
			data.put(name, score); // map에 저장 			
			System.out.println("저장 완료");
		}
		System.out.println("=====================================");
	}
	private void modifyData() {
		System.out.print("수정할 학생 이름>> ");
		String name = sc.nextLine(); 
		Set<String> keys = data.keySet(); 
		if(keys.contains(name)) {
			// 점수 입력받아 수정 
			System.out.print("점수 >> ");
			//String name = sc.nextLine();
			//int score = integer.parseInt(name);
			int score = Integer.parseInt(sc.nextLine());
			
			data.put(name, score); // 수정 put(같은키값, 다른벨류값);
			System.out.println("수정완료!");
		}else {
			System.out.println("존재하지 않는 학생입니다..");
		}
		System.out.println("=====================================");
	}
	private void deleteData() {
		System.out.print("삭제할 학생 이름>> ");
		String name = sc.nextLine(); 
		Set<String> keys = data.keySet(); 
		if(keys.contains(name)) {
			data.remove(name);  // 삭제 
			System.out.println("삭제완료!");
		}else {
			System.out.println("존재하지 않는 학생입니다..");
		}
		System.out.println("=====================================");
	}
	private void printAvg() {
		Collection<Integer> col = data.values(); // map에서 값들만 뽑아
		Iterator<Integer> it = col.iterator(); 
		int sum = 0; 
		while(it.hasNext()) {
			sum += it.next(); // 값하나씩 꺼내서 sum에 누적해 더하기 
		}
		double avg = (double)sum / data.size(); 
		System.out.println("평균 점수 : " + avg);
		System.out.println("=====================================");
	}
	public void run() {
		while(true) {
			System.out.println("** 자바 성적 관리 프로그램 **\n"
					+ "1. 전체 조회 \n"
					+ "2. 등록\n"
					+ "3. 수정\n"
					+ "4. 삭제\n"
					+ "5. 전체 평균\n"
					+ "6. 프로그램 종료");
			System.out.print("원하는 서비스 번호를 입력해주세요 >> ");
			int sel = Integer.parseInt(sc.nextLine());
			System.out.println("=====================================");
			if(sel == 1) printAll(); 
			else if(sel == 2) addData(); 
			else if(sel == 3) modifyData(); 
			else if(sel == 4) deleteData(); 
			else if(sel == 5) printAvg(); 
			else if(sel == 6) {
				sc.close();
				System.out.println("프로그램 종료!");
				break;
			}else {
				System.out.println("잘못된 메뉴번호... 다시 입력해주세요.");
			}
		}
	}
	public static void main(String[] args) {
		
		Test04Ex prg = new Test04Ex();
		prg.run();
	}
}​
package day16;

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

/*
	Scanner 클래스로 -1이 입력될때까지 양의 정수를 입력받아 벡터에 저장하고,
	벡터를 검색하여 가장 큰 수를 출력하는 프로그램을 작성하세요. 
	실행예시:
		정수>> 10 6 22 6 88 77 -1
		가장 큰 수는 88
*/
public class Test01Ex {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		Vector<Integer> v = new Vector<Integer>(); 
		
		System.out.print("정수 >> ");
		while(true) {
			int n = sc.nextInt(); 
			if(n == -1) { // -1인지 먼저 검사 
				break;
			}
			v.add(n); // 벡터에 추가 
		}
		
		// 저장된것이 하나도 없을 경우 예외 처리 
		if(v.size() == 0) {
			System.out.println("저장된 수가 하나도 없습니다.");
			sc.close();
			return;  // main 메서드 강제 종료 
		}
		
		// 가장 큰 수 찾아서 출력 (메서드로 작성해보자)
		printBiggerNum(v); // v를 인자로 던져서 가장큰수 찾아 출력하라고 명령! 
		
	}
	
	
		int max = vector.get(0);
		for(int i = 0; i < vector.size(); i++) {
			if(max < vector.get(i)) {
				max = vector.get(i);
			}
		}
		System.out.println("가장 큰 수는 : " + max);
	
}
package day16;

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

/*
	Scanner 클래스를 사용하여 6개 학점('A', 'B', 'C', 'D', 'F')을 문자로 입력받아
	ArrayList에 저장하고, ArrayList를 검색하여 학점을 점수(A=4.0, B=3.0, C=2.0, D=1.0, F=0)로 변환하여
	평균을 출력하는 프로그램을 작성하세요.
	실행예시:
		6개의 학점을 빈 칸으로 분리 입력(A/B/C/D/F)>>	 A C A B F D
		2.3333333333333335
*/
public class Test02Ex {
	
	public static void main(String[] args) {
		
		ArrayList<String> list = new ArrayList<>();
	 	Scanner sc = new Scanner(System.in);
	 	
	 	
	 		System.out.println("학점을 입력하세요 >> ");
			/*
			 * 		System.out.println("6개의 학점을 빈 칸으로 분리 입력(A/B/C/D/F)>>");
		for (int i = 0; i < 6; i++) {
			Character grade = sc.next().charAt(0);    //입력값 중 첫번째 문자 입력받기 
			list.add(grade);		//어레이에 등급 추가 
		}
		
		double sum = 0;
		for (int i = 0; i < 6; i++) {
			if(list.get(i).equals('A')) {sum += 4.0;}
			else if(list.get(i).equals('B')) {sum += 3.0;}
			else if(list.get(i).equals('C')) {sum += 2.0;}
			else if(list.get(i).equals('D')) {sum += 1.0;}
			else if(list.get(i).equals('F')) {sum += 0;}
			
		}
		System.out.println(sum/list.size());
		sc.close();
			 */
	 	String grade = sc.nextLine();
	 	String[] split = grade.split(" ");
	 		for(String s: split){
	 		list.add(s);
	 		}
		
	 	System.out.println(list);
	 	
	 	System.out.println("학점을 입력하세요 >>");
	 		double sum = 0;
	 		for (int i = 0; i < list.size(); i++) {
	 			
				if(list.get(i).equals("a")) {sum += 4.0;}
				if(list.get(i).equals("b")) {sum += 3.0;}
				if(list.get(i).equals("c")) {sum += 2.0;}
				if(list.get(i).equals("d")) {sum += 1.0;}
				if(list.get(i).equals("f")) {sum += 0.0;}
			}
		System.out.println(" 평균 " +  sum/list.size());
	}
}
package day16;

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

public class Test03Ex {
	public static void main(String[] args) {
		// 영한 사전 만들기 
		// : HashMap을 이용하여 10개의 단어를 영어,한글의 쌍으로 저장하고 
		// 영어로 한글을 검색하는 프로그램을 만들어보세요.
		// 단, exit가 입력되면 프로그램 종료!
		
		HashMap<String, String> dict = new HashMap<String, String>();
		
		dict.put("apple", "사과");
		dict.put("paper", "종이");
		dict.put("book", "책");
		dict.put("car", "자동차");
		dict.put("pants", "바지");
		dict.put("bottle", "병");
		dict.put("chair", "의자");
		dict.put("extend", "확장하다");
		dict.put("implement", "실행하다");
		dict.put("banana", "바나나");
		
		Scanner sc = new Scanner(System.in); 
		while(true) {
			System.out.print("찾고싶은 단어 >> ");
			 
			if(eng.equals("exit")) {
				System.out.println("프로그램 종료!");
				break;
			}
			String kor = dict.get(eng);
			if(kor == null) {
				System.out.println(eng + "는 사전에 없는 단어입니다.");
			}else {
				System.out.println(kor);
			}
		}
	
		sc.close();
	}
}
package day16;

import java.lang.ProcessHandle.Info;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

/*
	id와 tel(전화번호)로 구성되는 Student클래스를 만들고, 이름을 key로 하고 Student객체를 값으로 하는 해쉬맵을 작성해보세요.
	이름을 검색하면 id와 전화번호 출력되고, exit 입력하면 프로그램 종료. 
*/
class Student{
	private int id;
	private String tel;
	public Student(int id, String tel) {
		this.id = id; this.tel =tel;
	}
		public int getId(){return id;}
		public String getTel() {return tel;}
		
		public static void run() {
			
			
			HashMap<String, Student> map = new HashMap<String, Student>();
			map.put("피카츄", new Student(1, "010-1111-2222"));
			map.put("라이츄", new Student(2, "010-1234-5678"));
			map.put("파이리", new Student(3, "010-9999-9999"));
			
			
			Scanner sc = new Scanner(System.in);
			
			
			
			while(true) {
				System.out.println("이름을 입력하세요 ");
				String name = sc.nextLine();
				
				if(name.equals("exit")) {break;}
				
				
				Student info = map.get(name);
				if(info==null) { System.out.println("없는사람입니다 .");}
				
				else {
					System.out.println(name+  ":" + "  id  :  " + info.getId() + "  Tel  :"+info.getTel() );
				
				}
			}	System.out.println("프로그램 종료...");
			sc.close();
		}
		
}

public class Test05Ex {
	public static void main(String[] args) {
	
		Student.run();
	
	}
}
package day16;

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

/*
	"그만"이 입력될 때까지 나라이름과 인구를 입력받아 저장하고, 
	다시 나라이름을 입력받아 인구를 출력하는 프로그램을 작성하세요. 
	아래 해쉬맵을 이용하세요.
	HashMap<String, Integer> nations = new HashMap<String, Integer>();
	실행예시 :
		나라 이름과 인구를 입력하세요.(예: Korea 5000)
		나라 이름, 인구 >>  Korea 5000
		나라 이름, 인구 >>  USA 1000000
		나라 이름, 인구 >>  Swiss 2000
		나라 이름, 인구 >>  France 3000
		나라 이름, 인구 >>  그만
		
		인구 검색 >> France
		France의 인구는 3000
		인구 검색 >> 스위스
		스위스 나라는 없습니다.
		인구 검색 >> 그만
		프로그램 종료!
*/
public class Test06Ex {
	public static void main(String[] args) {
		
		HashMap<String, Integer> nations = new HashMap<String, Integer>();
		Scanner sc = new Scanner(System.in);
		
		System.out.println("나라 이름과 인구를 입력하세요.(예: Korea 5000)");
		
		// 나리이름, 인구 입력받아 저장 (그만이 break 포인트) 
		while(true) {
			System.out.print("나라 이름, 인구 >> ");
			String txt = sc.nextLine();
			if(txt.equals("그만")) {
				break; 
			}
			String[] txtSplit = txt.split(" ");
			nations.put(txtSplit[0], Integer.parseInt(txtSplit[1]));
		}
		
		// 나라이름 입력받아 인구 출력 
		while(true) {
			System.out.print("인구 검색 >> ");
			String n = sc.nextLine(); 
			if(n.equals("그만")) {
				break;
			}
			// map의 get(key값) 은 해당 키벨류가 없으면 null 리턴 
			Integer popul = nations.get(n); // 저장하는 변수를 Integer로 받은 이유 : null 체크하려고 
			if(popul == null) {
				System.out.println(n + " 나라는 없습니다.");
			}else {
				System.out.println(n + "의 인구는 " + popul);
			}
		}
		
		System.out.println("프로그램 종료! ");
		sc.close();

	}
}
package day16;

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

/*
	Vector 컬렉션을 이용하여 강수량의 평균을 유지 관리하는 프로그램을 작성하세요.
	강수량을 입력하면 벡터에 추가하고 현재 입력된 모든 강수량과 평균을 출력한다.
	실행 예시 :
		강수량 입력 (0 입력시 종료)>>	5
		5
		현재 평균 5
		
		강수량 입력 (0 입력시 종료)>>	80
		5 80
		현재 평균 42
		
		강수량 입력 (0 입력시 종료)>>	53
		5 80 53
		현재 평균 46
		
		강수량 입력 (0 입력시 종료)>>	22
		5 80 53 22
		현재 평균 40
		
		강수량 입력 (0 입력시 종료)>>	0
		프로그램 종료!
*/
public class Test07Ex {
	
	public static void main(String[] args) {
	
		Vector<Integer> data = new Vector<Integer>(); 
		Scanner sc = new Scanner(System.in);
		
		while(true) {
			System.out.print("강수량 입력 (0 입력시 종료)>> ");
			int amount = Integer.parseInt(sc.nextLine().trim());
			if(amount == 0) {
				break;
			}
			data.add(amount); 	// 강수량 저장 
			printVector(data);  // 벡터에 저장된 모든 강수량 출력 메서드 호출~ 
			printAvg(data);		// 벡터에 저장된 강수량 평균 출력 메서드 호출~ 
			System.out.println();
		}//while
		
		System.out.println("프로그램 종료!");
		sc.close();
	}//main
	
	public static void printVector(Vector<Integer> vector) {
		for(int i = 0; i < vector.size(); i++) {
			System.out.print(vector.get(i) + " ");
		}
		System.out.println();
	}
	public static void printAvg(Vector<Integer> data) {
		int sum = 0; 
		for(int i = 0; i < data.size(); i++) {
			sum += data.get(i);
		}
		int avg = sum / data.size(); 
		System.out.println("현재 평균 : " + avg);
	}
}

 

package day16;

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

/*
	하나의 학생 정보를 나타내는 StudentClass에는 
	이름, 학과, 학번, 학점 평균을 저장하는 필드가 있다. 
	학생마다 StudentClass 객체를 생성하고 4명의 학생정보를 
	ArrayList<StudentClass> 컬렉션에 저장한 후에,
	ArrayList<StudentClass>의 모든 학생(4명) 정보를 출력하고 
	학생 이름을 입력받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하세요.
	실행예시:
		학생이름, 학과, 학번, 학점평균 입력하세요.
		>> 호크아이,모바일,1,4.1
		>> 데드풀,안드로이드,2,3.9
		>> 헐크,웹개발,3,3.5
		>> 아이언맨,빅데이터,4,4.25
		---------------------------
		이름:호크아이
		학과:모바일
		학번:1
		학점평균:4.1
		---------------------------
		이름:데드풀
		학과:안드로이드
		학번:2
		학점평균:3.9
		---------------------------
		이름:헐크
		학과:웹개발
		학번:3
		학점평균:3.5
		---------------------------
		이름:아이언맨
		학과:빅데이터
		학번:4
		학점평균:4.25
		---------------------------
		학생 이름 >> 아이언맨 
		아이언맨, 빅데이터, 4, 4.25
		학생 이름 >> 데드풀
		데드풀, 안드로이드, 2, 3.9
		학생 이름 >> 그만 
		프로그램 종료!
*/
class StudentClass {
	private String name; // 이름
	private String dept; // 학과 
	private String id;   // 학번
	private double grade; // 학점평균 
	StudentClass(String name, String dept, String id, double grade){
		this.name = name; this.dept = dept; this.id = id; this.grade = grade;
	}
	public String getName() { return name; }
	public void setName(String name) { this.name = name; }
	public String getDept() { return dept; }
	public void setDept(String dept) { this.dept = dept; }
	public String getId() { return id; }
	public void setId(String id) { this.id = id; }
	public double getGrade() { return grade; }
	public void setGrade(double grade) { this.grade = grade; }
}

public class Test08Ex {
	// 학생 정보 저장할 ArrayList 인스턴스로 만들어 모든 메서드에서 접근할 수 있게..
	ArrayList<StudentClass> list = new ArrayList<StudentClass>(); 
	Scanner sc = new Scanner(System.in);
	
	// 학생정보 저장 
	void setList() {
		System.out.println("학생이름, 학과, 학번, 학점평균 입력하세요.");
		for(int i = 0; i < 4; i++) {
			System.out.print(">> ");
			String data = sc.nextLine(); // 호크아이,모바일,1,4.1
			String[] splited = data.split(","); // 쉼표를 구분자로 분할하여 문자열배열로받기 
			String name = splited[0]; 
			String dept = splited[1]; 
			String id = splited[2]; 
			double grade = Double.parseDouble(splited[3]); // 꺼내서 형변환 
			list.add(new StudentClass(name, dept, id, grade)); 
		}
		System.out.println("---------------------------");
	}
	// 학생정보 출력 
	void printAll() {
		for(int i = 0; i < list.size(); i++) {
			StudentClass stu = list.get(i); 
			System.out.println("이름:" + stu.getName());
			System.out.println("학과:" + stu.getDept());
			System.out.println("학번:" + stu.getId());
			System.out.println("학점평균:" + stu.getGrade());
			System.out.println("---------------------------");
		}
	}
	// 학생 검색 
	void search() {
		while(true) {
			System.out.print("학생 이름 >> ");
			String input = sc.nextLine(); 
			if(input.equals("그만")) {
				break; 
			}
			// list에 저장된 정보에 모두 접근 
			for(int i = 0; i < list.size(); i++) {
				StudentClass stu = list.get(i);
				if(stu.getName().equals(input)) {
					System.out.print(stu.getName() + ", " + stu.getDept() + ", ");
					System.out.println(stu.getId() + ", " + stu.getGrade());
					break; // 먼저 찾으면 for문 끝까지 돌릴필요없이 for문 종료
				}
			}
		}
	}
	
	public void run() {
		setList(); 	// 학생정보 입력받아 저장해라~
		printAll(); // 전체 학생정보 출력해라~ 
		search();	// 학생 검색 하는 기능 실행해라~ 
	}
	
	public static void main(String[] args) {
		Test08Ex ex = new Test08Ex();
		ex.run();
		System.out.println("프로그램 종료!");
	}
}
package day16;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

/*
	Test08Ex문제를 ArrayList<StudentClass>대신 
	HashMap<String, StudentClass> 을 이용하여 다시 작성해보세요. 
	해쉬맵에서 키는 학생 이름으로 한다.
*/
public class Test09Ex {
	// ArrayList<StudentClass> 컬렉션에 저장
	// 학생 정보 저장할 HashMap 인스턴스로 만들어 모든 메서드에서 접근할 수 있게..
	HashMap<String, StudentClass> map = new HashMap<String, StudentClass>(); 
	Scanner sc = new Scanner(System.in);
	
	// 학생정보 저장 
	void setList() {
		System.out.println("학생이름, 학과, 학번, 학점평균 입력하세요.");
		for(int i = 0; i < 4; i++) {
			System.out.print(">> ");
			String data = sc.nextLine(); // 호크아이,모바일,1,4.1
			String[] splited = data.split(","); // 쉼표를 구분자로 분할하여 문자열배열로받기 
			String name = splited[0]; 
			String dept = splited[1]; 
			String id = splited[2]; 
			double grade = Double.parseDouble(splited[3]); // 꺼내서 형변환 
			//list.add(new StudentClass(name, dept, id, grade)); 
			map.put(name, new StudentClass(name, dept, id, grade));
		}
		System.out.println("---------------------------");
	}
	// 학생정보 출력 
	void printAll() {
		
		//Set<String> keys = map.keySet(); 
		//Iterator<String> it = keys.iterator(); // 키들만 뽑음 (이름들) 
		Iterator<String> it = map.keySet().iterator(); 
		while(it.hasNext()) {
			String key = it.next(); // 키값(학생이름) 하나 뽑고 
			StudentClass stu = map.get(key); // 키값주고 벨류값 뽑음 
			System.out.println("이름:" + stu.getName());
			System.out.println("학과:" + stu.getDept());
			System.out.println("학번:" + stu.getId());
			System.out.println("학점평균:" + stu.getGrade());
			System.out.println("---------------------------");
		}
	}
	// 학생 검색 
	void search() {
		while(true) {
			System.out.print("학생 이름 >> ");
			String input = sc.nextLine(); 
			if(input.equals("그만")) {
				break; 
			}
			StudentClass stu = map.get(input);
			if(stu == null) {
				System.out.println(input + " 학생은 없습니다.");
			}else {
				System.out.print(stu.getName() + ", ");
				System.out.print(stu.getDept() + ", ");
				System.out.print(stu.getId() + ", ");
				System.out.println(stu.getGrade());
			}
		}//while
	}// search()
	public void run() {
		setList(); 	// 학생정보 입력받아 저장해라~
		printAll(); // 전체 학생정보 출력해라~ 
		search();	// 학생 검색 하는 기능 실행해라~ 
	}
	public static void main(String[] args) {
		Test09Ex ex = new Test09Ex();
		ex.run();
	}
}
package day16;

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

/*
	이름과 학점(4.5만점)을 5개 입력받아 해쉬맵에 저장하고, 
	장학생 선발 기준을 입력받아 장학생 명단을 출력하세요.
	실해예시:
		자바장학금관리시스템입니다.
		이름과 학점 >> 호크아이 3.1
		이름과 학점 >> 블랙위도우 3.6
		이름과 학점 >> 토르 2.9
		이름과 학점 >> 데드풀 3.7
		이름과 학점 >> 아이언맨 4.3
		장학생 선발 학점 기준 입력 >> 3.2
		장학생 명단 : 블랙위도우 데드풀 아이언맨
*/
class Scholarship {
	private String title; 
	private HashMap<String, Double> map = new HashMap<String, Double>(); 
	private Scanner sc = new Scanner(System.in);
	
	Scholarship(String title) {
		this.title = title;
	}
	void insert() {
		System.out.println(title + "관리시스템입니다.");
		for(int i = 0; i < 5; i++) {
			System.out.print("이름과 학점 >> ");
			String[] txt = sc.nextLine().split(" "); 
			map.put(txt[0], Double.parseDouble(txt[1]));
		}
	}
	void select() {
		System.out.print("장학생 선발 학점 기준 입력 >> ");
		double cutline = Double.parseDouble(sc.nextLine());
		
		System.out.print("장학생 명단 : ");
		Iterator<String> it = map.keySet().iterator(); // 키들만 뽑아서 반복자 얻어오기(키들 일렬로 나열)
		while(it.hasNext()) {
			String name = it.next(); // 키하나 나옴
			double score = map.get(name); 
			if(score >= cutline) {
				System.out.print(name + " ");
			}
		}
		System.out.println();
	}
}

public class Test10Ex {
	public static void main(String[] args) {
		Scholarship sship = new Scholarship("자바장학금");
		sship.insert();
		sship.select();
	}
}
package day16;

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

/*
	나라와 수도 맞추기 게임을 만들어 보세요. 
	1) 나라이름(country)과 수도(capital)로 구성된 Nation클래스를 작성하고,
		ArrayList<Nation> 컬렉션을 이용하여 
		아래 실행 예시와 같이 작동되도록 프로그램을 작성하세요.
		
	실행예시:
		** 수도 맞추기 게임을 시작합니다 **
		입력:1, 퀴즈:2, 종료:3 >> 1 (사용자가 입력)
		
		현재 8개의 나라와 수도가 입력되어 있습니다. (input())
		나라와 수도 입력9>> 한국 서울
		나라와 수도 입력10>> 그리스 아테네
		그리스는 이미 있습니다!!
		나라와 수도 입력10>> 호주 시드니
		나라와 수도 입력11>> 이탈리아 로마
		나라와 수도 입력12>> 그만
		
		입력:1, 퀴즈:2, 종료:3 >> 2
		
		호수의 수도는? 시드니 (quiz())
		정답!!
		독일의 수도는? 하얼빈
		아닙니다!!
		멕시코의 수도는? 하얼빈
		아닙니다!!
		이탈리아의 수도는? 로마
		정답!!
		한국의 수도는? 서울
		정답!!
		영국의 수도는? 그만
		
		입력:1, 퀴즈:2, 종료:3 >> 3
		게임을 종료합니다.
*/
class Nation {
	private String country;
	private String capital;
	Nation(String country, String capital){
		this.country = country; this.capital = capital;
	}
	public String getCountry() {
		return country;
	}
	public String getCapital() {
		return capital;
	}
}
class CapitalGame {
	Scanner sc; 			//       0						1 .....
	ArrayList<Nation> list; // [N(멕시코, 멕시코시티), N(스페인, 마드리드)...]
	
	CapitalGame() {
		sc = new Scanner(System.in);
		list = new ArrayList<Nation>();
		// 나라 정보 초기값으로 미리 추가 
		list.add(new Nation("멕시코", "멕시코시티"));
		list.add(new Nation("스페인", "마드리드"));
		list.add(new Nation("프랑스", "파리"));
		list.add(new Nation("영국", "런던"));
		list.add(new Nation("이탈리아", "로마"));
		list.add(new Nation("그리스", "아테네"));
		list.add(new Nation("중국", "베이징"));
		list.add(new Nation("우크라이나", "키이우"));
	}// 생성자
	
	void input() {
		int n = list.size(); // 8
		System.out.println("현재 "+ n +"개의 나라와 수도가 입력되어 있습니다.");

		while(true) {
			n++; 
			System.out.print("나라와 수도 입력" + n + ">> ");
			String txt = sc.nextLine(); 
			if(txt.equals("그만")) {
				break; // while true 종료 
			}
			String[] split = txt.split(" ");
			String country = split[0]; // 나라이름 
			String capital = split[1]; // 수도 
			// 나라가 존재하는지 체크 -> 메서드 
			if(isExists(country)) { // true 리턴받았을 경우 
				// 있으면 예외 메세지 
				System.out.println(country + "는 이미 있습니다!");
				n--; 
			}else { // false 리턴받았을 경우 
				// 없으면 list에 Nation으로 객체 만들어 추가 
				list.add(new Nation(country, capital));
			}
		}// while
	}// input()
	private boolean isExists(String country) {
		boolean result = false; // 마지막에 리턴해줄 결과 변수 미리 선언 
		
		// 리스트 저장된 개수만큼 전체 돌면서 나라이름 같은지 결과 리턴  
		for(int i = 0; i < list.size(); i++) {
			Nation nation = list.get(i);
			String ctr = nation.getCountry(); // 이미 저장된 나라이름 하나 꺼냄 
			if(ctr.equals(country)) {
				result = true; 
				break; // 한번 걸리면 나머지는 안돌아도 ok 
			}
		}
		return result; // 최종 boolean변수에 남은 결과 리턴 
	}
	void quiz() {
		// 반복해서 문제내고 (그만을 입력할때까지) 
		while(true) {
			//	 문제는 랜덤으로 뽑아서 내보자 (중복 문제는 무시) 
			// 	 문제를 내려면 list에서 나라하나 뽑아야되고 -> list.get(인덱스);
			//		=> 인덱스 번호를 랜덤으로 하나 받아서 
			//			범위 : 0 ~ 마지막 방번호 (list.size()-1)
			int index = (int)(Math.random() * list.size()); // 0 ~ 9 = 10 0 ~ 5 = 6 
			Nation nation = list.get(index); // country=나라이름, capital=수도
			//	  ->나라 뽑은거에서 나라이름 검색해서 문제로 내고 
			String question = nation.getCountry(); 
			String answer = nation.getCapital(); 
			System.out.print(question + "의 수도는?"); // 문제 지문
			String capAsw = sc.nextLine(); // 정답받기 
			// 그만을 입력했는지 먼저 체크
			if(capAsw.equals("그만")) {
				break; // while문 종료! 
			}
			//	  ->나라 뽑은거와 수도이름이 같은지 체크 
			if(capAsw.equals(answer)) {
				// 맞으면 정답!! 
				System.out.println("정답!!");
			}else {
				// 틀리면 틀렸다고 출력 
				System.out.println("아닙니다!!!!!");
			}
		}
	}// quiz() 
	
	// main 대신 전체 프로그램을 돌려주는 메서드 
	void run() {
		System.out.println("** 수도 맞추기 게임을 시작합니다 **");
		while(true) {
			System.out.print("입력:1, 퀴즈:2, 종료:3 >> ");
			int menu = Integer.parseInt(sc.nextLine());
			if(menu == 1) { // 입력
				input(); 
			}else if(menu == 2) { // 퀴즈 
				quiz(); 
			}else if(menu == 3) {
				System.out.println("게임을 종료합니다.");
				sc.close();
				break;
			}else {
				System.out.println("메뉴 번호 오류... 다시 입력해보세요.");
			}			
		}//while
	}//run()
}

public class Test11Ex {
	public static void main(String[] args) {
		
		CapitalGame game = new CapitalGame();
		game.run();
		
	}
}
package day16;
/*
	나라와 수도 맞추기 게임을 만들어 보세요. 
	* Test11Ex문제를 HashMap<String, String>을 이용하여 작성하세요. 
	Key는 나라이름이고, Value는 수도입니다.
*/
public class Test12Ex {
	public static void main(String[] args) {
		/*
		CapitalGame game = new CapitalGame();
		game.run();
		*/
		int a = 10;
		boolean b = false;
		if ((b == false) || (++a == 10)) {
			System.out.println("Equal " + a);
		} else {
			System.out.println("Not equal! " + a);
		}
		

	}
}

+ Recent posts