Categories: Java 언어Korean

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

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

Recent Posts

Java 총정리[97. Java GUI]

Java GUI Java GUI에 대해서 이번 걸음에서 배움으로써 GUI에 전반적인 지식과 Java GUI를 구현하는 방법…

4개월 ago

Java 총정리[96. Java TCP 통신 프로그램 구현]

Java TCP 통신 프로그램 구현 Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한…

5개월 ago

Java 총정리[95.쓰레드 통신]

쓰레드 통신 이전 걸음에서 쓰레드의 임계영역에 대해서 같이 공부를 했습니다. 동기화에 대한 개념을 계속적으로 하고…

5개월 ago

Java 총 정리[94. 쓰레드 임계영역]

쓰레드 임계영역 이전 걸음에서 쓰레드의 동기화에 대해서 같이 공부를 했습니다. 동기화에 대한 전반적인 내용을 공부하고…

6개월 ago

Java 총 정리[93. 쓰레드 동기화]

쓰레드 동기화 이전 걸음에서 계속 쓰레드에 대해서 공부를 하고 있습니다. 쓰레드는 상당히 중요한 개념이기 때문에…

6개월 ago

Java 총 정리[92. 쓰레드 join()]

쓰레드 join() 이전 걸음에서 쓰레드의 전반적인 실행 흐름에 대해서 공부를 했습니다. 이제 배운 실행 흐름…

6개월 ago

This website uses cookies.