문제 풀기 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("잘못된 입력입니다."); //출력
}
}
}
}
생각을 해보기
위의 문제 같은 경우 조건문으로 가위 바위 보를 다 비교를 할 수 있지만 연산을 이용해서 이기는 경우와 지는 경우의 변수를 만들어서 그 변수로 분기를 한다면 좀 더 소스가 간결해 질 수 있습니다. 그리고 이렇게 완성된 프로그램을 만듦으로써 큰 구조에 대한 이해를 하시면 도움이 됩니다.
※ 구조를 만들고 안에 채워 넣는 방식으로 한다면 생각을 하는 부분이 작아지기 때문에 구조를 만들고 안의 기능을 만드는 식을 추천 드립니다.
함께 보면 좋은 글
§ 논리적 사고란?§ 자바 설치하는 방법은?
§ 변수란 무엇일까?
§ 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