본문 바로가기
국비지원/JAVA

[JAVA] 7-1. 무한loop와 탈출문 break

by cosmog 2022. 9. 28.
반응형
탈출문 break
  • 반복문 또는 블록구조에서 빠져나올때 사용한다.
  • 탈출문은 break/continue/return 키워드로 사용한다.
  • if문을 제외한 가장 가까운 반복문을 탈출한다.
  • continue는 루프 한번을 뛰어 넘는 것.

➰ while과 for문에 사용해본 break.

package day07;

public class BreakEx01 {

	public static void main(String[] args) {

		/* while문으로 짠 break 활용 코드 */
		int i = 1;
		while(i <= 10) {

			if(i == 5) break;

			//break문 밑에 출력문이 있기 때문에 4까지 출력.
			//위치 같은 것들에 주의해서 사용을 해야한다.
			System.out.println(i);


			if(i == 5) { 
				// break를 단독으로 사용하면 들어오자마자 나가게됨.
				// 조건을 같이 사용하는 경우가 많다.
				break;
			}


			i++;
		}
		
		
		/* 위에 while로 짠 break문을 for문으로 변환*/
		for(int i = 1; i <= 10; i++) {
			System.out.println(i);
			if(i == 5) break;
		}


	}

}

 

무한loop와 break 탈출문

<무한 loop의 선언>

	- while문 무한루프
    while(true) {
		//계속 돌아가는 while문.
	}
	
	- for문 무한루프
	for( ; ;) {
			//for문은 가독성이 좋지않아 while을 주로 사용한다.
	}

➰ break와 무한루프 - 정답을 맞추면 동작을 멈추는 프로그램

import java.util.Scanner;

public class BreakEx02 {
	
	public static void main(String[] args) {

		/*
		 * '무한루프'의 개념
		 * - 무한정 돌아가는 반복문.
		 * ex)키오스크를 생각해보면 멈추지 않는 동작.
		 * - 반복의 횟수를 정확히 가늠할 수 없을 때 무한루프를 만들고 Break문으로 빠져나오도록 처리.
		 */
		
		//정답을 맞출때까지 정답을 입력받는 프로그램.

		Scanner scan = new Scanner(System.in);
		
		while(true) {//계속 돌아가는
			System.out.println("4 X 6 = ?");
			System.out.print(">");
			
			int answer = scan.nextInt();
			
			//24면 탈출
			if(answer == 24) {
				System.out.println("정답!");
				break;
			}
			
			System.out.println("정답아니야!");
		}
		System.out.println("프로그램을 종료합니다");
		scan.close();
	}

}

➰ 중첩반복문에서의 break

  • 중첩반복문에서 한번에 종료시키려면 바깥쪽 반복문에 label을 붙이고, break label;을 사용하면 된다.
package day07;

public class BreakEx03 {

	public static void main(String[] args) {

		//중첩반복문의 탈출

		/*
		 * 대문자A - 소문자 a-z
		 * ....
		 * 대문자Z - 소문자 a-z
		 * 되는 반복문.
		 */

		/* 원초적인 방법의 중첩반복문 break*/
		boolean flag = false; // 원초적인 방법

		for(char c = 'A'; c <= 'Z'; c++) {

			for(char l = 'a'; l <= 'z'; l++) {

				System.out.println(c + "-" + l);

				//같은 문자의 대소문자 매칭
				if(l == c+32) {
					flag = true;
					break;
				}
			}// inner
			if(flag) break; // flag가 true면 탈출 (바깥for문 break)
		} 

		/* label: 을 사용하여 중첩반복문 break */
		label_test:for(char c = 'A'; c <= 'Z'; c++) {

			for(char l = 'a'; l <= 'z'; l++) {

				System.out.println(c + "-" + l);
				if(l == c+32) break label_test;
			}// inner
		}

	}

}

 

➰ Quiz - Up/Down 게임

import java.util.Scanner;

public class Quiz17 {
	public static void main(String[] args) {
		
		/*
		 * up down 게임
		 * 
		 * 1 ~ 100 까지의 임의 숫자를 1번 생성
		 * 반복문 안에서 스캐너를 이용해서 정답을 입력받습니다.
		 * 
		 * 랜덤수가 입력받은 값보다 작으면 "더 큰수를 입력하세요"
		 * 랜덤수가 입력받은 값보다 크면 "더 작은 수를 입력하세요"
		 * 
		 * 정답이라면 시도 횟수 : x회 를 출력하고 종료.
		 */
		
		Scanner scan = new Scanner(System.in);
		int random = (int)(Math.random()*100)+1;
		System.out.println(random);
		
		int count = 0;
		while(true) { // 무한 반복
			System.out.print("정답입력>");
			int input = scan.nextInt();
			count ++;
			
			if(input == random) {
				System.out.println("정답입니다.");
				break;
			}else if(input < random) {
				System.out.println("더 큰 수를 입력하세요");
			}else {
				System.out.println("더 작은 수를 입력하세요");
			}
		}
		System.out.println("시도횟수:"+count);
		
		scan.close();
	}

}

 

➰ Quiz - 랜덤한 덧셈 문제를 내는 게임

import java.util.Scanner;

public class Quiz18 {
	
	public static void main(String[] args) {
		
		/*
		 * 랜덤한 덧셈 문제를 내는 프로그램.
		 * 
		 * 반복이 실행될 때마다 1~100사이의 랜덤한 덧셈 구문이 출력됩니다.
		 * 
		 * 0을 입력받으면 프로그램을 종료합니다.
		 * 프로그램이 종료되면 정답횟수, 오답횟수를 출력하면 된다.
		 */
		
		Scanner scan = new Scanner(System.in);
		int correct = 0, wrong = 0;
		
		while(true) {
			int random1 = (int)(Math.random()*100) +1;
			int random2 = (int)(Math.random()*100) +1;
			
			System.out.printf("%d + %d = ?\n", random1, random2);
			System.out.println("[문제를 그만 푸시려면 0을 입력해주세요]");
			System.out.print(">");
			int input = scan.nextInt();
			
			if(input == 0) {
				System.out.println("프로그램 정상 종료");
				System.out.println("정답:"+correct);
				System.out.println("오답:"+wrong);
				break;
			}
			
			if(input == random1+random2) {//정답
				System.out.println("정답입니다.");
				correct ++;
			}else { //오답
				System.out.println("틀렸는데요?");
				wrong ++;
			}
			System.out.println("---------------------");
		}
		
		scan.close();
	}
}

강사님의 코드~ break 부분만 조금 간략하게 하였다.

import java.util.Scanner;

public class Quiz18 {
	
	public static void main(String[] args) {
		
		/*
		 * 랜덤한 덧셈 문제를 내는 프로그램.
		 * 
		 * 반복이 실행될 때마다 1~100사이의 랜덤한 덧셈 구문이 출력됩니다.
		 * 
		 * 0을 입력받으면 프로그램을 종료합니다.
		 * 프로그램이 종료되면 정답횟수, 오답횟수를 출력하면 된다.
		 */
		
		Scanner scan = new Scanner(System.in);
		int correct = 0, wrong = 0;
		
		while(true) {
			int random1 = (int)(Math.random()*100) +1;
			int random2 = (int)(Math.random()*100) +1;
			
			System.out.printf("%d + %d = ?\n", random1, random2);
			System.out.println("[문제를 그만 푸시려면 0을 입력해주세요]");
			System.out.print(">");
			int input = scan.nextInt();
			
			if(input == 0) break; //if 구문이 복잡하므로 간략하게 break선언 후 while밖에서 결과를 찍어준다.
			
			//els if로 넣어두 괜찮구 아니어도 괜찮구~
			if(input == random1+random2) {//정답
				System.out.println("정답입니다.");
				correct ++;
			}else { //오답
				System.out.println("틀렸는데요?");
				wrong ++;
			}
			System.out.println("---------------------");
		}
		System.out.println("프로그램 정상 종료");
		System.out.println("정답:"+correct);
		System.out.println("오답:"+wrong);
		
		scan.close();
	}
}
반응형