메소드 문제 3
이전 걸음에서 Call by Value와 Call by Refernce를 배웠습니다. 그러면 일반적인 메소드 또는 함수와 비슷한 Call by Value만이 아니라 Call by Reference를 적용한 문제를 풀어 봐야 하지 않을 까요? 당연히 저 또한 메소드를 잘 활용하고 사용을 하려면 여러 가지 개념을 자유롭게 사용을 할 수 있도록 하는 문제를 풀어봐야 한다고 생각을 합니다.
메소드 문제를 푸는 연습을 할 때는 최대한 메소드를 어떻게 나눌 수 있을까 생각을 하고 문제를 푸신다면 메소드에 대한 이해가 높아지고 실력이 향상이 될 수 있습니다. 이전 걸음에서 배운 Call by Value와 Call by Reference를 생각 하면서 만든다면 이 문제는 많은 도움이 되실 수 있습니다. 어떤 문제인지 한번 확인을 해보겠습니다.
메소드 숫자 야구 게임을 문제로 풀어보겠습니다. 숫자 야구 게임은 이전에 배열에서 문제로 풀어봤던 문제 입니다. 문제의 내용은 벌써 잘 아시겠지만 설명을 드리고 메소드화를 진행하여 동작이 되도록 구현을 하시면 됩니다. 먼저 문제를 풀어보시고 정답 소스와 설명을 보신다면 좀 더 도움이 되실 수 있습니다.
메소드 숫자 야구 게임 만들기
													
													
													동작은 이전에 문제를 풀었던 숫자 야구 게임과 같이 진행을 하시면 됩니다. 하지만 메소드를 만들어서 기능으로 최대한 나누어서 만드시면 됩니다. 그리고 배열을 좀 더 유동적이고 자유롭게 만드신다면 좀 더 좋은 소스와 실력이 향상이 되시는데 도움이 되실 수 있습니다.
※ 메소드 연습을 위해서 static이라는 명령어를 사용하여 메소드를 바로 메모리에 올려 사용을 할 수 있게 문제를 풀어줍니다.
위 문제를 Class를 생성하고 Main문에 소스를 구현해 주세요.
실행 관련 걸음 : 다섯 걸음, 여섯걸음
참고해주세요.
또한 문제에서 나오는 메소드 6개도 main메소드 위에 만들어야 합니다.
          
          
          
          
import java.util.Random;
import java.util.Scanner;
public class Q3 {
	static void makeRandom(int[] com,Random r) {
		for(int i = 0;i<com.length;i++) {
			com[i] = r.nextInt(9)+1;
			for(int j =0;j<i;j++) {
				if(com[i] == com[j]) {
					i--;
					break;
				}
			}
		}
		
		System.out.println(com[0]+","+com[1]+","+com[2]);
		
	}
	
	static int[] userInput() {
		Scanner sc = new Scanner(System.in);
		int[] user = new int[3];
	
		for(int i = 0;i<user.length;i++) {
			System.out.print((i+1)+"번째 숫자 : ");
			user[i] = sc.nextInt();
			//범위 1~9아닌경우
			if(user[i]<1 || user[i] > 9) {
				System.out.println("잘못된 입력입니다.");
				i--;
				continue;
			}
			for(int j = 0;j<i;j++) {
			  if(user[i] == user[j]) {
				System.out.println("잘못된 입력입니다.");
					i--;
					break;
				}
			}
		}
		
		return user;
	}
	
	static int[] strikeBallCheck(int[] user, int[] com) {
		int[] result = new int[2];
		for(int i = 0;i<user.length;i++) {
			for(int j = 0;j<com.length;j++) {
				if(user[i] == com[j]) {
					if(i == j) {
						result[0]++;
					}
					else {
						result[1]++;
					}
				}
			}
		}
		return result;
	}
	
	static String strikeBallPrint(int[] result) {
		if(result[0] == 0 && result[1] == 0) {
			System.out.println("Out입니다.");
		}
		else if(result[0] == 3) {
			System.out.println("홈런입니다.");
			return "종료";
		}
		else {
		   System.out.println("strike : "+result[0]+
		   ", ball : "+result[1]);
		}
		
		return "반복";
	}
	
	static void start() {
		Random r = new Random();
		int[] com = new int[3];
		makeRandom(com, r);
		
		while(true) {
		  String str=
		  strikeBallPrint(strikeBallCheck(
			userInput(), com));
			if(str.equals("종료")) {
				break;
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		start();
	}
}
        
      생각을 해보기
이전 문제를 활용하여 메소드에서 배열의 이동을 어떻게 하면 좋을 지 생각을 해보고 문제를 푸는 것입니다. 모든 문제를 만들어 푸실 때 꼭 완성도가 있게 프로그램을 구현을 하셔야 합니다. 효율적이지 않아도 끝까지 풀어보시면 분명히 도움이 되실 수 있습니다.
※ 참고로 이 문제를 메소드에서 배열을 어떻게 이동을 하면 되는지 생각을 하시면 좋습니다.
함께 보면 좋은 글
§ Java 첫 걸음 변수와 자료형§ Java 두 걸음 연산자
§ Java 세 걸음 형 변환
§ Java 네 걸음 Eclipse 설치
§ Java 다섯 걸음 Eclipse 개발 준비
§ Java 여섯 걸음 출력
§ Java 일곱 걸음 출력
§ Java 여덟 걸음 문제 풀기 1
§ Java 아홉 걸음 한글 깨짐
§ Java 열 걸음 제어문
§ Java 열 한걸음 if문
§ Java 열 두걸음 switch문
§ Java 열 세걸음 while문
§ Java 열 네걸음 for문
§ Java 열 다섯걸음 중첩 및 주의 사항
§ Java 열 여섯걸음 문제 1
§ Java 열 일곱걸음 문제 2
§ Java 열 여덟걸음 break continue
§ Java 열 아홉걸음 random
§ Java 스물 걸음 별 찍기 1
§ Java 스물 한걸음 별 찍기 2
§ Java 스물 두걸음 가위 바위 보 게임
§ Java 스물 세걸음 배열
§ Java 스물 네걸음 배열 활용
§ Java 스물 다섯걸음 Rando 활용 문제
§ Java 스물 여섯걸음 숫자 야구 게임
§ Java 스물 일곱 걸음 배열 숫자 야구 게임
§ Java 스물 여덟 걸음 다차원 배열
§ Java 스물 아홉 걸음 다차원 배열 심화
§ Java 서른 걸음 다차원 배열 문제
§ Java 서른 한 걸음 가변 배열
§ Java 서른 두 걸음 메소드(함수)
§ Java 서른 세 걸음 메소드형태
§ Java 서른 네 걸음 메소드 기초활용
§ Java 서른 다섯 걸음 메소드 문제1
§ Java 서른 여섯 걸음 메소드 구조 및 활용
§ Java 서른 일곱 걸음 메소드문제 2
§ Java 서른 여덟 걸음 Call by Value
§ Java 서른 아홉 걸음 Call by Reference
