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


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

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();
}
}