반응형
탈출문 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();
}
}반응형
'국비지원 > JAVA' 카테고리의 다른 글
| [JAVA] 7-3. 배열을 다루는 방법 (순차탐색을 활용한 문자열비교 / 이진탐색) (0) | 2022.09.28 |
|---|---|
| [JAVA] 7-2. 반복문 continue (0) | 2022.09.28 |
| [JAVA] 6. 중첩반복문(for)과 향상된 for loop (0) | 2022.09.27 |
| [JAVA] 5-2. 반복문 for (0) | 2022.09.26 |
| [JAVA] 5-1. 배열과 반복문(while문), do-while문 곁들인.. (0) | 2022.09.26 |