course 2021/JAVA

day06 - array insert, update, delete

코딩하는토끼 2021. 8. 24. 14:37

> array insert 삽입

배열의 원소에 원하는 값을 넣기

Scanner scan = new Scanner(System.in);

String[] arr = new String[100];  //크기 100 배열 arr 선언
int count = 0;  //음식의 개수 변수 & 배열의 인덱스 역할

System.out.println("먹고 싶은 음식을 입력하세요.");

while(true) { 
    System.out.print(">");
    String menu = scan.nextLine();  //menu 입력받음
    if(menu.equals("그만")) break;  //그만 이라고 입력 시 반복 종료
    arr[count] = menu;  //배열에 입력받음 menu를 차례대로 넣음
    count++;  //menu를 하나 입력 받을 때마다 1씩 증가시켜 배열의 인덱스를 이동시켜줌
}

// 먹고 싶은 음식을 입력하세요.
// >팝콘
// >도넛
// >그만
// 예를 들어 위와 같이 출력/입력된다면, 배열은 {팝콘, 도넛, null, null, null, ..., null} 와 같이 나머지 원소들이 모두 null로 채워짐

//결과 
//Arrays.toString(arr) 이용 시 위와 같이 출력되므로, 아래와 같이 원소를 이용하여 출력
System.out.print("[");
for(int i = 0; i < count; i++) {
    System.out.print(arr[i]);
    if(i == count - 1) break;
    System.out.print(", ");
}
System.out.println("]");

// [팝콘, 도넛]

> array update 수정

배열에서 변경하길 원하는 원소를 찾아내고, 이를 원하는 값으로 변경하기

Scanner scan = new Scanner(System.in);
String[] arr = {"제니", "리사", "지수", "로제"};

System.out.print("수정할 이름을 입력하세요>"); 
String name = scan.next();  //수정하고 싶은 이름을 입력받음

boolean flag = false;

for(int i = 0; i < arr.length; i++) {
    if(name.equals(arr[i])) {  //수정할 이름이 배열에 존재하는지 탐색, 있다면 변경
        System.out.print("변경할 이름을 작성하세요>");
        String s = scan.next();  //변경할 이름을 입력받음
        arr[i] = s;
        flag = true;  //if문이 실행되었는지 (해당 이름이 존재했는지) 알 수 있음
    }
}

//결과
if(flag) {  //존재했다면 수정되었음
    System.out.println("이름이 정상 수정되었습니다.");
    System.out.println(Arrays.toString(arr));  //변경된 배열 출력
} else {  //존재하지 않은 경우
    System.out.println("찾는 이름이 없습니다.");
}

> array delete 삭제

실제로 삭제하는 것은 아님

삭제하고 싶은 원소의 자리에 다음 자리에 있던 값을 넣는 방식으로 하나씩 앞으로 당겨옴

마지막 원소는 그대로 남게 됨

// index 4의 원소를 삭제하자 (즉, 다섯번째 원소인 5)
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(int i = 4; i < arr.length - 1; i++) {
    arr[i] = arr[i+1];  //index 4 에 5의 원소를 넣고 index를 증가시켜가며 반복, 단 index는 9까지 존재하므로 index 8에 9의 원소를 넣는 것을 마지막으로 함
}
System.out.println(Arrays.toString(arr));
//[1, 2, 3, 4, 6, 7, 8, 9, 10, 10]
Scanner scan = new Scanner(System.in);
String[] arr = {"제니", "리사", "지수", "로제"};
System.out.print("삭제할 이름을 입력하세요>");
String name = scan.next();  //삭제할 이름 입력받음
int count = arr.length;  //배열의길이(이름 수) 변수
boolean flag = false;  //삭제 여부를 표시할 변수

for(int i = 0; i < count; i++) {
    if(name.equals(arr[i])) { //삭제할 이름이 있다면
        System.out.println(name + "를 삭제합니다.");
        for(int j = i; j < count -1; j++) {  //삭제(해당 인덱스부터 하나씩 당겨오기)
            arr[j] = arr[j+1];  //마지막 인덱스를 마지막에서 두번째 인덱스로 당겨오는 게 마지막
        }                       //마지막 인덱스는 그래로
        count--;  //이름 하나를 삭제했으므로 이름의 개수는 -1
        flag = true;  //삭제하였음
    }
}

//결과
if(flag) {  //삭제했다면
    System.out.print("[");
    for(int i = 0; i < count; i++) {  //여기서 count는 3, index 0, 1, 2까지 출력
        System.out.print(arr[i]);
        if(i == count - 1) break;
        System.out.print(", "); 
    } System.out.println("]");  //배열의 원소를 이용해 배열의 형태로 출력
}else {  //삭제하지 않았다면
    System.out.println("삭제할 이름이 없습니다."); 
}

//예를 들면, 
// 삭제할 이름을 입력하세요>지수
// 지수를 삭제합니다
// [제니, 리사, 로제]
// 하지만 실제 배열 arr는 [제니, 리사, 로제, 로제]
// 따라서 만약 Arrays.toString 로 arr를 출력하면 위와 같다