38-java - 메소드 문제들

jin·2022년 7월 30일
0

1. OMR 카드 클래스 + 메서드

  1. 배열 answer는 시험문제의 정답지이다.
  2. 배열 hgd에 1~5 사이의 랜덤 숫자 5개를 저장한다.
  3. answer와 hgd 값을 비교해 정오표를 출력한다.
  4. 한 문제당 20점이다.
    예)
    answer = {1, 3, 4, 2, 5}
    hgd = {1, 1, 4, 4, 3}
    정오표 = {O, X, O, X, X}
    성적 = 40점
 class Omr {
	int[] answer = {1, 3, 4, 2, 5};
	char[] errata = new char[answer.length];
	int score = 0;
	
	void getHgd (int[] arr) {
		Random rnd = new Random();
		for (int i = 0; i < arr.length; i++) {
			int rNum = rnd.nextInt(5)+1;
			arr[i] = rNum;
		}
	}
	
	void getErrata (int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == answer[i]) {
				errata[i] = 'O';
			} else {
				errata[i] = 'X';
			}
		}
	}
	
	void getScore () {
		for (int i = 0; i < errata.length; i++) {
			if (errata[i] == 'O') {
				score += 20;
			}
		}
	}
	
	void printInfo(int[] arr) {
		System.out.println("answer : " + Arrays.toString(answer));
		System.out.println("hgd : " + Arrays.toString(arr));
		System.out.println("정오표 : " + Arrays.toString(errata));
		System.out.println("점수 : " + score);
	}
	
}

public class H1_메서드1_알고리즘_OMR_문제 {
	public static void main(String[] args) {
		int[] hgd = new int[5];
		
		Omr omr = new Omr();
		
		omr.getHgd(hgd);
		omr.getErrata(hgd);
		omr.getScore();
		omr.printInfo(hgd);
		
	}
}

기존의 문제들 메소드 ver

2. 숫자 이동하기 : 클래스 + 메서드

  1. 숫자 8은 캐릭터이다.
  2. 숫자 1을 입력하면, 캐릭터가 왼쪽으로 이동한다.
  3. 숫자 2를 입력하면, 캐릭터가 오른쪽으로이동한다.
  4. 좌우 끝에 도달했을 때 에러가 발생하지 않도록 예외처리를 해준다.
class NumberGame{
	
	Scanner sc = new Scanner(System.in);

	int[] move = {0, 0, 0, 0, 8, 0, 0, 0, 0, 0};
	int player = 4;
	
	void setMenu () {
		System.out.println("[1]왼쪽이동 [2]오른쪽이동 [0]종료");
	}
	
	void getPoint () {
		for (int i = 0; i < move.length; i++) {
			if (move[i] == 8) {
				player = i;
				break;
			}
		}
	}
	
	void printMap () {
		System.out.print("[MAP]\n[");
		for (int i: move) { System.out.printf(" %d ", i); }
		System.out.println("] \n");
	}
	
	void getMoveLeft (int left) {
		if (player == 0) {
			System.out.println("왼쪽 끝 도달 \n이동 불가");
		} else {
			move[player] = 0;
			player --;
			move[player] = 8;
			System.out.println("왼쪽 이동");
		}
	}
	
	void getMoveRight (int right) {
		if (player == move.length-1) {
			System.out.println("오른쪽 끝 도달 \n이동 불가");
		} else {
			move[player] = 0;
			player ++;
			move[player] = 8;
			System.out.println("오른쪽 이동");
		}
	}
	
	void run() {
		while (true) {
			printMap();
			setMenu();
			int sel = sc.nextInt();
			if (sel == 0) { break; } 
			else if (sel == 1) { getMoveLeft(sel); } 
			else if (sel == 2) { getMoveRight(sel); }
		}
	}
}

public class H1_메서드1_프로젝트_숫자이동_문제 {
	public static void main(String[] args) {
		NumberGame game = new NumberGame();
		game.run();
	}
}

메서드 파트로 넘어와서 메인 메소드에서는 실행만 가능하게 되었다.

3. 기억력 게임 : 클래스 + 메서드

  1. front 배열 카드 10장을 섞는다.
  2. front 배열에서 같은 카드를 골라 카드의 위치를 입력한다.
  3. 선택한 2장의 카드가 같은 카드이면, back 배열에 표시한다.
  4. 모든 카드가 뒤집히면(back배열의 0이 사라지면) 게임은 종료된다.
class MemoryGame {
	Scanner sc = new Scanner(System.in);
	Random rnd = new Random();
	
	int size= 10;
	int[] front = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5};
	int[] back = new int[10];
	
	int cnt = 0;		// 정답을 맞춘 횟수
	
	void setSuffleCard () {
		for (int i = 0; i < 1000; i++) {
			int r1 = rnd.nextInt(size);
			int temp = front[0];
			front[0] = front[r1];
			front[r1] = temp;
		}
	}
	
	void printFrontCard() {
		System.out.print("[");
		for (int i = 0; i < size; i++) { System.out.printf("%d ", front[i]); }
		System.out.print("]\n");
	}
	void printBackCard() {
		System.out.print("[");
		for (int i = 0; i < size; i++) { System.out.printf("%d ", back[i]); }
		System.out.print("]\n\n");
	}
	
	boolean checkedCard(int first, int second) {
		boolean flag = false;
		if (first == second) { flag = true; }
		if (front[first] != front[second]) { flag = true; }
		if (back[first] != 0 || back[second] != 0) { flag = true; };
		if ( (first < 0 && first >= size) && (second < 0 && first >= size) ) { flag = true; }
		
		return flag;
	}
	
	boolean changeCard(int first, int second) {
		boolean flag = checkedCard(first, second);
		if (flag == true) {
			System.out.println("다시 입력");
		} else {
			back[first] = front[first];
			back[second] = front[second];
			cnt++;
		}
		
		return flag;
	}
	
	boolean exitGame() {
		boolean run = true; 
		if (cnt == size/2) { run = false; }
		
		return run;
	}
	
	void printMsg () {
		String msg = "게임 종료";
		System.out.println(msg);
	}
	
	boolean run() {
		boolean run;
		setSuffleCard();
		while (true) {
			run = exitGame();
			if (run == false ) { return run; }
			printFrontCard();
			printBackCard();
			System.out.println("첫번째 카드 선택");
			int first = sc.nextInt();
			System.out.println("두번째 카드 선택");
			int second = sc.nextInt();
			changeCard(first, second);
		}
		
	}
}
public class H3_메서드리턴1_알고리즘_기억력게임_정답 {
	public static void main(String[] args) {
		MemoryGame mg = new MemoryGame();
		mg.run();
		mg.printMsg();
		
	}
}

0개의 댓글