-
쉽게 배우는 자바 프로그래밍 2판 3장 프로그래밍 문제 2탄JAVA/연습문제 2022. 10. 5. 12:04반응형
# 개발 공부하는 초보자가 작성한 답안이니 정답이 아닐 수 있습니다!!!
6. 철수와 영희가 가위(s), 바위(r), 보(p) 게임을 한다. 다음 실행 결과와 같이 r, p, s 중 하나를 입력해 승자 또는 무승부를 출력하는 프로그램을 작성하라.
6번 결과값 예제 철수 : r 영희 : s 철수, 승!6번 정답 public static void main(String[] args) { String RspGameInput = "", RspGameInput2 = ""; Scanner GameInput = new Scanner(System.in); boolean goodChoice, goodChoice2, goodChoice3; do { System.out.println("r 혹은 s 혹은 p 중 하나를 입력해 주세요"); System.out.print("철수 : "); RspGameInput = GameInput.next(); // 철수값 입력받음 System.out.print("영희 : "); RspGameInput2 = GameInput.next(); // 영희값 입력받음 goodChoice = RspGameInput.equals("r") || RspGameInput.equals("s") || RspGameInput.equals("p"); goodChoice2 = RspGameInput2.equals("r") || RspGameInput2.equals("s") || RspGameInput2.equals("p"); goodChoice3 = (goodChoice && goodChoice2) ? true : false; // 입력한 값이 r,s,p이면 true, 아니면 false } while (goodChoice3 == false); // 조건식이 틀릴 때까지 반복하므로 true 일 때만 반복해제 if (RspGameInput.equals(RspGameInput2)) { // 철수값과 영희값이 동일하다면 무승부 System.out.println("무승부"); } else { if (RspGameInput.equals("r")) { // 철수값이 r이면 실행 if (RspGameInput2.equals("s")) { // 영희값이 s이면 철수 승 출력 System.out.println("철수, 승!"); } else System.out.println("영희, 승!"); // 영희값이 s가 아니면 p밖에 없으니 영희 승 출력 } else if (RspGameInput.equals("s")) { // 철수값이 s이면 실행 if (RspGameInput2.equals("p")) { // 영희값이 p이면 철수 승 출력 System.out.println("철수, 승!"); } else System.out.println("영희, 승!"); // 영희값이 p가 아니면 s밖에 없으니 영희 승 출력 } else { // 철수값이 무조건 p if (RspGameInput2.equals("r")) { // 영희값이 r이면 철수 승 출력 System.out.println("철수, 승!"); } else System.out.println("영희, 승!"); // 영희값이 r이 아니면 s밖에 없으니 영희 승 출력 } } GameInput.close(); } }7. 6에서 프롬프트와 r, p, s를 입력하는 부분, 입력된 데이터에 따라 승자를 출력하는 부분을 각각 메서드로 작성하라. main() 메서드는 다음과 같다.
7번 주어진 main() 메서드 public static void main(String[] args) { // void는 값을 반환하지 못하고 읽을 수만 있는 메서드 String c = input("철수"); // input 메서드에 값이 문자열 철수일 때 클래스 문자열 타입인 c에 값 저장 String y = input("영희"); // input 메서드에 값이 문자열 영희일 때 클래스 문자열 타입인 y에 값 저장 whosWin(c, y); // whosWin이라는 메서드에 문자열 c의 값과 문자열 y에 값을 선언 }7번 정답 static String input(String rsp) { // 값을 반환 시 반환받는 곳이 문자열 타입이므로 input 메서드도 String으로 선언 Scanner ChulYoung = new Scanner(System.in); String TurnGab = ""; // 값은 반환하기 위한 문자열 값 선언 if (rsp.equals("철수")) { // main 메서드에서 input 메서드에 "철수"라는 문자열일 경우를 가정 System.out.print("철수 : "); String ChulInput = ChulYoung.next(); // ChulInput이라는 곳에 문자열 값을 입력받는다. TurnGab = ChulInput; } else { // main 메서드에서 input 메서드에 "철수"라는 문자열이 아닐 경우 System.out.print("영희 : "); String YoungInput = ChulYoung.next(); // YoungInput이라는 곳에 문자열 값을 입력받는다. TurnGab = YoungInput; } return TurnGab; } static void whosWin(String Inputc, String Inputy) { // main 메서드에 c와 y의 값을 읽기 위해 선언 if (Inputc.equals(Inputy)) { // main 메서드에 c의 값과 y같이 같을 경우 System.out.println("무승부"); } else if (Inputc.equals("r")) { // main 메서드에 c의 값이 "r"일 경우 if (Inputy.equals("s")) { System.out.println("철수, 승!"); } else { System.out.println("영희, 승!"); } } else if (Inputc.equals("s")) { if (Inputy.equals("p")) { System.out.println("철수, 승!"); } else { System.out.println("영희, 승!"); } } else { if (Inputy.equals("r")) { System.out.println("철수, 승!"); } else { System.out.println("영희, 승!"); } } }8. 다음과 같은 프로그램이 있다 factorial() 메서드를 화살표 case 레이블을 가진 switch문으로 작성하라.
8번 제시된 프로그램 public static void main(String[] args) { System.out.println(factorial(5)); } static int factorial(int n) { // 코드 작성하여라 } }8번 정답 static int factorial(int n) { return switch (n) { case 1 -> 1; default -> n * factorial(n - 1); // 재귀함수를 이용해서 1이 될 때까지 반복한다. }; }9. 다음은 foo() 메서드가 빠진 프로그램 일부와 실행 결과이다. foo() 메서드를 완성하라
9번 문제 // 문제에서 main 메소드가 주어짐 // 메서드 사용시 메서드 이름이 동일하더라도 매개변수 개수, 데이터 타입, 순서 중 하나라도 다르면 서로 다른 메서드로 취급 public static void main(String[] args) { foo("안녕", 1); foo("안녕하세요", 1, 2); foo("잘 있어"); } 출력부분 안녕 1 안녕하세요 1 2 잘 있어9번 정답 private static void foo(String Gab1, int su1) { System.out.printf("%s %d\n", Gab1, su1); } public static void foo(String Gab2, int su2, int su21){ System.out.printf("%s %d %d\n", Gab2, su2, su21); } private static void foo(String Gab3) { System.out.println(Gab3); } }10. 다음은 주어진 정수가 소수인지를 조사하는 프로그램의 일부이다. isPrime() 메서드를 완성하라. 여기서 소수는 1보다 크면서 1과 자신 외에는 나누지 않는 수이다.
10번 문제 // 문제 1과 자신 외에는 나누지 않는 수이면서 그 값이 1보다 큰 소수인지 판단 // main 메서드가 문제에서 주어짐 public static void main(String[] args) { System.out.print("양의 정수를 입력하세요 : "); int num = new Scanner(System.in).nextInt(); if (isPrime(num)) System.out.println(num + "는 소수입니다."); else System.out.println(num + "는 소수가 아닙니다."); }10번 정답 public static boolean isPrime(int inputGab){ // 반환 받는 곳이 if 즉 true와 false로 구성되어야 하기에 boolean으로 선언 boolean temp = true; if (inputGab>1 && (inputGab%2==1) && (inputGab%3!=0)) { // 2로 나누었을 때 나머지가 1이거나 3으로 나누었을 때 0이 아니면 소수이다. temp = true; } else { temp = false; } return temp; } }
코드안에 주석처리로 설명부분을 적었는데 가독성부분에 있어서 코드안이 아닌 밖에 설명을 쓰는 것이 좋은지 여러분들에게 의견을 구해봅니다.

읽어주셔서 감사합니다람쥐
반응형'JAVA > 연습문제' 카테고리의 다른 글
쉽게 배우는 자바 프로그래밍 2판 4장 연습문제 (1) 2022.10.07 쉽게 배우는 자바 프로그래밍 2판 4장 도전문제 (2) 2022.10.06 쉽게 배우는 자바 프로그래밍 2판 3장 프로그래밍 문제 (0) 2022.10.05 쉽게 배우는 자바 프로그래밍 2판 3장 연습문제 2탄 (3) 2022.10.04 쉽게 배우는 자바 프로그래밍 2판 3장 연습문제 (0) 2022.10.04