package arrays;
import java.util.Scanner;
public class Quiz10 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int bufSize = 3, dataInputCnt = 0; // bufSize - 배열의 크기, dataInputCnt - 현재 배열에 저장된 데이터 갯수 저장용도
int array[] = new int[bufSize];
while (true) {
for (int cnt = bufSize - 3; cnt < array.length; cnt++) {
// cnt = bufSize - 3;
// -> 이전까지 사용된 저장공간 그 이후부터 사용하기 위함.
try {
System.out.printf("현재 배열의 길이 : %d\n정수데이터 입력 : ", bufSize);
array[cnt] = sc.nextInt();
} catch (Exception e) {
System.out.println("잘못된 형식의 입력입니다. 다시 입력하세요...");
sc.nextLine();
cnt--;
continue;
}
dataInputCnt++; // 다음 반복문 실행 시 저장된 데이터 갯수를 증가시키기 위함
// 저장된 데이터의 갯수만큼만 출력(dataInputCnt를 통해서 for문 통제)
for (int cnt2 = 0; cnt2 < dataInputCnt; cnt2++)
System.out.print(array[cnt2] + " ");
System.out.println();
}
// 기존 배열의 크기를 늘리려면 새로 선언을 해줘야 한다.
// 이에 따라 기존 배열의 주소값을 잃게 되면서 데이터 또한 잃게 된다.
// 1) 참조배열을 임시로 선언하여 기존 배열의 주소값을 넘겨주는 방식
// 2) 기존 배열과 같은 크기의 임시 배열을 선언하여 데이터를 잠시 옮겨 보관하는 방식
int arrayTmp[] = new int[bufSize];
for (int cnt = 0; cnt < array.length; cnt++)
arrayTmp[cnt] = array[cnt];
bufSize += 3;
array = new int[bufSize];
for (int cnt = 0; cnt < bufSize - 3; cnt++)
array[cnt] = arrayTmp[cnt];
}
}
}
JAVA/배열