본문 바로가기

develop/Java

무한 루프, do-while, 배열(Array)

무한 루프 

 

조건식을 잘못 설정하거나 개발자가 의도적으로 설계한 경우 반복문이 끝나지 않고 계속 반복되는 경우를

무한 루프라고 한다. 

무한루프는 프로그램이 한 번 실행되면 계속 반복 수행되어야하거나 특정 조건이 성립되기 전까지 반복을 계속해야 하는 경우에 사용된다. 

 

for(;;){}

	while(true){}

 

1. for문의 무한 루프

 

for(;;){
	System.out.println("Hello, World!");
}

 

 

2. while문의 무한 루프

 

while(true){
	System.out.println("Hello, World!");
}

 

 

3. 무한 루프 탈출 방법은?

 

if 조건문을 사용해서 break를 이용해 탈출한다. 

 

int i = 1;

while(true){
	i++;
	if(i>100000){
    break;
	}
}

//num이 10만보다 크면 반복 종료

 

 

do-while

 

 

 

while문은 조건식을 판별하여 true가 되면 반복을 진행하는 반복문이였다. 그래서 조건이 충족되지 않을 경우

반복문이 실행되지 않을 수 있는데 그와 달리 , 

do-while문은 일단 먼저 반복문을 실행하고 반복문이 끝나는 지점에서 조건식을 판별하여 반복 여부를 결정한다. 

그래서 무조건 단 한 번은 반복을 실행한다. 

 

 

do {

	//반복 실행할 문장
} while(조건식);
=> 주의! 반드시 마지막 while문 뒤에 세미콜론(;) 필수다. 
int i = 11;

do {
	System.our.println("Hello,World!")
} while(i<=10);

 

 

 

배열 (Array)

 

1. 같은 타입의 여러 데이터를 하나의 묶음으로 다루는 것. 연관된 정보를 그룹화 하는데 사용된다. 

=동일한 데이터타입을 갖는 변수들의 집합

2. 배열은 메모리 상의 연속된 공간에 생성된다. 

=따라서, 한번 생성한 배열의 크기는 변경이 불가능하다. 

3.기본 데이터타입과 참조 데이터타입 모두를 배열로 생성 가능

4. 저장된 각 데이터들은 배열명(변수명)을 사용하여 관리

5. 배열의 크기는 배열명, length 속성을 사용하여 알아낼 수 있음

6. 배열 생성 시 각 데이터 저장 공간에는 자동으로 인덱스(첨자)가 부여됨

=인덱스 번호는 0부터 시작되며 배열크기 -1 까지 부여됨

ex) 5개 자리 배열 공간의 인덱스 : 0 ~ 4번까지

7. 배열을 사용하려면 배열 선언 -> 생성 -> 초기화 단계를 거쳐야 한다!

8. 배열을 생성하면 자동으로 해당 데이터타입의 기본값으로 초기화된다!

 

 

배열 선언하기 

데이터타입[] 배열변수명 : 

 

배열 선언만 하면 일반적인 데이터 저장은 불가능하다. 배열 생성을 하지 않으면 데이터 저장 공간이 없음

뒤에 배열이 생성된 후에, 배열의 주소값을 저장하기 위한 변수를 선언하는 과정이다!

 

 

 

배열 생성하기

배열변수명 = new 데이터타입[배열크기];

 

Heap이라는 메모리 공간에 실제 데이터 저장이 가능케 하는 연속된 공간을 할당받는다. 

해당 메모리 공간의 주소값을 배열명(변수명)에 저장

 

ex. heap 영역에 int형 데이터 5개를 저장할 수 있는 연속된 공간 5개 생성 후 해당 공간의 "주소값"을

변수 score에 저장.

 

배열 초기화하기

변수명[인덱스] = 데이터;

 

변수명에 해당하는 주소값을 따라가면 실제 배열 공간이 나오고 해당 공간의 인덱스 번호에 해당하는 공간에 데이터를 저장한다. 

 

또한 컴퓨터는 숫자를 0부터 카운팅 하는 특성이 있기 때문에 [0],[1].. 순서로 자리를 매긴다

그러나 존재하지 않는 인덱스 번호를 지정하면 실행 시 오류가 발생한다.

반드시 배열명과 인덱스 번호를 조합하여 저장 공간을 명시해야 한다. 

 

ex) 배열크기를 3으로 지정했는데 [4]로 초기화할 경우 오류 발생.

 

 

 

 

//배열을 사용하여 점수 (정수형 데이터) 5개를 저장

int[] score;


//배열 생성

score = new int[5];

//배열 초기화

score[0] = 90;
score[1] = 10;
score[2] = 70;
score[3] = 100;
score[4] = 80;

 

* 배열 인덱스 사용시 존재하지 않는 인덱스를 사용한 경우 컴파일 과정에서는 아무 문제가 없지만

코드를 실행하면 문제가 생긴다.! 

 

 

//boolean 타입 배열을 저장하는 변수 bArr을 선언하고 
//2개의 boolean 타입 데이터를 저장하는 배열 공간을 생성하고 0번에 true 입력

boolean[] = bArr;
bArr = new boolean[2];

bArr[0] = true;

 

 

실행하면 bArr[1] 은 false 가 나온ㄷㅏ.  (boolean 의 기본형 false)

 

 

 

배열 선언과 생성을 한번에 하기

 

원래는

데이터타입[] 변수명; <= 배열 선언

변수명 = new 데이터타입[배열크기]

이 둘을 이어주면 된다. 

 

데이터타입[] 변수명 = new 데이터타입[배열크기]

 

초기화도 같이 할 순 없을까?

 

 

배열 선언과 생성, 초기화를 한번에 수행하기

 

데이터 타입[] 변수명 = {데이터1,데이터2,...데이터n};

중괄호에 들어가는 데이터 수만큼의 크기를 갖는 배열이 생성되고, 지정된 값으로 초기화까지 이뤄진다.

사용할 데이터가 미리 다 준비된 경우에만 배열 ~ 초기화를 한번에 수행할 수 있다.

 

---------------------------------

 

 

배열의 모든 요소에 접근하는 반복문

 

ex) for문을 사용해 배열 인덱스 0 ~ 4까지 반복하기  

 

int[] arr = {10,20,30,40,50};
	for(int i = 0; i <score.length; i++){
    	System.out.println(arr[i]);
       }

for의 조건문에 구체적인 숫자 대신에 배열명.length를 넣어주면 간단하다. 

 

 

 

'develop > Java' 카테고리의 다른 글

메소드 method -(1)  (0) 2021.02.03
배열(Array) - 2차원 배열  (0) 2021.01.31
반복문 제어 break, continue  (0) 2021.01.27
for 문과 while문 - 중첩 (2)  (0) 2021.01.25
for 문과 while문 - (1)  (0) 2021.01.23