저는 명품 Java Essential이라는 교재를 공부하고 있습니다. 학교 수업에서 사용하던겁니다.
이번 문제는 교재 연습문제 입니다.
저는 자바 개발도구로 이클립스를 사용합니다.
자바를 처음 접한 건 생활코딩 유튜브였고, 학교에서도 자바 수업을 들었는데 둘 다 이클립스를 이용하더라구요.
그래서 그냥 그대로 쓰고있습니다.
(제트브레인이 더 낫다고는 하는데 일단 익숙한 개발환경으로 공부하다가 갈아탈 생각입니다ㅎ)
요번에 알게된 꿀팁인데요. 이클립스 소스코드 자동 줄맞춤 단축키는 ctrl+shift+f입니다.
코드를 쭉 짜다가 이 부분엔 반복문을 넣어 반복시키고 싶다! 했을 때 아주아주 유용합니다.. 굿...
알아서 정렬되는 걸 보면 뭔가 뿌듯해집니다. 하나하나 줄 맞추는 스트레스도 줄일 수 있구요.
단축키 최고!
교수님들은 항상 main이 간결해야한다고 말하셨습니다. 그래서 최대한 main을 간결하게 만들어봤습니다.
함수는 public class 안에 4개를 만들었습니다.
static boolean AisWin(String A, String B) | A가 이겼는지 확인해주는 함수 |
static boolean draw(String A, String B) | 둘이 비겼는지 확인해주는 함수 |
static void result(String A, String B) | 누가 이겼는지 or 비겼는지 확인하고 출력하는 함수 |
static boolean restart(boolean go) | 다시 시작 유무를 확인하는 함수 |
코드는 다음과 같습니다.
import java.util.Scanner;
public class rockscissor {
static Scanner scanner = new Scanner(System.in);
일단 입력받아야하니까 스캐너객체를 만들어줬습니다. static붙여야 오류가 안나길래 일단 붙여줬습니다.
static boolean AisWin(String A, String B) {
if ((A.equals("가위") && B.equals("보")) || (A.equals("보") && B.equals("바위"))
|| (A.equals("바위") && B.equals("가위"))) {
return true;
}
return false;
}
매개변수 맨 앞에 애가 이겼는지 확인해주는 함수입니다. 만약 A가 이겼다면 출력값은 true
여기서 equals를 붙이는 이유는 ==연산자를 사용하면 값이 같아도 같은 레퍼런스를 가리키지 않는다면 false를 반환하기 때문입니다. 여기선 값이 같냐 확인해야하기 때문에 equals메소드를 이용하는 게 맞죠.
static boolean draw(String A, String B) {
if (A.equals(B))
return true;
return false;
}
비겼는지 확인하는 함수. 같으면 true 반환합니다.
static void result(String A, String B) {
if (draw(A, B))
System.out.println("비겼습니다.");
else if (AisWin(A, B))
System.out.println("철수가 이겼습니다.");
else
System.out.println("영희가 이겼습니다.");
}
비겼는지 혹은 누가 이겼는지 알려주는 함수입니다. A가 철수고 B는 영희입니다.
static boolean restart(boolean go) {
while (true) {
System.out.println("다시 하겠습니까?(0:종료, 1:다시)");
int going = scanner.nextInt();
if (going == 1 || going == 0) {
if (going == 1)
return true;
else {
return false;
}
}
}
}
다시 시작할지말지 확인하는 함수입니다. 저는 다시 시작을 설정하기 위해 go라는 boolean변수를 사용했는데요. go가 true이면 가위바위보 게임을 다시 시작합니다. 입력은 "다시시작" 이 네 글자를 적기 귀찮을 것 같아 int값을 받도록 설정해줬습니다. 잘못된 값을 입력한다면 whle문으로 다시 물어봅니다.
public static void main(String[] args) {
String chul;
String young;
boolean go = true;
while (go) {
System.out.print("가위 바위 보 게임. 입력: ");
System.out.print("철수 >> ");
chul = scanner.next();
System.out.print("영희 >> ");
young = scanner.next();
result(chul, young);
go = restart(go);
}
System.out.println("게임 종료");
scanner.close();
}
chul을 철수고 young은 영희입니다. 대충 지어봤습니다.
go는 다시시작 유무를 제어할 변수입니다.
철수와 영희의 입력값을 받고 result로 누가 이겼는지 판별한 다음 출력해줍니다. 그리고 restart함수로 다시시작할지 말지 결정한 뒤, go값에 넣어줍니다.
그리고 게임이 끝나면 끝났다고 출력해준 뒤, scanner를 닫아줍니다.
전체코드입니다.
import java.util.Scanner;
public class rockscissor {
static Scanner scanner = new Scanner(System.in);
static boolean AisWin(String A, String B) {
if ((A.equals("가위") && B.equals("보")) || (A.equals("보") && B.equals("바위"))
|| (A.equals("바위") && B.equals("가위"))) {
return true;
}
return false;
}
static boolean draw(String A, String B) {
if (A.equals(B))
return true;
return false;
}
static void result(String A, String B) {
if (draw(A, B))
System.out.println("비겼습니다.");
else if (AisWin(A, B))
System.out.println("철수가 이겼습니다.");
else
System.out.println("영희가 이겼습니다.");
}
static boolean restart(boolean go) {
while (true) {
System.out.println("다시 하겠습니까?(0:종료, 1:다시)");
int going = scanner.nextInt();
if (going == 1 || going == 0) {
if (going == 1)
return true;
else {
return false;
}
}
}
}
public static void main(String[] args) {
String chul;
String young;
boolean go = true;
while (go) {
System.out.print("가위 바위 보 게임. 입력: ");
System.out.print("철수 >> ");
chul = scanner.next();
System.out.print("영희 >> ");
young = scanner.next();
result(chul, young);
go = restart(go);
}
System.out.println("게임 종료");
scanner.close();
}
}
연습문제라서 대충 만든 느낌이 있는데, 조금 불편한 점이 있네요.
철수와 영희가 가위, 바위, 보가 아닌 다른 값을 넣었을 때 에러를 처리해주고 싶습니다.
교수님은 항상 사용자는 잘못된 값을 입력할 수 있다고 반복해서 말씀하셨습니다. 그만큼 에러처리는 중요하다는 뜻이겠죠.
하지만 저는 빠르게 훑어보는게 목표기 때문에 아쉬워도 넘어가야겠습니다ㅠㅠ 다음에 기회가 된다면 완벽한 가위바위보 게임을 만들고싶네요.
'프로그래밍 언어 > javastudy' 카테고리의 다른 글
명품 Java Essential 3단원 실습문제 (3) | 2021.07.07 |
---|---|
자바 공부 #5 up&down게임 (3) | 2021.07.05 |
자바 공부 #4 369게임, 커피 주문, 사칙 연산 (4) | 2021.07.05 |
자바 공부 #3 카페 주문하기 (0) | 2021.07.04 |
자바 공부 #2 지폐, 동전 개수 출력 프로그램(코드가 더러울 땐 구글링) (0) | 2021.07.04 |