Java 3-1) 순환문 for / for 이용해 합계, 평균, 최대값 구하기 / 이중 for문 활용한 구구단 프로그램
* 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 진행
}