JAVA - 조건문과 반복문

Luna·2022년 11월 29일
0

JAVA

목록 보기
4/32

조건문

  • if문, switch문

if문

  • 점수와 같이 연속된 데이터, 비교문이 몇 개 안되는 경우
  • if (조건) {실행 한 개;} else {실행 한 개;}

switch문

  • 비연속 데이터, 비교문이 많을 경우
  • switch(변수 또는 변수를 포함한 연산식) {case 값: 처리문 break; default : 처리문}

예제 1

import java.util.Scanner;

public class SwitchStringExample {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("직책을 입력 해 주세요. ");
		String position = scanner.nextLine();
//		String position ="과장";	// 수정 전 코드
		
        // java 6버전부터 문자열 비교를 해준다. 6버전 미만은 문자열은 사용하지 못한다.
		switch(position) {
		case "부장": // position = 부장인 경우 이동해서 실행된다. 틀리면 다음 case나 default를 찾아간다.
			System.out.println("700만원");
			break; // switch문을 빠져나간다
		case "과장": // position = 과장인 경우 이동해서 실행된다. 틀리면 다음 case나 default를 찾아간다.
			System.out.println("500만원");
			break; // switch문을 빠져나간다
		default : // case외의 다른 값인 경우 이동해서 실행된다.
			System.out.println("300만원");
			break; // switch문을 빠져나간다 (default는 break 생략가능)
		}
		scanner.close();
	}
}

예제는 scanenr메서드를 쓰지 않았으나, 추가해서 직접 직책을 입력할 수 있게 코드를 수정 해 보았다.

예제 1을 이용해 코딩해보기

import java.util.Scanner;

public class BoardController {
	static Scanner scanner = new Scanner(System.in);
	public static void main(String[] args) {
		System.out.println("선택할 항목의 번호를 입력 해주세요.");
		System.out.println("1.리스트, 2.글보기, 3.글쓰기, 4.글수정, 5.글삭제, 0.종료");
		System.out.print("입력 >> ");
			
		String menu = scanner.nextLine();
		
		// 이동 라벨 정의 - switch, for, while문 바로 위에 정의. 
		//break 라벨이름; - 라벨 이름 바로 밑에 있는 구문을 빠져나간다.
//		switchLoop:
			
		switch (menu) {
		case "1":
			System.out.println("리스트");
			break;
		case "2":
			System.out.println("글보기");
			break;
		case "3":
			System.out.println("글쓰기");
			break;
		case "4":
			System.out.println("글수정");
			break;
		case "5":
			System.out.println("글삭제");
			break;
		case "0":
			System.out.println("종료");
//			break switchLoop; // 종료하는방법1. 자바 응용 프로그램을 완전히 종료한다.
//			return; 		  // 종료하는방법2. 메서드를 빠져나간다.
			System.exit(0);	  // 종료하는방법3. 
		default:
			System.out.println("잘못 입력 하셨습니다.");
			break;
		}
	}
}

입력되는 값에 숫자를 썼으나, 연산하거나 하는 활동을 하지 않아서 Integer로 변환하지 않고 String 타입을 그대로 사용 하였다. 단순히 break;를 사용해서 종료를 하게 되면 for문이나 while문 같은 반복문이 무한 루프에 빠질 수 있기 때문에 응용프로그램을 완전히 종료하는 것이 좋다. 이 때 쓰는 방법은 switchLoop를 사용하거나, System.exit(0);을 쓰거나(생성자 안에는 0을 사용해야 완전히 빠져나감, 아무 숫자나 쓰지 말 것), 메인 메서드로 돌아가는 return;을 사용하면 된다.


반복문

  • for문, while문, do-while문

for문

  • for (초기값; 반복 실행 조건; 증감값) {처리문}
  • 반복되는 횟수가 정해져 있는 경우 ex) 1부터 10까지 반복처리
  • 배열처리 for문 (int i=1; i<=10; i++) scores[i]
  • 향상된 for문 for(int score : score)

처리되는 순서

  1. 초기값
  2. 비교
  3. 처리문
  4. 증감
  5. 2->3->4 반복 처리

예제 1

// 1부터 10까지 출력하는 프로그램
public class ForPrintFrom1To10Example {
	public static void main(String[] args) {
		
		// 반복문 처리의 변수는 i,j,k... 로 사용한다.
		// for (초기값; 반복처리조건; 증감)
		for (int i=1; i<=10; i++) {
			System.out.println(i);
		}
//		System.out.println(i);
		// for문 밖에서는 for문 안에서 선언된 변수를 사용할 수 없다.
		
		int i = 1; // 초기값
		for(; i<=10; i++) { // for(; 조건; 증감)
			System.out.println(i);
		}
		// for문 밖에서 선언 됐으므로 변수 i사용가능.
		System.out.println(i);
		
		i = 1; // 초기값
		for(; i<=10;) { // for(; 반복처리조건 ;)
			// 처리
			System.out.println(i);
			// 증감
			i++;
		}
		
		i = 1;
		for(;;) { // for(;;) - 무한 반복
			// 빠져나가는 조건
			// break; - switch, for, while문을 빠져나간다.
			if(i > 10) // i가 10보다 커지면
				break; // 빠져나가라.
			System.out.println(i);
			i++;
		}
	}
}

for문은 초기값과, 반복처리조건, 증감값을 넣는데 초기값과 증감값은 for문 밖에서 선언이 가능하다. 그리고 반복 처리 조건을 생략 하게 되면 무한 반복을 하게 되므로, 꼭 빠져나갈 수 있는 코딩을 해줘야 한다.


while문

  • 반복처리 횟수는 정해져 있지 않는 경우. 조건문에 의해서 결정이 된다.
  • while (반복 실행 조건) {처리문}
  • 무한반복 처리를 하려면 while(true) 빠져나가려면 if(!(반복조건)) break;
  • 프로그램 종료 System.exit(0)

예제 1

public class WhileSumFrom1To100Example {

	public static void main(String[] args) {
		int sum = 0;
		int i = 1;
		while(i<=100) {
			sum += i;
			i++;
		}
		System.out.println("1~"+(i-1)+"합 : "+sum);
	}
}

while문의 무한반복은 while(true) 라고 작성하면 되고, while문 안에 if(조건) break;를 넣어주면 조건을 만족할 시 프로그램은 종료된다.

예제 2

import java.util.Scanner;

public class BoardController2 {
	static Scanner scanner = new Scanner(System.in);

	public static void main(String[] args) {
    
		// 무한 반복 시작
		while (true) {
			System.out.println("선택할 항목의 번호를 입력 해주세요.");
			System.out.println("1.리스트, 2.글보기, 3.글쓰기, 4.글수정, 5.글삭제, 0.종료");
			System.out.print("입력 >> ");
			String menu = scanner.nextLine();

			switch (menu) {
			case "1":
				System.out.println("리스트");
				break;
			case "2":
				System.out.println("글보기");
				break;
			case "3":
				System.out.println("글쓰기");
				break;
			case "4":
				System.out.println("글수정");
				break;
			case "5":
				System.out.println("글삭제");
				break;
			case "0":
				System.out.println("종료");
				System.exit(0); // 시스템 종료.
			default:
				System.out.println("잘못 입력 하셨습니다.");
				break;
			} // end of switch
		} // end of while
	} // end of main()
} // end of BoardController2 class

위에서 만들어봤던 switch문에 while문을 추가해서 0번을 입력하기 전까지 무한반복 하는 프로그램을 만들어 보았다. 1번부터 5번까지 선택 했을 시 종료가 되고, 잘못 입력 되었을 때만 반복할 수 있는 프로그램은 어떻게 해야 할 지 생각을 해 봐야겠다. (1번부터 5번 case에 전부 종료 메서드를 달아야 하는지..?)


do-while문

예제 1

import java.util.Scanner;

// while 반복문 안에서 실행 결과에 따라 반복할지말지에 대한 데이터 변경이 되고 있다.
// 먼저 반복문으로 들어가고 조건을 나중에 물어보는 do{}
public class DoWhileExample {

	public static void main(String[] args) {
		System.out.println("메세지를 입력하세요.");
		System.out.println("프로그램을 종료하려면 \"q\"를 입력하세요");

		Scanner scanner = new Scanner(System.in);
		String inputString; // 입력받을 문자열 변수 선언.

		do {
			System.out.print(">");
			inputString = scanner.nextLine();
			System.out.println(">"+inputString);
		} while (!inputString.equals("q")); // q가 아니면 반복처리, q면 반복을 멈춤.

		scanner.close();
		System.out.println("프로그램 종료");
		
	} // end of main()

} // end of DoWhileExample class

한 번이라도 실행되게 만드려면 do-while문을 사용 하면 된다. break;break;가 포함된 switch, for, while문만 빠져나갈 수 있다.


Continue

예제 1

public class DoublePrintExample {

	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			if (i % 4 != 0) {
				continue; // 4의 배수가 아니면 반복 처리 되는 시작 위치로 올라간다.
			} // end of if

			System.out.println(i); // 4의 배수가 맞다면 밑으로 내려와서 출력.

		} // end of for

	} // end of main()

} // end of class

for(int i = 4; i <=10; i += 4) System.out.println(i) 이렇게 한 줄로 짜게 되면 프로그램을 최소한으로 돌려서 같은 결과를 나오게 할 수 있다. 코딩에 정답은 없고 먼저 생각나는걸로 코딩을 해서 일단 프로그램이 돌아가서 올바른 결과값이 나온다면, 그 다음에 코드를 수정하는 것이 좋다.

0개의 댓글