[5주차] 자바 프로그래밍

Useful·2023년 4월 3일
1

Java

목록 보기
3/10
post-thumbnail

반복문과 배열 그리고 예외처리

반복문의 종류

  • for 문
  • while 문
  • do-while 문

1. for문

1-1 ) for 문의 구성

// for문의 구성
for(초기문; 조건식; 반복후작업) {
	...작업문..
}

// 예시 1 : i가 0~9까지 10번 반복
for(i=0; i<10; i++){
	System.out.print(i);
}

// 예시 2 : 반복문에 변수 선언 가능
for(int i=0; i<10; i++) {
	System.out.print(i);
}

// 예시 3 : 0에서 100까지 합 구하기
int sum = 0;

for(int i=0; i<10; i++) {
	sum += i;
}
System.out.print(sum);

1-2 ) for문의 특이한 형태

// 반복조건이 true이면 무한 반복
for(초기작업; true; 반복후작업) {
	...
}
// 비어있어도 true로 간주 무한반복
for(초기작업; ; 반복후작업) {
	...
}
// 반복후 작업을 , 로 구분할 수 있음
for(int i=0; i<10; i++, System.out.print(i)) {
	...
}

1-3 ) : for문을 이용하여 1부터 10까지 합 출력

package test;

public class ForSample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int sum = 0;
		
		for(int i=1; i<=10; i++) {
			sum += i;
			System.out.print(i);
			
			if(i<=9) {	// 9보다 작거나 같으면 + 기호 출력
				System.out.print("+");
			} else {	// 10이되면 = 을 찍고, 누적된 값 sum을 출력
				System.out.print("=");
				System.out.print(sum);
			}
		}
	}

}
//결과 : 1+2+3+4+5+6+7+8+9+10=55

2. While문

2-1 ) while 문의 구성

  • 반복 조건이 true면 반복, false면 반복 종료
  • 반복 조건이 없으면 컴파일 오류
  • 처음부터 반복조건을 통과한 후 작업문 수행
// while 문의 구성
while (조건식) {
	..작업문..
}

// 
int i = 0;

while(i<10) {
	System.out.print(i);
    i++;
}

2-2 ) 예제 : -1이 입력될 때까지 입력된 수의 평균 구하기

package test;

import java.util.Scanner;

public class WhileSample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int count =0;
		int sum = 0;
		Scanner sc = new Scanner(System.in);
		System.out.println("정수를 입력하고 마지막에 -1을 입력하세요.");
		
		int n = sc.nextInt();
		while(n!= -1) {
			sum += n;
			count++;
			n = sc.nextInt();
		}
		
		if(count == 0) System.out.println("입력된 수가 없습니다.");
		else {
			System.out.println("정수의 개수는" + count + " 개 이며");
			System.out.println("평균값은 " + (double)sum/count + "입니다");
		}
	}

}
/* 
결과 : 
  정수를 입력하고 마지막에 -1을 입력하세요.
  30 45 60 -1
  정수의 개수는3 개 이며
  평균값은 45.0입니다
*/

3. do-while 문

3-1 ) do-while 문 (이건 개인조사 후 정리한 거)

조건식이 true이든 false이든 상관없이
중괄호({ }) 안의 문장을 무조건 한번 실행시킨 후 조건을 검사하여 반복을 결정

// do-while문의 구성
do {
   	..작업문..
} while(조건식);

// do-while문 예시
int i = 0;
do {
	System.out.print(i);
    i++
}while(i <= 10);
// 결과 : 0123456789

조건식에 관계 없이 무조건 한번 실행시킨다고 했는데 한번 알아보자

int i = 0;
do {
	System.out.print("do-while문 테스트!");
    i++
}while(i < 1); 	// 조건이 충족되지 않음.

// 결과 : do-while문 테스트!

조건식을 만족하지 못해도 일단 중괄호({ }) 안에 문장을 무조건 한번 실행하는 것을 볼 수 있다."

3-2 ) 예제 : A-Z까지 출력하고 알파벳의 개수도 출력하시오.

package test;

public class DoWhileSample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char c = 'A';
		int count = 0;
		
		do {
			System.out.print(c);
			c = (char) (c + 1);	// C + 1을 해버리면 정수값으로 바뀌기 때문에 괄호를 씌운 후, 형변환 해줘야함
			count++;			
		} while(c <= 'Z');
		
		System.out.println();
		System.out.println("알파벳의 개수는" + count + "개 입니다.");
	}
}
/* 결과 : 
  ABCDEFGHIJKLMNOPQRSTUVWXYZ
  알파벳의 개수는26개 입니다.
*/

4. 중첩 반복

반복문이 다른 반복문을 내포하는 구조

  • 이론적으로 몇번이고 중첩 반복 가능
  • 너무 많은 중첩 반복은 프로그램 구조를 복잡하게 하므로 2중 또는 3중 반복이 적당


다음은 1000명의 학생이 있는 100개의 대학의 모든 학생의 성적의 합을 구하는,
for문을 이용한 이중 중첩 구조이다.

for(int i=0; i<100; i++) {	// 100개의 학교 성적을 모두 더한다
	...
    
	for(int j=0; j<1000; j++) {	// 각 학교에 해당하는 1000명의 학생 성적을 모두 더한다.
    	...
        ...
    }
    ...
}

5. continue문

반복문을 빠져 나가지 않으면서 다음 반복으로 진행

for(초기문; 조건식; 반복후 작업) {
	........
	continue;
    ........
}

while(조건식) {
	........
	continue;
    ........
}

do {
	........
	continue;
    ........
}while(조건식);

5-1 ) 예제 : continue 문을 이용하여 양수 합 구하기

10번 반복, 입력되는 정수의 값이 홀수면 더하고, 짝수면 skip,
홀수 입력의 횟수와 더한 값을 출력하세요.

package test;

import java.util.Scanner;

public class ContinueExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		
		System.out.println("정수를 10개 입력하세요");
		int sum = 0;
		int count = 0;
		
		for(int i=0; i<10; i++) {
			int n = sc.nextInt();
			if(n%2 == 0) {
				continue;
			} else { 
				sum += n;
				count++;
			}
		}
		System.out.println("전체 홀수 입력의 횟수 : " + count);
		System.out.println("더한 값 출력 : " + sum);
	}

}
/* 결과 : 
  정수를 10개 입력하세요
  10 -10 20 -20 30 -30 40 -40 5 50
  전체 홀수 입력의 횟수 : 1
  더한 값 출력 : 5

*/

6. break문

반복문 하나를 완전히 빠져 나갈 때 사용

  • 하나의 반복문만 벗어남
  • 중첩 반복의 경우 안쪽 반복문의 break 문이 실행되면 안쪽 반복문만 벗어남
// break문 구성
for(초기문; 조건식; 반복 후 작업) {
	.....
	break;
    .....
}

// 이중 중첩에서의 break문
for(초기문; 조건식; 반복 후 작업) {
	while(조건식) {
    	.....
		break;	// while문에서만 벗어남.
    	.....
    }
}

7. 배열이란?

  • 인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료 구조
    • 배열을 이용하면 한번에 많은 메모리 공간 할당 가능
  • 같은 타입의 데이터들이 순차적으로 저장
    • 인덱스를 이용하여 원소 데이터 접근
    • 반복문을 이용하여 처리하기에 적합
  • 배열 인덱스
    • 0부터 시작
    • 인덱스는 배열의 시작 위치에서부터 데이터가 있는 상대 위치

-- TMI --

자바에서의 배열은 하나의 객체로 이루어졌다고 보자
객체의 return 값은 메모리주소(ref)이다

7-1 ) 일차원 배열 만들기

배열 선언과 배열 생성의 두 단계 필요

  • 배열 선언
int intArray[];  혹은  int[] intArray;
char charArray[] 혹은  char[] charArray;
  • 배열 생성
intArray = new int[10];  혹은  int intArray[] = new int[10];
  • 선언과 함께 초기화
    • 배열 선언 시, 값 초기화
	int intArray[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};	// 초기화된 값의 개수(10)만큼의 배열 생성 
  • 잘못된 배열 선언
    int intArray[10] // 컴파일 오류, 배열의 크기를 지정하면 안됨.

7-2 ) 레퍼런스 변수와 배열

레퍼런스 변수 : 객체의 시작점 주소를 갖고 있는 변수

(1) 배열에 대한 레퍼런스 변수 intArray 선언
int intArray [];

(2) 배열 생성
intArray = new int [5];

7-3 ) 배열을 초기화하면서 생성한 결과

int intArray[] = {4, 3, 2, 1, 0};

/*
	intArray  ->  4  intArray[0]
    			  3  intArray[1]
                  2  intArray[2]
                  1  intArray[3]
                  0  intArray[4]
*/


double doubleArray[] = {0.01, 0.02, 0.03, 0.04};

/*
	doubleArray  ->  0.01  doubleArray[0]
    			     0.02  doubleArray[1]
                     0.03  doubleArray[2]
                     0.04  doubleArray[3]
*/

7-4 ) 배열 인덱스와 원소 접근

배열 변수명과 [] 사이에 원소의 인덱스를 적어 접근

  • 배열의 인덱스는 0부터 시작
  • 배열의 마지막 항목의 인덱스(배열크기 - 1)
	int intArray [] = new int[5];	// 원소가 5개인 배열 생성, 범위는 0~4
    intArray[0] = 5;
    intArray[3] = 6;
    int n = intArray[3];
  • 인덱스의 범위
n = intArray[-2];	// 오류, 인덱스로 음수는 사용 불가
n = intArray[5];	// 오류, 5는 인덱스의 범위 (0~4)를 넘었음.
  • 반드시 배열 생성 후 접근
int intArray []; 	// 레퍼런스 변수만 생성
intArray[1] = 8;	// 오류, 생성 되지 않은 배열을 사용

7-5 ) 레퍼런스 치환과 배열 공유

하나의 배열을 다수의 레퍼런스가 참조 가능

	int intArray[] = new int[5];
    int myArray[] = intArray;		// 주소값을 myArray에 넣어줌.
    
    intArray[1] = 2;
    myArray[1] = 6;		//기존의 2는 지워지고 새로이 6이 담긴다.

7-6 ) 예제 : 배열에 입력받은 수 중 제일 작은 수 찾기

package test;

import java.util.Scanner;

public class ArrayAcess {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int intArray[] = new int[5];
		int min = 10;
		
		System.out.println("양수 5개를 입력하세요.");
		
		for(int i=0; i<5; i++) {
			intArray[i] = sc.nextInt();
			if(intArray[i] < min) {
				min = intArray[i];
			}
		}
		System.out.println("가장 작은 수는 " + min + "입니다.");
	}

}
/*
결과 :

양수 5개를 입력하세요.
5
6
7
15
50
가장 작은 수는 5입니다.

*/

8. 배열의 크기, length 필드

배열은 자바에서 객체로 관리

배열 객체 내에 length 필드는 배열의 크기를 나타냄.

int intArray[];
intArray = new int[5];

int size = intArray.length;
// size는 5 값을 가진다.

8-1 ) 예제 : 배열 원소의 평균 구하기

배열의 length 필드를 이용하여 배열 크기만큼 정수를 입력 받고 평균을 구하는 프로그램을 작성하라

package test;

import java.util.Scanner;

public class ArrayLength {

	public static void main(String[] args) {
		int intArray[] = new int[7];
		int sum = 0;
		
		Scanner sc = new Scanner(System.in);
		System.out.print(intArray.length + "개의 정수를 입력하세요 >>");
		
		// 입력받은 정수를 각각의 배열 원소에 저장
		for(int i=0; i<intArray.length; i++) {
			intArray[i] = sc.nextInt();
		}
		
		// 변수 sum에 입력받은 정수의 합계를 저장
		for(int i=0; i<intArray.length; i++) {
			sum += intArray[i];
		}
		
		System.out.println("평균은 " + (double)sum/intArray.length);
		sc.close();
	}
}
/*
결과 : 
7개의 정수를 입력하세요 >> 1 2 3 4 5 6 7
평균은 4.0
*/

9. 배열과 for-each 문

배열이나 나열(enumeration)의 각 원소를 순차적으로 접근하는데 유용한 for문

첫번째 예제

int [] num = {1, 2, 3, 4, 5};
int sum = 0;

for (int k : num)
	sum += k;
    
System.out.priintln("합은 : " + sum);
// 결과 : 합은 15

2번째 예제

String names[] \ {"사과", "배", "바나나", "체리", "딸기", "포도"};
for (String s : names)
	System.out.print(s + ", ");
// 결과 : 사과, 배, 바나나, 체리, 딸기, 포도

9-1 ) for-each 문 활용 예제

package test;

public class foreachEx {

	public static void main(String[] args) {
		int [] n = {1, 2, 3, 4, 5};
		String names[] = {"사과", "배", "바나나", "체리", "딸기", "포도" };
		
		int sum = 0;
		
		for (int k: n) {
			System.out.print(k + " ");
			sum += k;
		}
		System.out.println("합은 "  + sum);
		
		// 아래 for-each에서 s는 names[0], names[1], ... , names[5]로 반복
		for (String s : names) {
			System.out.print(s + " ");
		}
	}

}
/* 결과 :
	1 2 3 4 5 합은 15
	사과 배 바나나 체리 딸기 포도 
*/
profile
1 commit = 1 life

0개의 댓글