본문 바로가기
개발/JAVA

자바 - 반복문 for 문 (1)

by chansungs 2020. 6. 14.
728x90
반응형

안녕하세요~ 오늘은 자바 반복문 중 for문에 대해 이야기해보려고 합니다.

 for문은 프로그래밍에서 가장 많이 사용되는 반복문 중 하나로, 조건을 만족하는 동안 반복적으로 코드를 실행합니다. 이를 통해 반복적인 작업을 효과적으로 처리할 수 있습니다. 하지만 for문을 사용하는 방법에 따라 코드의 성능과 가독성이 크게 달라질 수 있기 때문에, 잘 활용하는 것이 중요합니다. 이번 포스트에서는 for문의 기본 구조와 사용 방법에 대해 자세히 알아보도록 하겠습니다.

 

for 문

// 반복문
// 특정 소스 코드를 반복해서 실행하고자 할 때 사용하는 문법

// for / while / do ~ while

// for 반복문
// for( 초기화 코드 ; 조건식 ; 증감식 )
//		반복할 실행 코드;

// for 반복문의 실행 과정
// 1. 초기화 코드
// 2. 조건식( 참과 거짓 )
// 3-1. 조건식이 참일 경우 실행코드 실행
// 3-2. 조건식이 거짓일 경우 반복문을 종료
// 4. 증감식
// 5. 조건식
// ...
public class Control_Statement_For_01 {
	public static void main(String[] args) {		
		
		System.out.println("프로그램 시작!");
		
		// for 반복문은 초기화구문에서 생성한 변수의 값을 조절하여
		// 반복을 실행하는 구조를 가집니다.
		for( int i = 10 ; i >= 1 ; i-- )
			System.out.printf("i = %d\n", i);
		
		System.out.println("프로그램 종료!");

	}
}

제어문의 복합된 사용

반복문 내부의 분기문

제어문은 서로 다른 제어문 내부에 포함되어 작성될 수 있습니다.'

 

// 제어문의 복합된 사용
// 반복문 내부의 분기문
// 제어문은 서로 다른 제어문 내부에 포함되어 작성될 수 있습니다.
public class Control_Statement_For_02 {
	public static void main(String[] args) {
		
		// 1 ~ 10 까지의 정수 중, 짝수에 해당되는 수만 출력하세요.
		for( int i = 1 ; i < 11 ; i++ ) {
			// 반복문 내부의 분기문 작성
			// 1 ~ 10 까지의 정수 중 짝수만 출력
			if( i % 2 == 0 )
				System.out.printf("i = %d\n", i);
		}
		
		/*
		// 증감식을 변경하여 1씩 증가되는 것이 아닌 원하는 수 만큼
		// 증가 / 감소시킬 수 있습니다.
		for( int i = 2 ; i < 11 ; i += 2 )
			System.out.printf("i = %d\n", i);
		*/

	}
}
// 변수 생성 시, 동일한 이름으로는 생성할 수 없습니다.
int n = 10;
System.out.printf("n = %d\n", n);

// 동일한 이름의 변수는 생성할 수 없습니다.		
// int n = 100;

// for 문 내부에서 사용되는 모든 변수는 for 문의 실행 과정동안 
// 유효한 변수입니다.
for( int i = 1 ; i <= 3 ; i++ ) {
System.out.printf("i = %d\n", i);
}

// 기존의 i 변수는 반복문의 종료와 함꼐 소멸된 상태이므로
// 반복문이 끝난 이후에는 접근(사용)할 수 없는 변수입니다. 
// System.out.printf("i = %d\n", i);

for( int i = 1 ; i <= 3 ; i++ ) {
System.out.printf("i = %d\n", i);
}

반복문을 활용한 값의 누적!!!

// 1 ~ 10 까지 정수들의 합계를 구해서 출력하세요.
// 1 + 2 + 3 + ... + 10 = ?

for( int i = 1, sum = 0 ; i < 101 ; i++ ) {
	sum += i;	// sum = sum + i;
	System.out.printf("i = %d, sum = %d\n", i, sum);
}

// 컴파일 에러 발생
// sum 변수는 for 문이 종료되면서 소멸되었기 때문에
// System.out.printf("1 ~ 100까지의 합계는 %d 입니다.\n", sum);

// 값의 누적을 위해서는 반복문 내부에 누적 변수를 선언하지 않고
// 반복문 외부에서 선언합니다.
// 누적된 값을 반복문 외부에서 사용할 수 있도록..
int sum = 0;
for( int i = 1 ; i < 101 ; i++ ) {
	sum += i;	// sum = sum + i;
	System.out.printf("i = %d, sum = %d\n", i, sum);
}
System.out.printf("1 ~ 100까지의 합계는 %d 입니다.\n", sum);

1 ~ 100 까지의 정수 중,

3의 배수 또는 7의 배수들의 합계를 계산하여 출력하세요

// 1 ~ 100 까지의 정수 중, 
// 3의 배수 또는 7의 배수들의 합계를 계산하여 출력하세요.

// 누적에 사용할 변수는 반드시 초기화가 되어야 합니다.(0)		
int sum = 0;
for( int i = 1 ; i <= 100 ; i++ ) {
	// 특정 수의 배수 여부를 판단할 때, 나머지 연산을 활용합니다.
	if( i % 3 == 0 || i % 7 == 0 )
		sum += i;
}

System.out.printf("1 ~ 100까지의 정수 중, 3, 7의 배수 합계는 %d 입니다.\n", sum);

사용자에게 정수 3개를 입력받습니다.

입력된 정수의 합계와 가장 큰 수, 가장 작은 수를 출력하세요.

import java.util.Scanner;
public class Control_Statement_For_05 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		// 사용자에게 정수 3개를 입력받습니다. 
		// 입력된 정수의 합계와 가장 큰 수, 가장 작은 수를 출력하세요.
		
		// 1. 입력과 처리
		// - 변수의 선언
		int number;
		// 주의사항!! 합계에 사용될 변수는 반드시 초기화가 되어야합니다.
		int tot = 0, max = 0, min = 0;
		
		// 반복문을 활용한 값의 입력
		for( int i = 1 ; i <= 3 ; i++ ) {
			System.out.printf("%d번째 정수 입력하세요 : ", i);
			number = in.nextInt();
			
			// 반복을 수행하는 과정에서 값을 누적(합계)
			tot += number;
			
			// 반복을 수행하면서 최대/최소값을 비교
			// 중요!!!
			// 최대와 최소의 기준은 주어진 값 중에서 설정해야합니다.
			if( i == 1 )
				max = min = number;
			else {
				if( number > max )
					max = number;

				if( min > number )
					min = number;
			}
		}
		
		System.out.printf("입력된 정수들의 합계는 %d 입니다.\n", tot);
		System.out.printf("입력된 정수 중, 최대값은 %d 입니다.\n", max);
		System.out.printf("입력된 정수 중, 최소값은 %d 입니다.\n", min);

	}
}

반복문을 종료하는 방법

// 반복문을 종료하는 방법
// - 기본적으로 반복문은 조건이 거짓이 될때까지 실행문을 실행합니다.
// - 아래의 반복문은 조건이 항상 true 이므로 반복문이 종료되지 않습니다.(무한반복)
/*
for( int i = 1 ; i <= 10 ; ) {
	System.out.println(i);
}
*/

// - 만약 반복을 수행하는 도중, 반복문의 조건이 false가 아니더라도
// 종료를 바라는 경우 break 키워드를 사용할 수 있습니다.
// break 키워드
// - if문을 제외한 첫번째 블럭(영역)을 빠져나가는 명령
// - switch, 모든 반복문에서 사용
// - 반복문에 break를 사용하는 경우 반복문의 강제 종료를 의미합니다.
for( int i = 1 ; i <= 15 ; i++ ) {
	
	if( i > 10 ) {
		break;
	}
	
	System.out.printf("i = %d\n", i);
}

반복문 for문 문제

import java.util.Scanner;
public class Control_Statement_For_06_EX {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		// 아래와 같이 동작하는 프로그램을 작성하세요.

		// 좌항의 정수를 입력하세요 : 50
		// 부호를 입력하세요 : +
		// 우항의 정수를 입력하세요 : 20
		// 결과 : 50 + 20 = 70
		// 계속하시겠습니까?(y/n) : y
		// 좌항의 정수를 입력하세요 : 50
		// 부호를 입력하세요 : +
		// 우항의 정수를 입력하세요 : 20
		// 결과 : 50 + 20 = 70
		// 계속하시겠습니까?(y/n) : n
		// 프로그램 종료
		
		// 1. 입력과 처리
		// - 변수 선언
		int leftNum, rightNum;
		char op;
		int result;
		char isEnd;
		// - 입력 과정과 처리 과정의 작성
		// (무한반복의 형태로 처리)
		for(;;) {
			System.out.print("좌항의 정수를 입력하세요 : ");
			leftNum = in.nextInt();
			
			System.out.print("부호를 입력하세요 : ");
			// 문자(char)를 입력받는 방법
			// - 문자열을 입력받은 후, 첫번째 글자를 추출하는 방식
			op = in.next().charAt(0);
			
			System.out.print("우항의 정수를 입력하세요 : ");
			rightNum = in.nextInt();
			
			switch( op ) {
				case '+' : result = leftNum + rightNum; break;
				case '-' : result = leftNum - rightNum; break;
				case '*' : result = leftNum * rightNum; break;
				case '/' : result = leftNum / rightNum; break;
				case '%' : result = leftNum % rightNum; break;	
				default : 
					op = '?'; 
					result = 0;
			}
			
			if( op != '?' )
				System.out.printf("결과 : %d %c %d = %d\n", leftNum, op, rightNum, result);
			else
				System.out.println("잘못된 부호가 입력되었습니다.");
			
			// 반복문의 강제 종료를 위한 처리 과정
			System.out.print("계속하시겠습니까?(y/n) : ");
			isEnd = in.next().charAt(0);
			
			// 대소문자를 같이 비교해야만 오작동을 방지할 수 있습니다.
			if( isEnd == 'n' || isEnd == 'N' )
				break;
		}
		
		System.out.println("프로그램 종료!");		
	}
}
728x90
반응형