제어문(분기문)

oYJo·2024년 12월 17일

Java

목록 보기
11/25

분기문

break문

  • break문
    반복문에서는 break문 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문

  • break문 예시

중첩 반복문에서의 break

두 번째 for문에 break를 만날 경우 반복문을 나가 수행될 코드3을 수행 후 다시 첫 번째 for문을 실행하지만 마지막 break가 있다면 수행될 코드3을 수행 후 for문을 완전히 빠져나감

continue

  • continue문
    반복문 내에서만 사용 가능하며 반복문 실행 시 continue 아래 부분은 실행하지 않고 반복문 다시 실행
    for문의 경우 증감식으로 이동, while(do~while)문의 경우 조건식으로 이동
    전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용
  • continue문 예시

class BranchExample(ex1)

package edu.kh.control.branch;

import java.util.Scanner;

public class BranchExample {
	public void ex1() {
		// 1부터 10까지 1씩 증가하며 출력하는 반복문 작성
		// 단, 5를 출력하면 반복문을 멈춤

		for(int i=1; i<=10; i++) {
			System.out.println(i + " ");

			if(i == 5) {
				break;
			}
		}
	}

class BranchExample(ex2)


	public void ex2() {
		// 0이 입력될 때 까지 모든 정수의 합 구하기

		Scanner sc = new Scanner(System.in);

		int input = 0;
		int sum = 0;

		// while문을 처음에 무조건 수행하고, 특정 조건에 종료하는 방법

		// 1) input에 초기값을 0이 아닌 다른 값
		//	  while(input !=0)

		// 2) do ~ while문 사용


		// 3) 무한 루프 상태인 while문을 만들고
		// 	  내부에 break 조건 작성

		while(true) { // 무한 루프

			System.out.print("정수 입력 : ");
			input = sc.nextInt();

			// 입력 받은 수가 0인지 검사(while 종료 조건)
			if(input == 0) {
				break;
			}
			sum += input; // 누적
		}
		System.out.println("합계 : " + sum);
		// Unreachable code(도달할 수 없는 코드)
	}

class BranchExample(ex3)


	public void ex3() {
		// 입력 받은 모든 문자열을 누적
		// 단, "exit@" 입력 시 문자열 누적을 종료하고 결과 출력

		Scanner sc = new Scanner(System.in);

		String str = ""; // 빈 문자열
		// 쌍따옴표("")를 이용해서 String 리터럴임을 지정
		// 하지만 내용이 없음

		while (true) { // 무한 루프
			System.out.print("문자열 입력(exit@ 입력 시 종료) : ");

			String input = sc.nextLine();
			// next() : 다음 한 단어(띄어쓰기 포함 X)
			// nextLine() : 다음 한 줄(띄어쓰기 포함 O)

			// if(input == "exit@") {
			if(input.equals("exit@")) {	
				// if("exit@".equals(input)){ : 순서 변경해도 똑같이 사용가능하다

				// String 자료형은 비교 연산자(==)로 같은 문자열인지 판별할 수 없다.

				// 비교 연산자는 보통 기본 자료형 끼리의 연산에만 사용 가능하다.
				// -> String은 기본 자료형이 아닌 참조형

				// ** 해결 방법 : 문자열1.equals(문자열2)으로 비교 가능 **

				break;
			}
			str += input + "\n";
		} 
		System.out.println("---------------");
		System.out.println(str);
	}

class BranchExample(ex4)


	public void ex4() {
		// 중첩 반복문 내부에서 break 사용하기
		// 구구단 2~9단까지 모두 출력
		// 단, 2단은 x2까지, 3단은 x3까지 ... 9단은 x9까지만 출력


		for(int dan=1; dan<=9; dan++) { // 가로
			for(int num = 1; num <= 9; num++) { // 세로
				System.out.printf("%d X %d = %2d", dan, num, dan * num );
				if(dan == num) { // 단과 곱해지는 수가 같을 경우
					break;
					// 분기문이 중첩 반복문 내에서 사용되면
					// 가장 가까운 반복문에 작용한다!
				}
			}

			System.out.println();

		}
	}
	

class BranchExample(ex5)

	
	public void ex5() {
		// continue : 다음 반복으로 넘어감

		// 1~10까지 1씩 증가하며 출력
		// 단, 3의 배수는 제외
		for(int num=1; num<=10; num++ ) {
			if(num%3 == 0) { // num가 3의 배수인 경우
				continue;
			}
			System.out.println(num + " ");
		}
	}

class BranchExample(ex6)


	public void ex6() {

		// 1~100까지 1씩 증가하며 출력하는 반복문
		// 단, 5의 배수는 건너뛰고
		// 증가하는 값이 40이 되었을 때 반복을 멈춤

		for(int num=1; num<=100; num++) { //1~100
			if(num==40) {
				break;
			}
			if(num%5==0) { // 5의 배수
				continue;
			} 
			System.out.println(num+" " );

		}
	}

class BranchExample(RPSGame)


	// [가위 바위 보 게임]
	// 몇 판? : 3

	// 1번째 게임
	// 가위/바위/보 중 하나를 입력해주세요 : 가위
	// 컴퓨터는 [보]를 선택했습니다.
	// 플레이어 승!
	// 현재 기록 : 1승 0무 0패

	// 2번째 게임
	// 가위/바위/보 중 하나를 입력해주세요 : 보
	// 컴퓨터는 [보]를 선택했습니다.
	// 비겼습니다.
	// 현재 기록 : 1승 1무 0패


	// 3번째 게임
	// 가위/바위/보 중 하나를 입력해주세요 : 가위
	// 컴퓨터는 [바위]를 선택했습니다.
	// 플레이어 승!
	// 현재 기록 : 1승 0무 1패

	public void RPSGame() {

		Scanner sc = new Scanner(System.in);

		System.out.println("[가위 바위 보 게임]");
		System.out.print("몇 판? : ");
		int round = sc.nextInt();

		// 승패 기록용 변수
		int win = 0;
		int draw = 0;
		int lose = 0;


		for(int i =1 ; i <=round; i++) { // 입력 받은 판 수 만큼 반복
			System.out.println("\n" + i + "번째 게임");

			System.out.print("가위/바위/보 중 하나를 입력해주세요 :");
			String input = sc.next(); // 플레이어가 가위/바위/보 입력

			// 컴퓨터 가위/바위/보 정하기(랜덤)
			// 1) 1~3 사이 난수 생성
			// 2) 1이면 가위, 2이면 바위, 3이면 보 지정

			// 난수 생성 방법 : Math.random()
			// -> 0.0 이상 1.0 미만의 난수가 생성됨

			int random = (int)(Math.random() * 3 + 1 );
			// 0.0 <= x < 1.0
			// 0.0 <= x * 3 < 3.0
			// 1.0 <= x * 3 + 1 < 4.0
			// 1 <= (int)(x * 3 + 1) < 4
			// == 1 이상 4 미만의 정수 == 1 2 3

			String com = null; // 컴퓨터가 선택한 가위/바위/보를 저장하는 변수
			// null : 아무것도 참조하고 있지 않음

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

			System.out.printf("컴퓨터는 [%s]를 선택했습니다.\n", com); 
			// The local variable com may not have been initialized = 초기화 된 적 없다

			// 컴퓨터와 플레이어(기준) 가위 바위 보 판별
			// win, draw, lose


			if(input.equals(com)){ // 비긴 경우
				System.out.println("비겼습니다.");
				draw++;
			} else {
				boolean win1 = input.equals("가위") && com.equals("보");
				boolean win2 = input.equals("바위") && com.equals("가위");
				boolean win3 = input.equals("보") && com.equals("바위");
				
				if(win1 || win2 || win3) {
					System.out.println("플레이어 승!");
					win++;
				} else {
					System.out.println("플레이어 패!");
					lose++;
				}
				
				/*
				// 보(3) < 가위(1) < 바위(2) < 보(3)
				if(input.equals("가위") && com.equals("보")) {
					System.out.println("플레이어 승!");
					win++;
				} else if (input.equals("바위") && com.equals("가위")){
					System.out.println("플레이어 승!");
					win++;
				} else if (input.equals("보") && com.equals("바위")){
					System.out.println("플레이어 승!");
					win++;
				} else {
					System.out.println("플레이어 패!");
					lose++;
				}
				*/

			} // else 
			System.out.printf("현재 기록 : %d승 %d무 %d패\n", win, draw, lose);
		}
	}
}

class BranchRun

package edu.kh.control.branch;

public class BranchRun {
	public static void main(String[] args) {
		BranchExample branchEx = new BranchExample();


		branchEx.ex1();
		branchEx.ex2();
		branchEx.ex3();
		branchEx.ex4();
		branchEx.ex5();
		branchEx.ex6();
		branchEx.RPSGame();
	}
}
profile
Hello! My Name is oYJo

0개의 댓글