Java - 기본기

8. 조건문과 반복문 기초&활용(3) - break, contiune, 이름붙은 반복문(feat. 미니 게임 만들기 & 제곱근, 로그 계산기)

TerianP 2021. 10. 4.
728x90

1. break문

  • 자신이 포함된 하나의 반복문을 벗어난다. 아래 처럼 사용 가능
  • 중요한 점은 for 문은 무한 반복 할 때 사용되는 true 가 생략 가능하나, while 문은 true 가 생략 불가능하다.
static void breakk() {
		int i=0, sum=0;
		
		while(true) { // 여기서는 true 생략 불가
			if(sum > 100)
				break;
			i++;
			sum+=i;
		} // end of while
		
		System.out.println("i = " + i);
		System.out.println("sum = " + sum);
	}
	
	static void forr() {
		int i=0, sum=0;
		
		for(;;) { // for 문은 true 생략 가능, 혹은 ;true; 사용			
			if(sum > 100)
				break;
			++i;
			sum+=i;
		} // end of for
		System.out.println("i = " + i);
		System.out.println("sum = " + sum);	
	}

 

2. continue 문

  • 자신이 포함된 반복문의 끝으로 이동 즉 다음 반복으로 넘어감
  • 전체 반복 중에서 특정 조건시 반복을 건너 뛸 때 유용
  • 1~10 까지 자연수 중 3배의 배수는 생략하고 출력
static void contiunee() {
		for(int i=1; i<=10; i++) {
			if(i%3==0) // 3의 배수는 3으로 나눴을 때 나머지가 0 인 수
				continue;// 쉽게 생각해서 아래의 continue 의 의미는 sysout 부분을 건너띈다는 의미
			System.out.println(i);
		}
	}

결과 :
1
2
4
5
7
8
10

 

 

3. 이름붙은 반복문

  • 반복문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다.
  • break; 를 앞에 반복문의 이름을 붙여서 특정한 반복문을 벗어날 수 있다.
static void super_break() {
		int i=0, j=0;

		ha : for(i=1; i<=9; i++){ // i를 1~9 까지 반복
			ha2 : for(j=1; j<=9; j++) { // j 를 1~9 까지 반복
				if(j==5) { // 단 j 가 5가되면 중단
					break ;
				}
				System.out.println(j+"*"+i+ "=" + j*i); // j*i 출력
			}
			System.out.println();
		}
	}

############### 결과 #############
// 결과로 j 는 4까지만 반복, i 는 그대로 9 까지 반복
1*1=1
2*1=2
3*1=3
4*1=4

1*2=2
2*2=4
3*2=6
4*2=8

1*3=3
2*3=6
3*3=9
4*3=12

1*4=4
2*4=8
3*4=12
4*4=16

1*5=5
2*5=10
3*5=15
4*5=20

1*6=6
2*6=12
3*6=18
4*6=24

1*7=7
2*7=14
3*7=21
4*7=28

1*8=8
2*8=16
3*8=24
4*8=32

1*9=9
2*9=18
3*9=27
4*9=36

 

4. 반복문, 제어문 활용하기

  • 제곱근 로그 구하는 계산기 만들기
  • 첫번째 무한 반복문(Menu)으로 메뉴문을 만들어서 반복시켰다. 이때 99 를 입력받거나 1이상 3이하가 아닌 숫자를 입력받는 경우 다시 입력을 요청하며 반복문을 재 실행시킨다.
  • 두번째 무한 반복문으로 계산식을 돌린다. 계산식은 switch문을 활용한다. 
static void calculation() throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 버퍼로 받을게요
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int menu = 0; // 메뉴 변수 초기화
		int num = 0; // 계산 결과 변수 초기화


		Menu : for(;;) { // 메뉴 반복문(무한 반복문)
			System.out.println("1) square"); // 제곱근
			System.out.println("2) square root"); // 루트
			System.out.println("3) log"); // 로그
			System.out.print("메뉴선택(99 전체 종료) : "); 

			menu = Integer.parseInt(br.readLine()); // 여기서 입력받는건 메뉴


			if(menu==99) { // 99 를 입력받으면 전체 종료
				System.out.println("#### 종료합니다 ####");
				break; // 이때 break; 로 종료되는 반복문은 Menu

			}else if(!(1<=menu && menu<=3)) {
				System.out.println("\n #### 메뉴를 다시 입력해주세요 #### \n");
				continue; // 1과 3사이의 숫자가 아니면 ! 메뉴 다시 입력받기
			}
			
			for(;;) { // 1이상 3이하의 숫자를 받으면 아래 반복문 실행
				System.out.print("\n 숫자 입력(0 계산종료, 99 전체 종료) > "); 
                // 0을 입력받으면 해당 계산 메뉴 종료
				num = Integer.parseInt(br.readLine()); // 여기서 입력받는건 숫자

				if(num==0) { // 0일 때는 해당 계산 메뉴만 종료
					bw.write("\n #### 계산 종료 #### \n");
					bw.newLine();
					bw.flush();
					break;
                    
				}else if(num==99) { // 어디서든 99를 입력받으면 전체 메뉴 종료
					bw.write("\n #### 전체 종료 #### \n");
					bw.flush();
					break Menu; 
                    
				}
					switch(menu) {
					case 1: // 메뉴가 1 일 때 
						System.out.println("\n Square = " + num*num);
						break;
					case 2: // 메뉴가 2 일 때
						System.out.printf("\n Square root = %.5f \n", Math.sqrt(num));
						break;
					case 3: // 메뉴가 3 일 때
						System.out.printf("\n Log = %.5f \n", Math.log(num));
					} // /스위치문 종료
			} // 계산식 반복문 종료
		} // 메뉴 반복문 종료
		br.close();
		bw.flush();
		bw.close();
	}

 

 

5. 지금까지 공부한 것들을 활용한 미니 게임 만들기

  • 게임 개요
    • 용사가 할 수 있는 행동은 구르기, 점프, 달리기로 총 3가지
    • 용사가 얻을 수 있는 총 경험치는 20이며, 겸험치를 모두 얻으면 끝!
    • 용사는 각 행동은 할 때마다 1~5 사이의 랜덤한 경험치를 얻음
    • 행동이 끝난 후 행동으로 얻은 경험치와 누적 경험치를 모두 표시함
	static void mini_game() throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int exp = 0; // 경험치 변수 초기화
		System.out.println("당신은 용사입니다");
		System.out.println("경험치가 20이 되면 종료합니다 \n");
		
		for(;;) { // 경험치가 다 차기 전까지는 무한 반복			
			
			if(exp>0) { // 겸험치가 1 이상일때만 총 누적 경험치를 표시함 
				System.out.println("### 현재까지 얻은 경험치 : "+exp+" ###"+"\n");
			}
			
			System.out.print("어떻게 움직일까요?(점프 1, 달리기 2, 구르기 3 : ");
			
			String str = br.readLine();
			int i = Integer.parseInt(str);

			int ran_exp = (int)((Math.random()*5)+1); // 랜덤한 경험치를 얻도록 Math.random 활용

			if(i==1) {
				exp+=ran_exp; // 랜덤 경험치 누적
				System.out.println("\n 용사가 점프합니다.");
				System.out.println("+Exp = "+ran_exp); 
			}else if(i==2) {
				exp+=ran_exp; // 랜덤 경험치 누적
				System.out.println("\n 용사가 달려갑니다");
				System.out.println("+Exp = "+ran_exp);
			}else if(i==3) {
				exp+=ran_exp; // 랜덤 경험치 누적
				System.out.println("\n 용사가 굴러갑니다");
				System.out.println("+Exp = "+ran_exp);
			}

			if(exp>20) { // 경험치가 20 초과 일때 종료
				System.out.println("\n 경험치가 다 찼습니다 끝!");
				System.out.println();
				break;
			}
			else if(i!=1 && i!=2 && i!=3) { // 1~3 사이의 행동이 아닌 다른 번호를 선택한 경우 재입력 요청
				System.out.println("잘못입력했습니다 다시 입력해주세요");
				System.out.println();
			}
		}

		br.close();
	}

댓글