Categories: Java 언어Korean

Java 총 정리[22. 제어문 문제 5]

문제 풀기 5

별 찍기 문제는 잘 풀어 보셨나요? 차분히 반복문을 돌리고 조건문을 조합해서 정리를 하면서 만들었다면 분명히 문제 없이 완성을 하셨을 겁니다. 하지만 별 찍기 같은 문제는 프로그램의 완성도로 봐서는 부족한 문제 입니다. 그래서 완성도 있게 입력과 출력을 가지고 게임과 같은 요소가 있는 문제라면 더 좋지 않을 까요? 저도 당연히 별 찍기 문제도 좋지만 완성도를 가지는 문제가 해보는 것 또한 도움이 된다고 생각을 합니다.

이전 스물 걸음과 스물 한걸음에서 했던 별 찍기 문제는 알고리즘을 활용해서 했다면 이번 문제는 좀 더 완성도를 생각해서 프로그램 답게 만드는 문제가 될 것 입니다.

컴퓨터와 가위 바위 보 게임 프로그램을 만들어 보겠습니다. 이 가위 바위 보 게임 같은 경우에는 이전 배웠지만 활용을 한번도 하지 못한 Random을 사용하고 또한 반복문이나 조건문을 사용하여 문제에 제시된 내용과 일치 되게 문제를 푸시면 됩니다. 분명히 이 글을 보시고 문제를 풀어보고 공부를 하신다면 실력이 향상이 되실 겁니다.

가위 바위 보 문제

현재까지 배운 모든 내용을 사용을 해서 만드시면 됩니다. 

변수 | 연산자 | 입력문 | 출력문 | 조건문 | 반복문 | break문 | continue문 |  Random 

위에 배운 내용을 모두 활용 하여 구현을 하시면 됩니다.

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

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

위 문제를 설명 드리겠습니다.

우선 첫 번째는 게임 시작과 종료를 숫자로 선택을 해서 게임을 진행하거나 종료를 합니다. 그 이외 값을 입력을 하면 “잘못된 입력입니다.” 출력 후 다시 게임 시작과 종료로 돌아갑니다.

게임을 시작을 하면 1. 가위 2.바위 3.보 중에 숫자를 하나를 사용자가 선택을 하게 됩니다. 그 때 컴퓨터는 Random을 이용하여 1~3까지 난수를 받아서 가지고 있습니다. 만약에 사용자가 1~3의 숫자를 입력을 하지 않고 다른 숫자를 입력하면 “잘못된 입력입니다.” 출력 후 게임 시작과 종료가 나오는 곳으로 돌아갑니다. 

사용자가 올바르게 입력을 한 경우 컴퓨터의 값과 사용자의 값을 가지고 가위 바위 보를 진행하여서 누가 이겼는지 출력을 해주면 됩니다. 숫자와 가위 바위 보 연결을 한 부분은 위 문제에 잘 나와 있으니 참고 해주세요.

출력이 끝나고 나면 다시 게임 시작과 종료 화면이 나오게 합니다. 이 가위 바위 보 게임은 종료를 하기 전 까지는 계속 동작이 되게 구현을 하시면 됩니다.

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

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

참고해주세요.


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

public class Q5 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
Random r= new Random(); // 랜덤을 사용하기 위한 객체를 생성

while(true) { //무한 반복
 System.out.print("1.게임시작 2.종료 : "); //출력
 int num = sc.nextInt(); // 입력
 if(num == 1) { //num의 정수 변수가 1이면 실행
  System.out.print("1.가위 2.바위 3.보 : ");
  int user = sc.nextInt(); // 입력
  int com = r.nextInt(3)+1; // 1~3까지 랜덤 값 받기
  // user 2 - com 1 - user 1
  // user 1 - com 3 - user -2
  // user 3 - com 2 - user 1
  if(user > 0 && user < 4) { // user 값이 1~3이면 실행
   int result = user - com;
   if(result == 1 || result == -2) {
    System.out.println("user승  user : "+user+
    ", com :"+com);
   }
   else if(result == 0) {
    System.out.println("무승부  user : "+user+
    ", com : "+com);
   }
   else {
    System.out.println("com승  user : "+user+
    ", com : "+com);
   }
  }
  else { //위 if 조건이 거짓이면 실행
   System.out.println("잘못된 입력입니다.");
  }
 }
 else if(num == 2) { // num 정수 변수 값이 2이면 싱행
  System.out.println("프로그램을 종료합니다.");// 출력
  break;//반복문 탈출
 }
 else { // num 정수 변수 값이 1,2가 아니면 실행
 System.out.println("잘못된 입력입니다."); //출력
 }
     }
   }
}

        

생각을 해보기

위의 문제 같은 경우 조건문으로 가위 바위 보를 다 비교를 할 수 있지만 연산을 이용해서 이기는 경우와 지는 경우의 변수를 만들어서 그 변수로 분기를 한다면 좀 더 소스가 간결해 질 수 있습니다. 그리고 이렇게 완성된 프로그램을 만듦으로써 큰 구조에 대한 이해를 하시면 도움이 됩니다.

※ 구조를 만들고 안에 채워 넣는 방식으로 한다면 생각을 하는 부분이 작아지기 때문에 구조를 만들고 안의 기능을 만드는 식을 추천 드립니다.

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.