본문 바로가기
TIL

220303: 자바 가위바위보

by 김비누! 2022. 3. 3.

💻구구단(백준 2737)

N을 입력받아 구구단 N단을 출력한다. (1≤N≤10)JAVA에도 파이썬처럼 range 함수가 있었다!

import java.util.Scanner;
import java.util.stream.IntStream;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.close();

        IntStream.range(1, 10)
        .forEach(i -> {
            System.out.println(n + " * " + i + " = "+ n*i);
        });
    }
}

intStream.range 는 1에서부터 9까지의 integer를 스트림으로 내보낸다. 마지막 값은 포함하지 않는다 (endExclusive). forEach를 이용해 각 interger마다 실행되는 명령을 정의한다. intStream은 한 번 실행하면 break, return문을 넣어도 빠져나가지 않고 끝까지 실행된다.

화살표 연산자(->) 는 람다식과 함께 사용되는 연산자이다. 매개변수가 하나일 경우 괄호 생략 가능해 i -> {} 으로 표현했다. Stream에서 인자를 받아 메소드로 넘겨주고 실행된다.

Stream, 람다식에 대해 이해가 부족해 지금은 이대로 넘어가기로 한다. + 2747번도 비슷하게 풀었다!

💻자바 가위바위보

rps는 숫자로 입력받은 가위, 바위, 보를 비교하여 게임 결과 처리한다.

    static void rps(int p1, int p2, String p1Name, String p2Name) {

        int tmp = Math.abs(p1 - p2);
        int winP = -1; // p1 이김-> 0, p2이김->1

        if (p2 < 0 || p2 > 3 || p1 < 0 || p1 > 3) { // 인자 오류
            System.out.println("> invalid input ");
            return;
        } else if (p1 == p2) {
        } // 비김, 동작X
        else if (tmp == 1) { // 가위,바위 or 바위,보
            if (p1 > p2) // p1 이김
                winP = 0;
            else
                winP = 1;
        } else { // 가위, 보
            if (p1 < p2)// p2 이김
                winP = 1;
            else
                winP = 0;
        }
        if (winP == 0)
            userWin++;
        else if (winP == 1)
            userLose++;

        rpsResultPrint(p1, p2, p1Name, p2Name, winP);

    }

runRps는 가위바위보 게임을 -1이 입력되기 전까지 계속 실행한다.

java.util의 Random클래스를 이용해 컴퓨터와 유저 입력으로 진행

게임종료 처리, invalid 값 처리 (+기타 꾸미기)

스캐너 nextInt가 안먹히는 오류가 있어 nextLine으로 스캐너를 비워줬다.

    static void runRps() {
        Scanner sc = new Scanner(System.in);
        Random rand = new Random();

        int com, user, gameNum = 0;

        System.out.println("가위바위보!\n");
        System.out.println("가위:1, 바위2, 보:3 입력");
        System.out.println("(input -1 to end)");
        System.out.println("*".repeat(20));

        while (true) {

            System.out.print("> ");
            user = sc.nextInt();
            sc.nextLine();
            com = rand.nextInt(3) + 1;

            if (user == -1) { // 게임 종료
                System.out.println("*".repeat(20));
                System.out.println(" ".repeat(6) + "가위바위보!" + " ".repeat(6) + "\n");
                System.out.println("총 " + gameNum + "게임 중\n");
                System.out.println("Win: " + userWin);
                System.out.println("Lose: " + userLose);
                System.out.println("Even: " + (gameNum - userWin - userLose));
                System.out.println("\n" + "*".repeat(9) + "END" + "*".repeat(9));
                break;
            }

            if (user < 1 || user > 3) { // 인자 오류
                System.out.println("> invalid input ");
            } else {    //가위바위보 게임 수행
                rps(user, com, "user", "com");
                gameNum++;
            }

            System.out.println("*".repeat(20));

        }
        sc.close();

    }

rpsHandStr은 숫자로 입력받은 가위바위보를 문자로 바꿔줌

rpsWinPrint는 둘 중 누가 이겼는지 출력한다.

    static String rpsResultPrint(int hand) {

        String result;
        if (hand == 1)
            result = "가위";
        else if (hand == 2)
            result = "바위";
        else
            result = "보";

        return result;
    }

    static void rpsWinPrint(int p1, int p2, String p1Name, String p2Name, int win) {
        System.out.println(p1Name + " : " + p2Name);
        System.out.print(rpsHandStr(p1) + " vs " + rpsHandStr(p2) + "\n> ");

        if (win == 0)
            System.out.println(p1Name + " 승리");
        else if (win == 1)
            System.out.println(p2Name + " 승리");
        else
            System.out.println("비김");
    }

입력

1 2 -1

출력

가위바위보!

가위:1, 바위2, 보:3 입력
(input -1 to end)
********************
> 1
user : com
가위 vs 보
> com 승리
********************
> 2
user : com
바위 vs 가위
> user 승리
********************
> -1
********************
      가위바위보!      

총 2게임 중

Win: 1
Lose: 1
Even: 0

*********END*********

☕️ 잡담

국취제 1유형으로 수급자격 인정되었다 👏👏👏

티스토리 마크다운 자꾸 안먹고..
마크다운 가이드 참고하기..ㅜ

'TIL' 카테고리의 다른 글

220307: 자바 배열  (0) 2022.03.07
220304  (0) 2022.03.04
220302: JAVA 클래스, 생성자  (0) 2022.03.02
220228: JVM 개념, JAVA method 개념  (0) 2022.02.28
TIL 작성규칙  (0) 2022.02.28

댓글