JAVA/자바 이론 / / 2021. 4. 12. 17:29

Java | 3-1 반복문과 배열

01. 반복문 (for, while, do-while)

02. 배열

  - 1차원 배열

  - 2차원 배열

  - 비정방형 배열

  - 메소드에서 리턴하는 배열

 

# 반복문

º 자바 반복문의 종류

- for 문

- while 문

- do while 문

 

# for 문의 구성

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

         .. 작업문 ..

}

 

# for 문

º for 문 속에서 변수를 선언할 수 있다. 이 변수는 for 문 안에서만 유효하다.

º 조건식이 true이거나 비어 있는 경우는 무한 반복 (infinite loop)이 된다. 루프를 벗어나기 위해 break문을 쓸 수 있다.

º '반복 후 작업'할 일이 여러 개 있는 경우는 콤마(,)로 분리하여 쓸 수 있다.

 

# while 문의 구성

while (조건식) {

      .. 작업문 ..

}

 

# while 문

º 반복 조건이 true이면 반복, false이면 반복 종료

º 반복 조건이 없으면 컴파일 오류

º 처음부터 반복조건을 통과한 후 작업문 수행

º 괄호 속이 true인 경우는 무한 반복을 뜻한다. while문을 벗어나려 할 때는 break문을 사용하면 된다.

 

# do-while 문의 구성

do {

    .. 작업문 ..

} while(조건식);

 

# do-while 문

º 무조건 최소 한번 작업문 실행, 한 번 실행한 후에 조건 점검

º 반복 조건이 true이면 반복, false이면 반복 종료

º 반복 조건이 없으면 컴파일 오류

º do-while을 벗어나기 위해서는 do-while 문 안에서 break 문을 사용하면 된다.

 

ex) 입력된 수의 평균 구하기 (while의 조건)

import java.util.Scanner;
public class WhileSample {
	public static void main (String[] args) {
    	Scanner rd = new Scanner(System.in);
        int n = 0;
        double sum = 0;
        int i = 0;
        while((i=rd.nextInt()) !=0) {
        	sum += i;
            n++;
        }
        System.out.println("입력된 수의 개수는 " + n + "개이며 평균은 " + sum / n + "입니다.");
    }
}

ex) 입력된 숫자 개수 세기 (while, break)

import java.util.Scanner;
public class BreakSample {
	public static void main (String[] args) {
    	Scanner in = new Scanner(System.in);
        int num = 0;
        
        while (true) {
        	if(in.nextInt() == -1)
            	break;
            num ++ ;
        }
        System.out.println("입력된 숫자의 개수는 " + num);
    }
}

# continue 문

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

ex) 5개의 정수를 입력 받고 그 중 양수들만 합하여 출력하는 프로그램

import java.util.Scanner;
public class ContinueEx {
	public static void main (String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        System.out.println("정수를 5개 입력하세요.");
        int sum = 0;
        for(int i=0; i<5; i++) {
        	int n = scanner.nextInt();  //키보드에서 정수 입력
            if(n<=0)
            	continue;  //양수가 아닌 경우 다음 반복으로 진행
            else
            	sum += n;  //양수인 경우 덧셈
        }
        System.out.println("양수의 합은 " + sum);
        
        scanner.close();
     }
}

 

# break 문

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

- 하나의 반복문만 벗어남

- 중첩 반복의 경우 안쪽 반복문의 break문이 실행되면 안쪽 반복문만 벗어남

# 배열 (Array)

º 동일한 종류의 데이터를 순차적으로 저장하는 공간

º 배열 원소의 인덱스는 배열의 시작 위치에서부터 데이터가 저장되어 있는 곳의 상대적인 위치를 나타냄

º 인덱스는 0부터 시작

 

# 1차원 배열의 선언

º 배열 선언과 배열 생성의 두 단계가 필요하다.

º 배열 선언

int intArray[];
char charArray[];
float floatArray[];

º 배열 생성

intArray = new int[10];
charArray = new char[20];
floatArray = new float[5];

º 배열 선언과 동시에 생성

int intArray[ ] = new int[10];
char charArray[ ] = new char[20];
float floatArray[ ] = new float[5];

º 배열 선언과 초기화

int intArray[ ] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

# 배열 선언과 생성의 차이

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

(2) 배열 생성

# 배열 참조

º 배열 생성

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

º 배열 원소에 대입

intArray[1] = 2;
myArray[1] = 6;

- 여러 레퍼런스가 하나의 배열을 참조할 수 있다.

 

ex) 배열에 입력받은 5개의 수 중에서 가장 큰 수 찾기

import java.util.Scanner;
public class ArrayAccess {
	public static void main (String[] args) {
    	Scanner in = new Scanner(System.in);
        int intArray[] = new int[5];
        int max = 0;
        
        for(int i = 0; i < 5; i++) {
        	intArray[i] = in.nextInt();
            if(intArray[i] > max)
            	max = intArray[i];
        }
        System.out.print("입력된 수에서 가장 큰 수는 " + max + "입니다.");
    }
}

# 배열의 크기와 인덱스

º 배열 인덱스

- 인덱스는 0부터 시작하며 마지막 인덱스는 (배열 크기 -1)임

- 인덱스는 정수 타입만 가능

º 배열의 크기

- 배열의 크기는 배열 레퍼런스 변수를 선언할 때 결정되지 않음

- 배열의 크기는 배열 생성 시에 결정되며, 나중에 바꿀 수 없음

- 배열의 크기는 배열의 length라는 필드에 저장

    int size = intArray.length;

ex) 배열의 length 필드를 이용하여 배열 크기만큼 키보드에서 정수를 입력받고 평균을 구하는 프로그램

import java.util.Scanner;
public class ArrayLength {
	public static void main (String[] args) {
    	Scanner in = new Scanner(System.in);
        int intArray[] = new int[5];
        double sum = 0;
        
        for(int i =0; i<intArry.length; i++)
        	intArray[i] = in.nextInt();
        for(int i = 0; i<intArray.length; i++) {
        	sum += intArray[i];
        }
        System.out.print("배열 원소의 평균은 " + sum/intArray.length + "입니다.");
     }
}

# 배열과 for-each 문

º for-each 문 : 배열(array)이나 열거형 변수(enumeration)의 각 원소를 순차적으로 접근하는데 유용한 for 문

public class ForeachEx { 
	enum Week { 월, 화, 수, 목, 금, 토, 일}
    
    public class void main(String[] args) {
    	int[] num = {1, 2, 3, 4, 5};
        String names[] = {"사과", "배", "바나나"};
        int sum = 0;
        
    for (int k : num)
    	sum += k;
    System.out.println("합은 " + sum);
    
    for (String s : names)
    	System.out.print(s + " ");
    System.out.println();
    
    for (Week day : Week.values())
    	System.out.print(day + "요일 ");
    System.out.println();
  }
}

 # 2차원 배열의 length 필드

int i[ ][ ] = new int[2][5];
int size1 = i.length; //2
int size2 = i[0].length; //5

º 2차원 배열의 length

- i.length -> 2차원 배열의 행의 개수로서 2

- i[n].length 는 n번째 행의 열의 개수

   i[0].length -> 0번째 행의 열의 개수로서 5

   i[1].length -> 1번째 행의 열의 개수로서 역시 5

 

ex) 한 회사의 지난 3년간 분기별 매출의 총핵과 연평균 매출을 구하는 프로그램

public class SalesRevenue {
	public static void main (String[] args) {
    	int intArray[][] = {{90,90,110,110}, {120,110,100,110}, {120,140,130,150}};
        double sum = 0;
        
        for (int i = 0; i < intArray.length; i++)
        	for (int j = 0; j < intArray[i].length; j++)
            	sum += intArray[i][j];
                
        System.out.println("지난 3년간 매출 총액은 " + sum + "이며 연평균 매출은 " + sum/intArray.length + "입니다.");
     }
}

# 비정방형 배열

º 정방형 배열

- 각 행의 열의 개수가 같은 배열

int i[][];
i = new int[4][4];

 

º 비정방형 배열

- 각 행의 열의 개수가 다른 배열

int i[][];
i = new int [4][];
i[0] = new int [1];
i[1] = new int [2];
i[2] = new int [3];
i[3] = new int [4];

º 비정방형 배열의 length

- i.length -> 2차원 배열의 행의 개수 (4)

- i[n].length는 n번째 행의 열의 개수

  i[0].length -> 0번째 행의 열의 개수 (1)

  i[1].length -> 1번째 행의 열의 개수 (2)

  i[2].length -> 2번째 행의 열의 개수 (3)

  i[3].length -> 3번째 행의 열의 개수 (4)

 

public class IrregularArray {
	public static void main (String[] args) {
    	int a = 0;
        int intArray[][] = new int[4][];
        intArray[0] = new int[3];
        intArray[1] = new int[2];
        intArray[2] = new int[3];
        intArray[3] = new int[2];
        
        for (int i = 0; i < intArray.length; i++)
        	for (int j = 0; j < intArray[i].length; j++)	
            	intArray[i][j] = (i+1)*10 + j;
                
        for (int i = 0; i < intArray.length; i++) {
        	for (int j = 0; j <intArray[i].length; j++)
            	System.out.print(intArray[i][j]+ " ");
            System.out.println();
         }
     }
}

# 메소드에서 배열 리턴

º 메소드가 리턴하는 배열

- 메소드가 리턴하는 배열의 타입과 차원은 리턴받는 배열 레퍼런스의 타입과 차원에 일치해야 함.

- 리턴 타입에 배열의 크기를 지정하지 않음.

int[] makeArray() {
	int temp[] = new int[4];
    return temp;
}

ex) 배열을 생성하고 각 원소 값을 출력하는 프로그램을 작성하시오, 배열 생성은 배열을 생성하여 각 원소의 인덱스 값으로 초기화하여 반환하는 메소드를 이용한다.

public class ReturnArray {
	static int[] makeArray() {
    	int temp[] = new int[4];
        for (int i=0; i<temp.length; i++)
        	temp[i] = i;
        return temp;
     }
     public static void main (String[] args) {
     	int intArray [];
        intArray = makeArray();
        for (int i=0; i<intArray.length; i++)
        	System.out.println(intArray[i]);
     }
}

'JAVA > 자바 이론' 카테고리의 다른 글

Java | 4-1 클래스와 객체  (0) 2021.04.14
Java | 3-2 예외 처리  (0) 2021.04.12
Java | 2-2 자바 기본 프로그래밍  (0) 2021.04.11
Java | 2-1 자바 기본 프로그래밍  (0) 2021.04.11
Java | 1-2 자바 기본 프로그래밍  (0) 2021.04.11
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유