Coding Note/Java

Java 3-1) 순환문 for / for 이용해 합계, 평균, 최대값 구하기 / 이중 for문 활용한 구구단 프로그램

푸린이 2021. 12. 9. 02:19

* for문

- 지정 횟수에 따라 반복하는 제어문

 

// 형식

변수의 선언 (밖 혹은 for문 내)

for(변수의 (선언 또는) 초기화; 조건식; 연산식) {           → 초기화는 딱 한번만

          처리

}

 

// 순서

변수의 선언(1)

for( (3)   ;  (2)(6)(9)   ; (5)(8)   ){

          처리 (4)(7)

}

(10)             → 빠져나옴

int n;     // n = 0으로 해놓고 아래 초기화를 비워둬도 됨
for(n = 0; n < 2; n++) {  // 0, 1 총2번 처리됨 -> 탈출
	System.out.println("for loop" + n);
}
	System.out.println(n);

 

// 변수 선언과 블록괄호{}의 상관관계

int num1;  // 블록괄호{}영역 외부에 선언하면, 안팎으로 활동, 바깥에 변수가 많으면 신경쓸 것이 많음

{
	int num2;	// {} 내부에서 선언하면, 안에서만 활동

	num1 = 1;
	num2 = 3;
}

num1 = 2;
num2 = 4;  // 불가

 

// for문 예시

for(int i = 0; i < 10; i++) {  // i 선언과 동시에 값을 집어넣음
System.out.print(i + " ");  // 10번(0~9) 반복 후 탈출, print 써서 한줄에 출력
}

System.out.println();

for(int i = 10; i >= 0; i--) { // 10부터 0까지
System.out.print(i + " ");
}

System.out.println();

for(int i = 0; i < 10; i=i+2) {  // 2씩 증가  i+=2
System.out.print(i + " ");
}

- increse / derease

- i는 for문 안에서만 영향 → 다른 for문 안에서 i 변수 사용 가능, 이름만 같을 뿐 작동 되는 for문은 다름

 

// endless loop 무한루프 : 조건식이 없을 때

for(int i = 0; ; i++) {
	System.out.println(i + " ");
}

- 조건식 자리가 비어있음

- 무한 출력됨

 

예제1) 1 ~ 100까지 숫자를 더한 합을 구하라

int sum = 0;  // 변수 선언 먼저
for(int i = 1; i <= 100; i++) {  
	sum = sum + i;  // 1부터 100까지 더하기
}
System.out.println("sum : " + sum);

- 처리에서 출력되는 것이 아닌 연산식이라 더할 수 있음

- sum = sum + i == sum += i

 

예제2) 학생 6명의 국어성적의 합계와 평균 (배열)

- 점수 : 90, 85, 95, 100, 85, 75

int numArr[] = new int[6];   // 배열변수 선언
numArr[0] = 90;
numArr[1] = 85;
numArr[2] = 95;
numArr[3] = 100;
numArr[4] = 85;
numArr[5] = 75;

int sum = 0;   // 합계 구하기
for(int i = 0; i < numArr.length; i++) {
	sum += numArr[i];
}
	System.out.println("sum : " + sum);

double avg = (double)sum / numArr.length;   // 평균 구하기
System.out.println("avg : " + avg);

- 배열변수 선언 및 초기화는 int numArr[] = {90, 85, 95, 100, 85, 75}; 이렇게 표현도 가능

- 조건식을 배열의 길이로 지정하면 배열의 개수가 변경돼도 계산 가능

- 평균 구할 때 cast 변환을 이용해 소수점 계산 가능

 

예제3) 위의 배열을 이용하여 최고 점수를 출력해라

int max = numArr[0];
for (int i = 1; i < numArr.length; i++) {
	if(max < numArr[i]) {
		max = numArr[i];
	}
} 
System.out.println("max : " + max);

- 변수 선언 시 max = 0 으로 초기화하는 것보다 이것이 더 정확함(값이 마이너스일 때 등)

- 90(max)이랑 85(numArr[1]) 비교 → 90보다 85가 작으니까 max = 90,  ... → 90 95 100 탈출

 

예제4) 성춘향을 찾아라, 그에 맞는 번호도 찾아라

String names[] = { "홍길동", "일지매", "성춘향", "홍두깨" };

위의 배열을 이용하여 찾아라

int number = 0;
for(int i = 0; i < names.length; i++) {
	number++;
	if(names[i].equals("성춘향")) {
		System.out.println("찾았습니다");
		System.out.println("번호는 " + number + "번 입니다.");
	}
}

- number 변수 대신 i를 사용한다면 (i+1)이 들어감

 

// for each : 간결하게 데이터 가져옴, 명확하진 않음

String names[] = { "홍길동", "일지매", "성춘향", "홍두깨" };

int numArr[] = new int[6];
numArr[0] = 90;
numArr[1] = 85;
numArr[2] = 95;
numArr[3] = 100;
numArr[4] = 85;
numArr[5] = 75;

for (int i=0; i < names.length; i++) {
	System.out.println(names[i]);
}

for (int num : numArr) {
	System.out.print(num + " ");
}
System.out.println();

for(String name : names) {
	System.out.print(name + " ");
}
System.out.println();

- : 뒤의 값을 : 앞으로 순차적으로 대입

 

// 이중 for문 (for문 안에 for문)

for(int i=0; i < 10; i++) {
	System.out.println("i = " + i);

	for(int j=0; j < 5; j++) {
		System.out.println("\tj = " + j);
	}
}

- i가 0일 때 j 5번 루프, i가 1일 때 j 5번 루프...... j는 총 50번 루프

 

// 이중 for문 활용) 구구단  i * j = (i * j)

for(int i=1; i < 10; i++) {

	for(int j = 1; j < 10; j++) {
	System.out.print(i + " x " + j + " = " + (i * j) + " ");
	}
	System.out.println();
}

 

// 2차원 배열 활용한 이중 for문

int array2[][] = {      // 초기화     // [3][4] = [4]array2[3]
	{11, 12, 13, 14},	// array2[0].length
	{21, 22, 23, 24},
	{31, 32, 33, 34},
};

for(int i = 0; i < array2.length; i++) {
	for(int j = 0; j < array2[i].length; j++) {
		System.out.print(array2[i][j] + " ");
	}
	System.out.println();  // 한 행을 작성되면 탈출 후 개행, 다음 i 진행
}