자바의 정석

[자바의 정석] ch4. 조건문과 반복문(제어문)

주니어주니 2022. 8. 28. 23:00

 

1. 조건문 - if, switch

  • 조건문(if, switch) : 조건을 만족할 때만 { }를 실행 (0~1번)

 

1-1. if문

 

조건식이 참(true) 일 때, 괄호{} 안의 문장들을 수행한다.

if (조건식)     { ← 시작
                       // 조건식이 참(true)일 때 수행될 문장들을 적는다
} ← 끝

ex)

if (score > 60) {

System.out.println(“합격입니다.”) ;

System.out.println(“축하드립니다.”) ;

}

조건문(score > 60)이 참이면, 아래 문장들을 수행

거짓이면, 아래 문장들을 수행하지 않고 그 다음 문장을 수행

 

 

1-2. 조건식의 다양한 예

조건식 조건식이 참일 조건
90 <= x  &&  x <= 100 정수 x가 90이상 100이하일 때
x < 0  ||  x > 100 정수 x가 0보다 작거나 100보다 클 때
x % 3 == 0  &&  x % 2 != 0 정수 x가 3의 배수지만, 2의 배수는 아닐 때
x % 3 == 0  &&  x % 2 !=0 문자 ch가 ‘y’ 또는 ‘Y’일 때
ch ==‘  ‘  ||  ch == ‘\t’  ||  ch == ‘\n’ 문자 ch가 공백이거나 탭 또는 개행 문자일 때
‘A’ <= ch  &&  ch <= ‘Z’ 문자 ch가 대문자일 때
‘a’ <= ch  &&  ch <= ‘z’ 문자 ch가 소문자일 때
‘0’ <= ch  &&  ch <= ‘9’  문자 ch가 숫자일 때
str.equals(”yes”) 문자열 str의 내용이 “yes”일 때 (대소문자 구분)
str.equalsIgnoreCase(”yes”) 문자열 str의 내용이 “yes”일 때 (대소문자 구분 안함)

 

조건식을 작성할 때 실수하기 쉬운 것

등가비교 연산자 '==' 대신, 대입 연산자 '='를 사용하는 것

'x가 0일 때 참'인 조건식

if ( x = 0 )         //에러

if ( x == 0 )      //ok 

if ( ! ( x!=0 ) )  //true

 

 

1-3. 블럭 { }

 

여러 문장을 하나로 묶어주는 것

if(score > 60)
      ← 블럭의 시작
System.out.println(”합격입니다.”);
}        ← 블럭의 끝

 

  • 문장이 하나뿐 일 때는 괄호 생략 가능.
    if (score > 60 ) 
        System.out.println("합격입니다.");     // 문장1. if문에 속함
        System.out.println("축하합니다.");     // 문장2. if문에 속하지 않음. 

 

 

1-4. if-else문

 

두 블럭 중의 하나를 수행 - 조건식이 참일 때와 거짓일 때로 나눠서 처리

 if (조건식)  {
            // 조건식이 참(true)일 때 수행될 문장
} else  {
           // 조건식이 거짓(false)일 때 수행될 문장
}

 

  • 블럭 내의 문장이 하나뿐인 경우 괄호 생략 가능.
    if (input ==0) 
        System.out.println(”0입니다.”);
    else 
       System.out.println(”0이 아닙니다.”);

 

 

1-5. if-else if문

 

여러 개의 조건식

if  (조건식1)   {
                       // 조건식1의 연산결과가 참일 때 수행할 문장
}  else if  (조건식2)   {
                       // 조건식2의 연산결과가 참일 때 수행할 문장
}  else if  (조건식3)   {
                       // 조건식3의 연산결과가 참일 때 수행할 문장
}  else   {      // 마지막은 보통 else로 끝나며, else블럭은 생략 가능
                      // 위의 어느 조건식도 만족하지 않을 때 수행할 문장
}

 

import java.util.*;

class OperatorEx22 { 

	public static void main(String[] args) {
		int score = 0;
		char grade = ' ';
		
		System.out.print("점수를 입력하세요.> ");
		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();
		
		if(score>=90) { 
			grade = 'A';
		} else if (score>=80) {
			grade = 'B';
		} else if (score>=70) {
			grade = 'C';
		} else {
			grade = 'D';
		}
		System.out.println("당신의 학점은 "+grade+"입니다.");
		
	}
}
  • 원래는
    else if ( 80 <= score  &&  score < 90 ) 

    else if ( 70 <= score  &&  score < 80 ) 
    이라고 써야하지만, 
    else if ( score >= 80 )
    else if ( score >= 70 )  
    라고 쓸 수 있는 것은 첫번째 조건식인 score>=90이 거짓이기 때문
    score<90이 참이라는 뜻이므로 조건을 중복해서 확인할 필요가 없다. 

  • 처음에 char grade = ‘ ‘ 부분을 ‘D’로 초기화 해놓으면
    마지막 else 부분 입력 안해도 초기화값인 ‘D’로 입력됨 !

 

 

1-6. 중첩 if문

 

if  (조건식1)   {
        // 조건식1의 연산결과가 true일 때 수행할 문장
        if  (조건식2)   {
                  // 조건식1과 조건식2가 모두 true일 때 수행할 문장
        }  else   {
                  // 조건식1이 true이고, 조건식2가 false일 때 수행할 문장
        }
}  else   {
        // 조건식1이 false일 때 수행할 문장
}

 

import java.util.*;

class OperatorEx22 { 

	public static void main(String[] args) {
		int score = 0;
		char grade = ' ', opt = '0';     //opt도 0으로 초기화
		
		System.out.print("점수를 입력하세요.> ");
		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();
		
		if(score>=90) { 
			grade = 'A';
			if (score>=98) {
				opt = '+';
			} else if (score<94) {
				opt = '-';
			}
		} else if (score>=80) {
			grade = 'B';
			if (score>=88) {
				opt = '+';
			} else if (score<84) {
				opt = '-';
			}
		} else {
			grade = 'C';
		} 
	
		System.out.printf("당신의 학점은 %c%c입니다.%n",grade, opt);
	}
}

 

 

1-7. switch문

 

하나의 조건식으로 많은 경우의 수를 처리하기 때문에 처리해야 하는 경우의 수가 많을 때 유용한 조건문

다만 제약조건이 있기 때문에 어쩔 수 없이 if문으로 작성해야 하는 경우가 있음

 

switch문

switch (조건식) {
   case 값1 :
          // 조건식의 결과가 값1과 같을 경우 수행할 문장들
          break;
   case 값2 :
          // 조건식의 결과가 값2와 같을 경우 수행할 문장들
          break;     // switch 문을 벗어난다.
   default : (생략 가능)
          // 조건식의 결과와 일치하는 case문이 없을 때 수행할 문장들
}
 switch문 계산방법

1. 조건식을 계산한다. (if문과 달리 true,false값이 아님)
2. 조건식의 결과와 일치하는 case문으로 이동한다.
3. 이후의 문장들을 수행한다.
4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다. 

 

※ break문은 각 case문의 영역을 구분하는 역할

     따라서 각 case문의 마지막에 break문을 빼먹지 않도록 주의

     하지만, 경우에 따라서 고의적으로 break문을 생략하는 경우도 있음

 

ex) 로그인한 사용자의 등급(level)을 체크하여, 등급에 맞는 권한 부여하기


switch (level)  { 

      case 3 : 
                grantDelete();       // 삭제권한을 준다.
      case 2 : 
                grantWrite();         // 쓰기권한을 준다.
      case 1 : 
                grantRead();         // 읽기권한을 준다.  
}


3등급은 삭제, 쓰기, 읽기 권한
2등급은 쓰기, 읽기 권한
1등급은 읽기 권한

 

  • switch문과 if else if문 비교 
switch문 if else if문
조건식의 값= 정수, 문자열 조건식의 값= true, false
조건식을 한번만 계산 조건식을 여러번 계산
case만 추가하면 됨  조건식의 블럭{} 여러번 들어감
제약조건이 있음 제약 없음
항상 if else if문으로 바꿀수 있음  항상 switch문으로 바꿀 수 있는 건 아님 (제약조건 때문)

 

 

1-8. switch문의 제약조건 

 

switch문의 제약조건

1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다. 
2. case문의 값은 정수, 상수만 가능하며, 중복되지 않아야 한다. 
(swtich문의 조건식은 결과값이 정수여야 하며, 이 값과 일치하는 case문으로 이동하기 때문에 case문의 값 역시 정수) 
  •  ex)
    int num, result ;

    final int ONE = 1;

    switch (result)  {
    case ‘1’ :         //ok. 문자 리터럴(‘1’= 정수 49)
    case ONE :     //ok. 상수(final ~~)
    case “YES”:    //ok. 문자열 리터럴. JDK1.7부터 가능
    case num:       //에러. 변수 불가
    case 1.0:         //에러. 실수 불가

  • 월을 입력받아서 계절 출력하기
import java.util.*;

class OperatorEx22 { 

	public static void main(String[] args) {
		System.out.print("현재 월을 입력하세요.> ");
		
		Scanner scanner = new Scanner(System.in);
		int month = scanner.nextInt();
		
		switch(month) {
			case 3:
			case 4:
			case 5:
				System.out.println("현재의 계절은 봄입니다.");
				break;
			case 6: case 7: case 8: 
				System.out.println("현재의 계절은 여름입니다.");
				break;
			case 9: case 10: case 11:
				System.out.println("현재의 계절은 가을입니다.");
				break;
			default;       //조건식의 결과와 일치하는 case
			case 12: case 1: case 2: 
				System.out.println("현재의 계절은 겨울입니다.");
		}
	}
}

 

 

1-9. 임의의 정수 만들기 (난수)

 

Math.random() : 0.0과 1.0 사이의 임의의 double값 반환
0.0  <=  Math.randaom()  <  1.0 (0.0~ 0.9999…)
원하는 범위의 난수를 얻는 법
(ex. 1~3 의 정수 구하기)


1. 내가 원하는 개별값의 개수만큼 곱한다.  ( 각 변에 3을 곱한다 )
     0.0 * 3  ≤  Math.random() * 3  <  1.0 * 3 
            0.0  ≤  Math.random() * 3  <  3.0  (=0.0~2.9999…)

2. 각 변을 int형으로 변환한다.  ( 형변환으로 소수점 아래 자르기 )
     (int) 0.0  ≤  (int) (Math.random() * 3)  <  (int) 3.0
                   0 ≤  (int) (Math.random() * 3)  <  3 (=0~2)

3. 덧셈, 뺄셈을 이용해서 범위를 조절한다.  ( 각 변에 1을 더한다 )
     0 +1  ≤  (int) (Math.random() * 3) +1  <  3 +1
           1  ≤  (int) (Math.random() * 3) +1  <  4 (=1~3)

 

  • 1~10 사이의 난수를 20개 출력하시오.
    (1,2,3,4,5,6,7,8,9,10)
class OperatorEx22 { 

	public static void main(String[] args) {
		int num = 0;
		
		for (int i=1; i<=20; i++) {
		System.out.println((int) (Math.random()*10)+1); // 1 <= math.random() < 11
		}
	}
}

 

  • -5~5 사이의 난수를 20개 출력하시오.
    (-5,-4,-3,-2,-1,0,1,2,3,4,5)
class OperatorEx22 { 

	public static void main(String[] args) {
		int num = 0;
		
		for (int i=1; i<=20; i++) {
		System.out.println((int)(Math.random()*11)-5); // -5 <= math.random() < 6
		}
	}
}

 

  • 컴퓨터와 사용자가 가위바위보 하는 게임 
import java.util.*;

class OperatorEx22 { 

	public static void main(String[] args) {
		System.out.print("가위(1), 바위(2), 보(3) 중 하나를 입력하세요.> ");
		
		Scanner scanner = new Scanner(System.in);
		int user = scanner.nextInt();        //화면을 통해 입력받은 숫자를 user에 저장
		int com = (int)(Math.random()*3)+1;  // 1,2,3중 하나가 com에 저장
		
		System.out.println("당신은 "+user+"입니다.");
		System.out.println("컴퓨터는 "+com+"입니다.");
		
		switch(user-com) {
			case 1: case -2:
				System.out.println("당신이 이겼습니다.");
				break;
			case -1: case 2:
				System.out.println("당신이 졌습니다.");
				break;
			case 0: 
				System.out.println("비겼습니다.");
		}
		
	}
}
가위(1), 바위(2), 보(3) 중 하나를 입력하세요.> 1
당신은 1입니다.
컴퓨터는 3입니다.
당신이 이겼습니다.

 

  • 주민번호를 입력받아서 성별 확인해서 출력하기 
    문자열에 저장된 문자는 '문자열.charAt(index)'로 가져올 수 있는데, index는 0부터 시작
    그래서 8번째 문자는 regNo.charAt(8)이 아닌 regNo.charAt(7)이다.
import java.util.*;

class OperatorEx22 { 

	public static void main(String[] args) {
		System.out.print("주민번호를 입력하세요. (011231-1111222) > ");
		
		Scanner scanner = new Scanner(System.in);
		String regNo = scanner.nextLine();
		
		char gender = regNo.charAt(7);  //입력받은 번호의 8번째 문자를 gender에 저장
				
		switch(gender) {
		case '1': case '3':             //정수가 아니라 문자임 ' ' 
			System.out.println("당신은 남자입니다.");
			break;
		case '2': case '4':
			System.out.println("당신은 여자입니다.");
			break;
		default:
			System.out.println("유효하지 않은 주민등록번호입니다.");
		}
	}
}
주민번호를 입력하세요. (011231-1111222) > 111111-1111111
당신은 남자입니다.

 

  • 점수 입력받아서 학점 출력하기 ( 90점 이상: A, 80점 이상: B, 70점 이상: C, 미만 F )
    int / int 의 결과는 int 라는 점 이용
import java.util.*;

class OperatorEx22 { 

	public static void main(String[] args) {
		int score = 0;
		char grade = ' ';
		
		System.out.print("점수를 입력하세요. (1~100) > ");
		
		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine();  //화면을 통해 입력받은 내용을 문자열 tmp에 저장
		score = Integer.parseInt(tmp);    //입력받은 문자열(tmp)을 숫자로 변환
		
		switch(score/10) { 
		case 10: case 9:
			grade = 'A';
			break;
		case 8: 
			grade = 'B';
			break; 
		case 7: 
			grade = 'C';
			break;
		default:
			grade = 'F';
		}
		System.out.println("당신의 학점은 "+grade+"입니다.");
	}
}

 


2. 반복문 - for, while, do-while

  • 반복문(for, while) : 조건을 만족하는 동안 {}를 수행(0~n번)

 

2-1. for문 (~하는 동안)

조건을 만족하는 동안 블럭{ }을 반복 - 반복횟수를 알 때 적합 (모를 때는 while문)

 

for ( ①초기화; ②조건식; ④증감식 )  {
                            ③수행될 문장 (②조건식이 참일 때)
}
⇒ ②③④반복

ex)
for ( int i = 1; i <= 5; i ++ )  {                  // 1부터, 5까지, 1씩 증가 (i++) = (i=i+1)

                         System.out.println(”I can do it.”);
}

 

for (int i = 10; i <= 1; i--) { 
	System.out.println(i);
}
// 아무것도 안뜸. ( i=10일 때, 10≤1 은 벌써 거짓이기 때문에 아예 수행 안됨)

 

for (int i=1, j=10; i <= 10; i++, j--) { 
	System.out.println("i="+i+",j="+j);
}
i=1, j=10
i=2, j=9
i=3, j=8
i=4, j=7
i=5, j=6
i=6, j=5
i=7, j=4
i=8, j=3
i=9, j=2
i=10, j=1

// j=10은 항상 true.

 

  • 1부터 10까지 합 구하기
class OperatorEx22 { 

	public static void main(String[] args) {
		
		int sum = 0;  //합계를 저장하기 위한 변수
		
		for(int i=1; i<=10; i++)  {
		sum += i ;    // sum= sum+i;
		System.out.printf("1부터 %2d까지의 합: %2d%n", i, sum);  // %2d=두자리
		
		}
	}
}

 

 

2-2. 중첩 for문 

 

가로출력- print
세로출력- println

 

  • 삼각형 별 5줄 찍기
class OperatorEx22 { 

	public static void main(String[] args) {	
		for(int i=1; i<=5; i++) {        // i = 행의 개수
			for(int j=1; j<=i; j++) {    // j = 열의 개수 
				System.out.print("*");
			}
			System.out.println(" ");
		}
	}
}
* 
** 
*** 
**** 
*****
 i — j
1 — 1 *
2 — 2 **
3 — 3 ***
4 — 4 ****
⇒ 그래서 ( j < = i ) 로 설정하면 위 별모양이 나옴!

 

  • 구구단 출력하기
class OperatorEx22 {     //안쪽 for문 반복이 끝나야 바깥쪽 for문 다음 반복으로 넘어감

	public static void main(String[] args) {	
		
		for(int i=2; i<=9; i++) {
			for(int j=1; j<=9; j++) {
				System.out.printf("%d x %d = %d%n", i, j, i*j); //=System.out.println( i + " x " + j + " = " + (i*j) );
			}
		}
	}
}
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
3 x 1 = 3
...
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81

 

 

 

2-3. while문

조건을 만족시키는 동안, 조건이 거짓이 될 때까지 블럭{ }을 반복 - 반복횟수 모를 때 ( 알 때는 for문 )

 

while (조건식) {
             // 조건식의 연산결과가 참(true)인 동안 반복될 문장
}

1) 조건식이 참이면 블럭 안으로 들어가고, 거짓이면 while문을 벗어난다.
2) 블럭의 문장을 수행하고 다시 조건식으로 돌아간다. 

 

  • for문과 while문은 서로 100% 호환 가능!
    이 경우는 for문이 더 간결하지만, 초기화나 증감식이 필요하지 않은 경우 while문이 더 적합함
//초기화, 조건식, 증감식
for (int i=1; i<=10; i++) {
	System.out.println(i);
}
int i=1;        //초기화

while(i<=10) {  //조건식
	System.out.println(i);
    i+;         //증감식
}

 

  • while문의 조건식은 생략불가
    for문과 달리 while문의 조건식은 생략할 수 없다. 항상 참이 되도록 하려면 반드시 true를 넣어야 함.
for( ; ; )  {             // 조건식이 항상 참
     …
}



while(true)  {        // 조건식이 항상 참
     …
}

 

  • 변수 i의 값만큼 블럭 { }을 반복하는 예제 
class Ex4_12 {
	public static void main(String[] args) { 
		int i= 5;          //반복할 횟수 

		while(i--!=0) {    //1씩 감소 (i의 값이 0이 아닌 동안만 참, 0일때는 거짓이라서 끝남) 
			System.out.println(i + " - I can do it.");
		}
	} // main의 끝
}
4 - I can do it.
3 - I can do it.
2 - I can do it.
1 - I can do it.
0 - I can do it.

 

* 왜 5~1이 아닌 4~0이 출력되나? 

i-- 가 후위형이므로 조건식이 평가된 후에 i의 값이 감소

i=1일 때는, 조건식이 참으로 평가된 후에 i의 값이 1감소되어 0이 됨. 

감소연산자를 분리해보면 이해가 쉬움

while( i-- != 0 ) {
    System.out.println(i);

=
while( i != 0 ) {
    i-- ;
    System.out.println(i);

 

 

  • 1부터 몇까지 더하면 누적합계가 100을 넘지 않는 제일 큰 수가 되는지 
class Ex4_13 {
	public static void main(String[] args) {
		int sum = 0;
		int i = 0;
		// i를 1씩 증가시켜서 sum에 계속 더해나간다.
		while (sum <= 100) {
			System.out.printf("%d - %d%n", i, sum);  // printf(형식,앞에들어가는거,뒤에들어가는거) 
			sum += ++i;   // sum=sum+i 
		}
	} // main의 끝
}
0 - 0
1 - 1
2 - 3
3 - 6
4 - 10
5 - 15
6 - 21
7 - 28
8 - 36
9 - 45
10 - 55
11 - 66
12 - 78
13 - 91

 

 

  • 입력받은 숫자의 각 자리의 합을 구하기 (for문)
import java.util.*;

class Ex4_14 {
	public static void main(String[] args) { 
		int num = 12345, sum = 0;

		// 10으로 나머지 연산(num%10)을 하면 마지막 자리 값을 얻음

		for (num=12345; num>0; num=num/10) {  //증감식(각 자리 합을 구해야 하니까 계속 10으로 나눔)
  			System.out.println(num%10);
  			sum += num%10;   // sum=sum+num%10 (num을 10으로 나눈 나머지를 sum에 더함)
   	}
System.out.println("각 자리수의 합:"+sum);
	}
}
5
4
3
2
1
각 자리수의 합:15

 

  • 입력받은 숫자의 각 자리의 합을 구하기 (while문)
import java.util.*;

class OperatorEx22 { 

	public static void main(String[] args) {	

			int num = 12345, sum = 0;

			while (num>0) {             //조건식만 남김 
				sum += num%10;          //순서 조심! 
				System.out.println("sum="+sum+ ", num%10="+num%10);	
				num=num/10;
			}

			System.out.println("각 자리수의 합:"+sum);
		}
	}
sum=5, num%10=5
sum=9, num%10=4
sum=12, num%10=3
sum=14, num%10=2
sum=15, num%10=1
각 자리수의 합:15

 

 

2-4. do-while문

블럭{ }을 먼저 수행한 후에 조건식 평가

따라서 블럭{ }을 최소한 한번 이상 반복 - 사용자 입력받을 때 유용 (코드 중복을 피할 수 있음)

 

 while문
while (①조건식) {
          //②수행할 문장 ← 조건식에 해당하지 않으면 실행 안할수도 있음

                                             ( 0번 가능)
}


do-while문
do {
            //①조건식의 연산결과가 참일때 수행할 문장 ( 처음 1번은 무조건 실행 )
} while (②조건식) ; ← 끝에 ‘;’을 잊지 않도록 주의


 

 

  • 1과 100사이의 임의의 수를 맞출 때 까지 반복하기
import java.util.*;

class OperatorEx22 { 

	public static void main(String[] args) {	
		
		int answer=0, input=0;
		answer= (int)(Math.random()*100)+1;  // 1~100사이의 임의의 수를 저장
		
		Scanner scanner = new Scanner(System.in);
			
			do { 
				System.out.print("1과 100사이의 정수를 입력하세요.> "); //얘네도 반복해야 되니까 do 안에 넣어줌
				input = scanner.nextInt();
			
				if(input>answer) {
					System.out.println("더 작은 값으로 다시 시도해보세요.");
				} else if(input<answer) {
					System.out.println("더 큰 값으로 다시 시도해보세요.");
				}
			} while(input!=answer);
			
			System.out.println("정답입니다.");			
		}
	}
1과 100사이의 정수를 입력하세요.> 50
더 작은 값으로 다시 시도해보세요.
1과 100사이의 정수를 입력하세요.> 30
더 큰 값으로 다시 시도해보세요.
1과 100사이의 정수를 입력하세요.> 40
더 작은 값으로 다시 시도해보세요.
1과 100사이의 정수를 입력하세요.> 35
더 큰 값으로 다시 시도해보세요.
1과 100사이의 정수를 입력하세요.> 39
정답입니다.

 

 

2-5. break문

자신이 포함된 가장 가까운 반복문을 벗어난다.

 

  • 1부터 몇까지 더하면 합이 100을 넘는지
    무한반복문에는 조건문과 break문이 항상 같이 사용된다. 그렇지 않으면 무한
    히 반복.
class OperatorEx22 { 

	public static void main(String[] args) {	
		
		int i = 0;
		int sum = 0;
		
		while(true) {     //무한반복문(true생략불가) =/= for(; ;)
			if(sum>100)
				break;    //if조건을 만족하면 수행되어 반복문 벗어남
			++i;
			sum+=i;
		}
		
		System.out.printf("i=%d%nsum=%d%n", i, sum);
	}
}

 

 

2-6. continue문

자신이 포함된 반복문의 끝으로 이동 - 반복문을 벗어나지 않고 다음 반복으로 넘어감

전체 반복 중에서 특정 조건시 반복을 건너뛸 때 유용

 

 

  • 1과 10사이의 숫자를 출력하되 그 중에서 3의 배수인 것은 제외
class OperatorEx22 { 

	public static void main(String[] args) {	
		
		for(int i=0; i<=10; i++) {
			if(i%3==0)
				continue; //다음 문장들을 건너뛰고 블럭의 끝으로 이동 (0,3,6,9 빠짐)
			System.out.println(i);
		}
	}
}
1
2
4
5
7
8
10

 

  • 메뉴 선택 예제
import java.util.*;

class OperatorEx22 { 

	public static void main(String[] args) {	
		
		int menu=0;
		
		Scanner scanner = new Scanner(System.in); 
		
		while(true) { 
			System.out.println("(1) square");
			System.out.println("(2) square root");
			System.out.println("(3) log");
			System.out.print("원하는 메뉴(1~3)를 선택하세요. (종료:0)>");
			
			String tmp=scanner.nextLine();
			menu= Integer.parseInt(tmp);
			
			if(menu==0) {
				System.out.println("프로그램을 종료합니다.");
				break;
			} else if (!(1<=menu && menu<=3)) {
				System.out.println("메뉴를 잘못 선택하셨습니다. (종료는 0)");
				continue;
			}
			
			System.out.println("선택하신 메뉴는 "+menu+"번입니다.");
			
		}
		
	}
}
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요. (종료:0)>3
선택하신 메뉴는 3번입니다.
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요. (종료:0)>4
메뉴를 잘못 선택하셨습니다. (종료는 0)
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요. (종료:0)>0
프로그램을 종료합니다.

 

 

2-7. 이름 붙은 반복문

중첩 반복문에 이름을 붙이고 break문과 continue문에 이름을 지정해줌으로써 하나 이상의 반복문을 벗어날 수 있다.

( break ; 근접한 하나의 반복문만 벗어남 )

 

 

  • 구구단 출력
class OperatorEx22 {   //구구단 출력

	public static void main(String[] args) {	
		
		Loop1 : for(int i=2; i<=9; i++) {
				for(int j=1; j<=9; j++) {
					if(j==5)
						break Loop1; //이 아래 세 문장 중 하나를 선택해보기
//						break;
//						continue;
					
					System.out.println(i+"*"+j+"="+i*j);
				}  //end of for i
				System.out.println();
		}   //end of Loop1
		
	}
}
2*1=2
2*2=4
2*3=6
2*4=8

 

 

  • 메뉴 선택하면 해당 연산 수행
import java.util.*;

class OperatorEx22 {   //메뉴 선택-해단 연산 반복 수행

	public static void main(String[] args) {	
		
		int menu=0, num=0;
		
		Scanner scanner = new Scanner(System.in); 
		
		Loop1: while(true) {
			System.out.println("(1) square");
			System.out.println("(2) square root");
			System.out.println("(3) log");
			System.out.print("원하는 메뉴(1~3)를 선택하세요. (종료:0) >");
			
			String tmp=scanner.nextLine();
			menu=Integer.parseInt(tmp);
			
			if(menu==0) {
				break;
			} else if (!(1<=menu && menu<=3)) {
				System.out.println("메뉴를 잘못 선택하셨습니다. (종료는 0)");
				continue;
			}
			
			for(;;) {
				System.out.print("계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99)>");
				
				tmp=scanner.nextLine();
				num=Integer.parseInt(tmp);
				
				if(num==0) 
					break;
				if(num==99)
					break Loop1;
				
				switch(menu) {
				case 1 : 
					System.out.println("result="+num*num);
					break;
				case 2 : 
					System.out.println("result="+Math.sqrt(num));
					break;
				case 3 : 
					System.out.println("result="+Math.log(num));
					break;
				}	
			}    //for문 
		}     //while문	
		System.out.println("프로그램이 종료되었습니다.");
	}
}
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요. (종료:0) >1
계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99)>5
result=25
계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99)>0
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요. (종료:0) >2
계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99)>25
result=5.0
계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99)>99
프로그램이 종료되었습니다.