JAVA

[자바/JAVA] 프로그래밍 - 제어문 종합 실습 예제

21종 2023. 5. 31. 21:37

제어문 종합 예제


문제 01.

정수를 입력 받아 양수일 때만 1부터 입력 받은 수까지 홀수/짝수를 나눠서 홀수면 ‘박’, 짝수면 ‘수’를 출력하도록 하세요.
단, 입력 받은 수가 양수가 아니면 “양수가 아닙니다”를 출력하세요.

ex.
정수 : 5
박수박수박 
정수 : 10
박수박수박수박수박수
정수 :
양수가 아닙니다.
Scanner sc = new Scanner(System.in);
System.out.print("정수 : ");
int num = sc.nextInt();

if (num == 0) {
        System.out.print("양수가 아닙니다.");
}else {
    for(int i = 1; i <= num; i++) {
        if(i % 2 == 1) {
            System.out.print("박");
        }else if(i % 2 == 0) {
            System.out.print("수");
        }
    }
}
sc.close();

문제 02.

위 문제와 모든 것이 동일하나, 1 미만의 숫자가 입력됐다면 “양수가 아닙니다.”가 출력되면서 다시 사용자가 값을 입력하도록 하세요.

ex.
정수 : 4
박수박수
정수 :
양수가 아닙니다.
정수 : -3
양수가 아닙니다.
정수 : 6
박수박수박수
Scanner sc = new Scanner(System.in);
while(true) {
    System.out.print("정수 : ");
    int num = sc.nextInt();
    if(num > 0) {
        for(int i = 1; i <= num; i++) {
            if(i % 2 == 1) {
                System.out.print("박");
            }else if(i % 2 == 0){
                System.out.print("수");
            }
        }
        sc.close();
        break;
    }else {
        System.out.println("양수가 아닙니다.");
        continue;
    }
}

문제 03.

사용자로부터 문자열을 입력 받고 문자열에서 검색될 문자를 입력 받아 해당 문자열에 그 문자가 몇 개 있는지 개수를 출력하세요.

ex.
문자열 : banana
문자 : a
banana 안에 포함된 a 개수 : 3
Scanner sc = new Scanner(System.in);
System.out.print("문자열 : ");

String str = sc.nextLine();

System.out.print("문자 : ");
char str1 = sc.nextLine().charAt(0);

int result = 0;

for(int i = 0; i < str.length(); i++) {
    if(str.charAt(i) == str1) {
        result ++;
    }else {
        continue;			}
}
System.out.printf("%s 안에 포함된 %s 개수 : %d", str, str1,result);
sc.close();

문제 04.

위 문제와 모든 것이 동일하고, “더 하시겠습니까?”라고 추가로 물어보도록 하세요.
이 때, N이나 n이 나오면 프로그램을 끝내고 Y나 y면 계속 진행하도록 하되 Y, y, N, n이 아닌 다른 문자를 입력했을 경우 “잘못된 대답입니다. 다시 입력해주세요.”를 출력하고 더 하겠냐는 물음을 반복하세요.

ex.
문자열 : application
문자 : a
포함된 개수 : 2
더 하시겠습니까? (y/n) : y
문자열 : business
문자 :
포함된 개수 : 3 
더 하시겠습니까? (y/n) :
잘못된 대답입니다. 다시 입력해주세요.  
더 하시겠습니까? (y/n) : Y
문자열 : ant 
문자 : b
포함된 개수 : 0
더 하시겠습니까? (y/n) : N
Scanner sc = new Scanner(System.in);

while(true) {
    System.out.print("문자열 : ");
    String str = sc.nextLine();

    System.out.print("문자 : ");
    char str1 = sc.nextLine().charAt(0);

    int result = 0;

    for(int i = 0; i < str.length(); i++ ) {
        if(str.charAt(i) == str1) {
            result ++;				
        }else {
            continue;
        }
    }
    System.out.printf("%s 안에 포함된 %s 개수 : %d\n", str, str1, result);
    System.out.print("더 하시겠습니까? (y/n) : ");
    char yesOrNo = sc.nextLine().charAt(0);

    if(yesOrNo == 'y' || yesOrNo == 'Y') {
        continue;
    }else if(yesOrNo == 'n' || yesOrNo == 'N') {
        break;
    }else {
        System.out.println("잘못된 대답입니다. 다시 입력해주세요.");
        continue;
    }
}
sc.close();

문제 05.

1부터 100 사이의 정수 중 임의의 난수가 정해지고 사용자는 정해진 난수를 맞추는데 몇 번 만에 맞췄는지 출력하세요.

ex. 90 1~100 사이의 임의의 난수를 맞춰보세요 : 0
1~100 사이의 숫자를 입력해주세요.
1~100 사이의 임의의 난수를 맞춰보세요 : 101
1~100 사이의 숫자를 입력해주세요.
1~100 사이의 임의의 난수를 맞춰보세요 : 50
UP ! 1~100 사이의 임의의 난수를 맞춰보세요 : 75
UP ! 1~100 사이의 임의의 난수를 맞춰보세요 : 83
UP !
1~100 사이의 임의의 난수를 맞춰보세요 : 93
DOWN !
1~100 사이의 임의의 난수를 맞춰보세요 : 89
UP ! 1~100 사이의 임의의 난수를 맞춰보세요 : 92
DOWN !
1~100 사이의 임의의 난수를 맞춰보세요 : 90
정답입니다 !!
7회만에 맞추셨습니다.
int random = (int) (Math.random() * 100 + 1);
Scanner sc = new Scanner(System.in);
int count = 1;
System.out.println(random);

while(true) {
    System.out.print("1 ~ 100 사이의 난수를 맞춰보세요 : ");
    int num = sc.nextInt();

    if(num > 0 && num < 101) {
        if(random == num) {
            System.out.println("정답입니다 !!");
            System.out.printf("%d회만에 맞추셨습니다.",count);
            break;
        }else if(random > num) {
            System.out.println("UP !");
            count++;
        }else {
            System.out.println("DOWN !");	
            count++;
        }

    }else {
        System.out.println("1~100 사이의 숫자를 입력해주세요.");
    }
}
sc.close();

 


문제 06.

사용자의 이름을 입력하고 컴퓨터와 가위바위보를 하세요. 컴퓨터가 가위인지 보인지 주먹인지는 랜덤한 수를 통해서 결정하도록 하고, 사용자에게는 직접 가위바위보를 받으세요. 사용자가 “exit”를 입력하기 전까지 가위바위보를 계속 진행하고 “exit”가 들어가면 반복을 멈추고 몇 번의 승부에서 몇 번 이기고 몇 번 비기고 몇 번 졌는지 출력하세요

Scanner sc = new Scanner(System.in);

System.out.print("당신의 이름을 입력해주세요 : ");
String name = sc.nextLine();


String cp = "";
int win = 0;
int defeat = 0;
int tie = 0;

while(true) {
    int random = (int)(Math.random()*3);
    if(random == 0) {
        cp = "가위";
    }else if(random == 1) {
        cp = "바위";
    }else {
        cp = "보";
    }
    System.out.print("가위바위보 : ");
    String user = sc.nextLine();


    if((user.equals("가위")) ||(user.equals("바위"))||(user.equals("보"))) {
        System.out.println("컴퓨터 : " + cp);
        System.out.println(name + " : " + user);
        if((cp.equals("가위") && user.equals("바위"))
                ||(cp.equals("바위") && user.equals("보"))
                ||(cp.equals("보") && user.equals("가위"))) {
            System.out.println("이겼습니다.");
            ++win;
        }else if(cp.equals(user)){
            System.out.println("비겼습니다.");
            ++tie;
        }else {
            System.out.println("졌습니다 ㅠㅠ");
            ++defeat;
        }
        continue;
    }else if(user.equals("exit")) {
        System.out.printf("%d전 %d승 %d무 %d패",win + tie + defeat, win, tie, defeat);
        break;

    }else {
        System.out.println("잘못 입력하셨습니다.");
        continue;
    }
}
sc.close();

강사님 풀이

public void rps2() {
    Scanner sc = new Scanner(System.in);
    // 필요한 자원 -> 변수
    int total = 0;	// 전
    int win = 0;	// 승
    int tie = 0;	// 무
    int lose = 0;	// 패

    System.out.print("당신의 이름을 입력해주세요 : ");
    String name = sc.nextLine();

    while(true) {
        System.out.print("가위바위보 : ");
        String rps = sc.nextLine(); // exit

        int random = (int)(Math.random()*3 + 1);
        String com = "";

        switch(random){	// 1 2 3
        case 1:
            com = "가위";
            break;
        case 2:
            com = "바위";
            break;
        case 3:
            com = "보";
            break;
        }

        if(rps.equals("exit")) {	// exit를 입력한 경우에는 종료
            // 전승무패 출력
            System.out.println(total + "전 " + win + "승 " + tie + "무 " + lose + "패");
            // 종료
            break;
        }else if(rps.equals("가위") || rps.equals("바위") || rps.equals("보")) {	// 잘입력한 경우
            total ++;
            System.out.println("컴퓨터 : " + com);	// 컴퓨터 : 가위(랜덤값)
            System.out.println(name + " : " + rps);	// 이원종 : 보(내가 입력한 값)

            if(com.equals("가위")) {	// 컴퓨터가 가위를 낸 경우
                switch(rps) {
                case "가위" :
                    System.out.println("비겼습니다.");
                    tie ++;
                    break;

                case "바위" :
                    System.out.println("이겼습니다.");
                    win ++;
                    break;
                case "보" :
                    System.out.println("졌습니다.");
                    lose ++;
                    break;
                }
            }else if(com.equals("바위")) {	// 컴퓨터가 가위를 낸 경우
                switch(rps) {
                case "바위" :
                    System.out.println("비겼습니다.");
                    tie ++;
                    break;

                case "보" :
                    System.out.println("이겼습니다.");
                    win ++;
                    break;
                case "가위" :
                    System.out.println("졌습니다.");
                    lose ++;
                    break;
                }
            }else if(com.equals("보")) {	// 컴퓨터가 가위를 낸 경우
                switch(rps) {
                case "보" :
                    System.out.println("비겼습니다.");
                    tie ++;
                    break;

                case "가위" :
                    System.out.println("이겼습니다.");
                    win ++;
                    break;
                case "바위" :
                    System.out.println("졌습니다.");
                    lose ++;
                    break;
                }
            }
        }else {
            System.out.println("잘못 입력하셨습니다.");
        }
    }
}