foxpacking

Programming Lessons

Java 언어 Korean

Java 총 정리[40. 메소드 문제 3]

메소드 문제 3

이전 걸음에서 Call by Value와 Call by Refernce를 배웠습니다. 그러면 일반적인 메소드 또는 함수와 비슷한 Call by Value만이 아니라 Call by Reference를 적용한 문제를 풀어 봐야 하지 않을 까요? 당연히 저 또한 메소드를 잘 활용하고 사용을 하려면 여러 가지 개념을 자유롭게 사용을 할 수 있도록 하는 문제를 풀어봐야 한다고 생각을 합니다.

메소드 문제를 푸는 연습을 할 때는 최대한 메소드를 어떻게 나눌 수 있을까 생각을 하고 문제를 푸신다면 메소드에 대한 이해가 높아지고 실력이 향상이 될 수 있습니다. 이전 걸음에서 배운 Call by Value와 Call by Reference를 생각 하면서 만든다면 이 문제는 많은 도움이 되실 수 있습니다. 어떤 문제인지 한번 확인을 해보겠습니다.

메소드 숫자 야구 게임을 문제로 풀어보겠습니다. 숫자 야구 게임은 이전에 배열에서 문제로 풀어봤던 문제 입니다. 문제의 내용은 벌써 잘 아시겠지만 설명을 드리고 메소드화를 진행하여 동작이 되도록 구현을 하시면 됩니다. 먼저 문제를 풀어보시고 정답 소스와 설명을 보신다면 좀 더 도움이 되실 수 있습니다.

메소드 숫자 야구 게임 만들기

변수숫자야구게임문제1 사진
변수숫자야구게임문제2 사진
메소드숫자야구문제 사진

동작은 이전에 문제를 풀었던 숫자 야구 게임과 같이 진행을 하시면 됩니다. 하지만 메소드를 만들어서 기능으로 최대한 나누어서 만드시면 됩니다. 그리고 배열을 좀 더 유동적이고 자유롭게 만드신다면 좀 더 좋은 소스와 실력이 향상이 되시는데 도움이 되실 수 있습니다.

※ 메소드 연습을 위해서 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

Dolphin

About Author

Leave a comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You may also like

Korean Programming 기초

IT 개발자 VS 프로축구선수 비교?

IT 개발자와 프로축구선수의 같은 점과 다른 점? 프로그래밍 공부를 하시면서 개발자로 취업을 하려고 하는데 과연 취업을 할 수 있을까? IT
Korean 클라우드

AWS 로그인 불가능, AWS고객 센터 이메일 문의 결과는?

AWS 고객센터 이메일 문의 솔직후기 AWS를 사용하기 위해 로그인을 하는 경우 이메일로 코드 번호를 보내지만 이메일로 받을 수 없는 상황이거나