자바와 모든 프로그래밍의 기본이 되는 if문과 for문 그리고 제어의 이동에 대해 정리했어.

자바의 선택 제어문

자바는 선택 제어를 위해 if문과 switch문을 제공해. 먼저 기본적인 if-else문과 if-else-if문의 사용법을 살펴볼께.

if-else문

if(조건절) {
	문장 1;
} else {
	문장 2;
}

if-else-if 문

if(조건절) {
	문장 1;
} else if(조건절) {
	문장 2;
} else if(조건절) {
	문장 3;
} else {
	문장 n;
}

자바뿐 아니라 대부분의 프로그래밍 언어에서는 if문과 if-else문 그리고 switch문을 많이 사용해. if{… }구문을 통해서 프로그램을 제어하는 거야. 간단하게 샘플 코드를 작성해볼께.

아래의 샘플 코드는 사용자로 부터 데이터를 입력받아서 이 데이터를 정수로 변환한 다음 if문의 조건절을 통해 데이터와 비교하여 메세지를 출력하는 프로그램이야.

class IFelse {
	public static void main(String args[]) {
		int month = Integer.parseInt(args[0]);
		//실행 명령에서 사용자로 부터 데이터를 입력받아 정수로 변환한 다음 month에 저장
		String MtoS;

		if(month == 12 || month == 1 || month == 2) {
			MtoS = "겨울";
		} else if(month == 3 || month == 4 || month == 5) {
			MtoS = "봄";
		} else if(month == 6 || month == 7 || month == 8) {
			MtoS = "여름";
		} else if(month == 9 || month == 10 || month == 11) {
			MtoS = "가을";
		} else {
			MtoS = "해당되는 계절이 없습니다.";
		}

		System.out.println( month + "월은 " + MtoS + "입니다.");

	}
}

그리고 if문과 함께 자주 사용되는 switch문의 기본적인 사용법은 아래와 같아.

 switch(수식) {
 	case 값1:
 		처리문장;
 		break;
 	case 값2:
 		처리문장;
 		break;
 	case 값3:
 		처리문장;
 		break;
 	default:
 		묵시적으로 처리해야 하는 문장;
 }

아래는 switch문을 사용해서 숫자를 비교하여 가위, 바위, 보를 출력하는 작성한 간단한 프로그램이야.

class Switch {
	public static void main(String args[]) {
		for(int i=1; i<5; i++) {
			switch(i) {
				case 1:
					System.out.println( i + " : 가위" );
					break;
				case 2:
					System.out.println( i + " : 바위" );
					break;
				case 3:
					System.out.println( i + " : 보" );
					break;
				default:
					System.out.println( i + "는 1에서 3사이의 값이 아닙니다." );
			}
		}
	}
}

자바의 반복문

자바는 반복 논리를 제공하기 위해 while, do-whild, for 문을 제공하고 있어. 반복문을 작성할 때 반복을 위한 제어 코드가 한 줄이라면 {와 }를 사용할 필요가 없지만 만약 반복될 문장이 여러 문장일 경우에는 {와 }를 사용하여 블록으로 지정해줘야 돼.

while

while은 조건절로 지정된 조건이 참일 동안에만 while 블록을 실행하는 반복문이야. 사용방법은 아래와 같아.

while(조건절) {
	반복문장;
}
int a = 10, b = 20;
while(a>b) {
	System.out.println("이 문장은 영원히 나타나지 않음");
}

아래는 while을 반복문을 사용한 간단한 샘플 코드야.

class While {
	public static void main(String args[]) {
		int n = 1;
		System.out.print("1 부터 10사이의 정수 = ");
		while(n<11) {
			System.out.print(n + " ");
			n++;
		}
	}
}
class WhileNoBody {
	public static void main(String args[]) {
		int i = 10, j = 20;
		while( ++i < --j) {
			System.out.print("10과 20사이의 중간값은 " + i + "입니다.");
		}
	}
}

do-while

do-while문은 조건을 나중에 평가하는 반복문인데 while 블록이 적어도 한번은 수행하도록 되어 있어. 사용법은 아래와 같아.

do {
	반복 문장
} while(조건절);

아래는 do-while 반복문을 사용한 간단한 샘플 코드야.

class DoWhile {
	publid static void main(String args[]) {
		int n = 1;
		System.out.println("** 구구단 3단 **");

		do {
			System.out.println(" " + 3 + "*" + n + " = " + (3*n));
			n++;
		} while(n<10);
	}
}

또는 아래처럼 직접 조건구문에 증가구문을 포함시킬 수도 있어.

class DoWhile {
	publid static void main(String args[]) {
		int n = 1;
		System.out.println("** 구구단 3단 **");

		do {
			System.out.println(" " + 3 + "*" + n + " = " + (3*n));
		} while(++n<10);
	}
}

do-while과 switch를 사용한 간단한 프로그램

class DoUseMenu {
	public static void main(String args[]) throws java.io.IOException {
		char choice;

		do {
			System.out.println("객체지향 용어 설명");
			System.out.println("1. 객체");
			System.out.println("2. 클래스");
			System.out.println("3. 메세지");
			System.out.println("4. 상속");
			System.out.print("원하는 번호를 입력하세요 : ");
			 choice = (char) System.in.read();
		} while( choice < '1' || choice > '4');

		System.out.println("\n");

		switch(choice) {
			case '1' :
				System.out.println("*****객체*****");
				System.out.println("객체는 정보를 관리하기 위한 논리적인 단위");
				break;
			case '2' :
				System.out.println("*****클래스*****");
				System.out.println("클래스는 객체를 생성하는 템플릿");
				break;
			case '3' :
				System.out.println("*****메시지*****");
				System.out.println("메시지는 객체에게 일을 시키는 행위");
				break;
			case '4' :
				System.out.println("*****상속*****");
				System.out.println("상속은 상위 클래스로부터 모든 속성과 절차를 이어받는다.");
				break;
		}
	}
}

for문

for문은 주어진 초기값을 시작으로 조건을 만족하는 동안 블록을 수행하는 제어문이야. 초기값 설정을 수행하고 조건을 판단하여 참(true)이면 블록을 수행하고 증감 부분을 수행하지.

for문의 사용법은 아래와 같아.

for(초기값; 조건;증감) {
	 반복 문장들
}

처음 프로그래밍을 접하는 초보자라면 for문을 이해하는 것이 조금 어려울 수도 있어. 하지만 매우 자주 사용되는 반복문이기 때문에 잘 알아두는 것이 좋아.

아래의 for문을 사용한 샘플 코드들을 참고하면 도움이 될 꺼야.

class For {
	public static void main(String args[]) {
		int n;
		System.out.print("1에서 10까지의 정수 : ");
		for(n = 1; n < 11; n++) {
			System.out.print(n + " ");
		}
	}
}
class Nestedfor {
	public static void main(String args[]) {
		int i, j;
		for(j = 1; i<10; i++) {
			for(j = 1; j<i; j++) {
				System.out.print(" * ");
			}
			System.out.println();
		}
	}
}
class DoubleC {
	public static void main(String args[]) {
		int a, b;
		for(a=1, b=10; a<b; a++, b--) {
			System.out.print("a = " + a);
			System.out.println("b = " + b);
		}
	}
}
class Forflag {
	public static void main(String args[]) {
		int i;
		boolean flag = false;
		i = 1;
		for( ; !flag; ) {
			System.out.println("i의 값은 " + i + "입니다.");
			if(i == 10) flag = true;
			i++;
		}
	}
}
class Alphabet {
	public static void main(String args[]) {
		int i;
		char c;
		for(i=0; i<26; i++) {
			System.out.print((char)('A' + i));
			System.out.print("(" + ('A' + i) + "), ");
			System.out.print((char)('a' + i));
			System.out.print("(" + ('a' + i) + ") \t");
			if(i%5 == 4) {
				System.out.println();
			}
		}
	}
}
class MinMax {
	public static void main(String args[]) {
		int n = Integer.parseInt(args[0]);
		int m = Integer.parseInt(args[1]);
		int i;
		for(i=1; i<=m*n; i++) {
			if((i%n==0) && (i%m == 0)) {
				break;
			}
		}
		System.out.print("최소 공배수는 " + i + "입니다.");

		for(i=ㅜ; i>=1; i--) {
			if((m%i==0) && (n%i == 0)) {
				break;
			}
		}
		if(i==1) {
			System.out.print("최대 공약수가 없습니다.");
		} else {
			System.out.print("최대 공약수는 " + i + "입니다. ");
		}

	}
}

제어의 이동

자바는 프로그램의 제어를 이동시키기 위해 break, continue, return 문을 사용해.

break

break문은 크게 아래의 3가지를 위해 사용해.

  • switch문에서 switch 문을 벗어날 때 사용
  • 반복문에서 반복루프를 벗어날 때 사용
  • 기존 프로그램 goto문의 개선된 형태로 사용

아래의 샘플 코드들은 break문을 사용한 예제들이야.

class ForBreak {
	public static void main(String args[]) {
		for(int i=0; i<100; i++) {
			if(i==10) break;
			System.out.println(i + "자바의 세계로 오세요!");
		}
		System.out.println("break에 의해서 for문이 중단되었습니다.");
	}
}
class WhileBreak {
	public static void main(String args[]) {
		int i = 0;
		while(i<100) {
			if(i==10) break;
			System.out.println(i + "자바의 세계로 오세요!");
			i++;
		}
		System.out.println("break에 의해서 while문이 중단되었습니다.");
	}
}
class NestedForBreak {
	public static void main(String args[]) {
		int i, j;
		for(i=1; i<10; i++) {
			for(j=1; j<i; j++) {
				if(j>6) break; //내포된 반복문만 벗어남
				System.out.print(" * ");
			}
			System.out.println();
		}
	}
}
class BreakTest {
	public static void main(String args[]) {
		boolean t = true;
		first: {
			second: {
				third: {
					System.out.println("thire 블록 'break' 문장 전");
					if(t) break second; //second 블럭 밖으로 제어가 이동
					System.out.println("third 블록 'break' 문장 후");
				}
				System.out.println("second 블록 문장");
			}
			System.out.println("first 블록 문장");
		}
	}
}
//에러가 나는 경우의 예시
class BreakErr {
	public static void main(String args[]) {
		one: for(int i=0; i<3; i++) {
			System.out.print("Pass " + i + ": ");
		}

		for(int j=0; j<100; j++) {
			if(j == 10) break one; //내포된 상태가 아니기 때문에 에러 발생
			System.out.print(j + " ") ;
		}
	}
}

continue

continue는 반복문의 특정지점에서 제어를 반복문의 처음으로 보내는 구문이야.

continue를 사용한 코드 예제는 아래와 같아.

class ContinueTest {
	public static void main(String args[]) {
		for(int i=0; i<10; i++) {
			if(1%2 == 0) continue;
			System.out.println(i + "자바의 세계로 오세요!");
		}
	}
}
class ContinueLabelTest {
	public static void main(String args[]) {
		outer: for(int i=0; i<10; i++) {
			for(int j=0; j<10; j++) {
				if(j > i) {
					system.out.println();
					continue outer; //outer로 지정된 for 블록 처음으로 제어 이동
				}
				System.out.print(" " + (i*j));
			}
		}
	}
}

return

return은 제어를 메소드를 호출한 곳으로 반환하는 구문이야.

return을 사용한 코드 예제는 아래와 같아.

class Return {
	public static void main(String args[]) {
		boolean t = true;
		System.out.println("알기 쉽게 해설한 자바!");
		if(t) return;
		System.out.println("자바를 배워봅시다."); //실행되지 않음
	}
}

Leave a Reply

Your email address will not be published. Required fields are marked *

Latest Post