Java 총 정리[27. 배열 Random 문제]

문제 풀기 8

스물 일곱걸음에서 변수로 숫자 야구 게임을 만들어 봤습니다. 이제 변수를 사용을 한 것을 배열을 통해서 구현을 해는 것이 필요하겠죠? 당연히 저 또한 숫자 야구 게임을 좀 더 간결한 구조를 통해서 만들어 보면 좋을 것이라고 생각을 하고 있습니다.

Com의 랜덤 값을 받는 변수랑 User에 입력을 받는 변수를 배열을 통해서 구현을 할 수 있도록 해봐야 합니다. 입력에 대한 방법이 변경되거나 랜덤값을 만드는 부분도 배열에 의해서 수정되고 좀 더 간결한 소스가 될 수 있습니다. 이 글을 읽으신다면 배열의 좋은 점을 알 수가 있습니다.

배열 숫자 야구 게임입니다. 게임에 대한 설명은 이전 문제에서 많이 들였기 때문에 이전 걸음을 꼭 보고서 오신다면 문제가 없을 것입니다. 중복이 되지 않는 랜덤값을 배열 변수에 넣어주고 3개의 중복이 되지 않는 입력을 배열 변수에 넣어주고 전체적인 게임이 배열에 의해서 소스가 달리 집니다. 이 글을 통해서 변수에서 배열로 달라지면 좋은 점이 무엇인지 확인을 하시면 좋을 것 같습니다.

배열 숫자 야구 게임

1~9까지 랜덤하게 숫자를 배열에 대입하는 정답을 활용하여 문제를 더 확장을 한 것입니다. 그리고 User가 입력을 배열에 저장하고 모두 맞출 때까지 계속 반복이 진행이 되는 게임입니다.

게임을 만들고 확인을 하면서 문제에서 제시한 내용이 올바르게 진행이 되어서 문제 없는 피드백과 잘못된 입력에 대한 예외 처리 그리고 종료가 올바르게 진행이 되는 부분을 꼭 확인해 주세요.

※ 정답은 하나가 아닙니다. 문제의 대한 결과가 동작을 한다면 정답입니다. 밑에 나오는 정답은 참고를 하시면 됩니다.

※ 결과에 대한 테스트를 예시로만 하는 것보다 여러가지를 하셔서 생각하는 결과로 나오는 확인을 하시는 것이 더욱 더 좋습니다.

위 문제는 스물 여섯걸음과 같습니다.

랜덤하게 받은 3개의 숫자(배열)와 User가 입력한 3개의 숫자(배열)를 비교하여 strike와 ball로 표현을 해서 모두 맞추면 게임이 종료되는 프로그램을 만들면 됩니다.자세한 내용은 위에 문제를 확인을 하시면 됩니다.

※ 여러 확인을 통해 원하는 결과가 확인을 여러 번을 하셔야 합니다.

위 문제를 Class를 생성하고 Main문에 소스를 구현해 주세요.

실행 관련 걸음 : 다섯 걸음, 여섯걸음

참고해주세요.





import java.util.Random;
import java.util.Scanner;

public class Q8 {


 public static void main(String[] args) {
  // TODO Auto-generated method stub
  // TODO Auto-generated method stub
  Random r = new Random();
  Scanner sc = new Scanner(System.in);
  
  int[] com = new int[3];
  
  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]);
  
  int[] user = new int[3];
  
  while(true) {
   
   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;
     }
    }
   }
   
   int strike = 0;
   int ball = 0;
   
   for(int i = 0;i<user.length;i++) {
    for(int j = 0;j<com.length;j++) {
     if(user[i] == com[j]) {
      if(i == j) {
       strike++;
      }
      else {
       ball++;
      }
     }
    }
   }
   
   if(strike == 0 && ball == 0) {
    System.out.println("Out입니다.");
   }
   else if(strike == 3) {
    System.out.println("홈런입니다.");
    break;
   }
   else {
    System.out.println("strike : "+strike+", 
    ball : "+ball);
   }
   
  }
 }
}


        

생각을 해보기

이전 문제를 활용하여 배열을 사용해서 똑같은 문제를 푸는 것입니다. 모든 문제를 만들어 푸실 때 꼭 완성도가 있게 프로그램을 구현을 하셔야 합니다. 그래서 이번 문제는 그 문제에 일치를 한다고 생각을 합니다. 효율적이지 않아도 끝까지 풀어보시면 분명히 도움이 되실 수 있습니다.

※ 참고로 이 문제를 배열로 하면 어떻게 구현을 하면 되는지 생각을 하시면 좋습니다.

Dolphin

Recent Posts

Java 총정리[97. Java GUI]

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

7개월 ago

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

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

7개월 ago

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

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

7개월 ago

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

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

8개월 ago

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

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

8개월 ago

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

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

8개월 ago

This website uses cookies.