ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쉽게 배우는 자바 프로그래밍 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;
        }
    }

     

    코드안에 주석처리로 설명부분을 적었는데 가독성부분에 있어서 코드안이 아닌 밖에 설명을 쓰는 것이 좋은지 여러분들에게 의견을 구해봅니다.

     

    읽어주셔서 감사합니다람쥐

     

    반응형

    댓글

Designed by Tistory.