메소드 문제 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