여기서 numbers.length라는 게 사용되었는데. length라는 것은 배열의 길이를 가져와 사용자에게 알려주는 메서드이다.
배열 사용법
int [] a = {1, 2, 3, 4}; // 배열a 초기화
int [] b = a; // 배열b 선언
b[0] = 99; // 배열b의 0번째 값을 99로 변경
System.out.println(a[0]); // 배열a의 0번째 값 출력
처음 이 코드를 봤을 때 출력값을 1이라고 생각했다. 이유는 b배열에 a의 값을 넣어준 뒤 b를 사용하는 것으로 생각하였고, 이미 b의 값에는 1,2,3,4가 들어가 있고 이를 수정하여도 a와는 별개로 동작할 것 같았다. 하지만 이는 틀렸고 저렇게 int [] b = a를 사용한다면 결국 배열 a, b는 같은 주소값을 바라보고 참조하여 사용하며 b의 배열값을 바꾸면 a도 동일하게 적용된다는 것을 알게 되었다. 아래에서 이를 해결하는 메서드를 알아볼 것이다.
int[] a = {1, 2, 3, 4};
int[] b = Arrays.copyOf(a, a.length);
이렇게 Arrays.copyof를 사용하여 배열의 이름, 배열의 길이를 넣어주게 되면, b라는 새로운 배열에 값을 그대로 넣어주게 된다. 이렇게 생성하게 되면 배열 a와 b는 완전히 다른 배열이라고 생각할 수 있다.
ArrayList<Integer> intList = new ArrayList<Integer>();
이것은 List형 배열이다. 일반 Array배열과 차이점이 무엇인지 궁금해서 찾아보았다. 간단하게 설명하면
Array는 최초의 길이를 알아야 하고, 정적배열이다.
List(ArrayList)는 크기가 가변적으로 변할 수 있고, 동적배열이라는 것을 기억해둬야 한다.
위의 리스트에서 값을 가져오려면 System.out.println(intList.get(값번호)); 를 사용하여 가져오면 된다.
과제
마지막으로 위와 같은 과제를 받게 되었다.
코딩결과는??
'
'
'
package week02;
import java.util.*;
public class note {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("저장할 자료구조명을 입력하세요.(List / Set / Map)");
String LSM = sc.nextLine(); // LSM에 자료구조명 저장
System.out.println("요리제목을 입력하세요 : ");
String title = sc.nextLine(); // title에 요리제목 저장
switch(LSM){
case "List" :
System.out.println("레시피를 한문장씩 입력하세요.");
ArrayList<String> textList = new ArrayList<>();
while(true){
String text = sc.nextLine();
if(Objects.equals(text, "끝")){
break;
}
textList.add(text);
}
System.out.println("[ List 으로 저장된 " + title+" ]");
for(int i=0; i<=textList.size(); i++){
int num = i+1;
System.out.println(num+". "+textList.get(i));
}
break;
case "Set" :
System.out.println("레시피를 한문장씩 입력하세요.");
LinkedHashSet<String> textSet = new LinkedHashSet<>();
while(true){
String text = sc.nextLine();
if(Objects.equals(text, "끝")){
break;
}
textSet.add(text);
}
System.out.println("[ Set 으로 저장된 " + title+" ]");
Iterator iterator = textSet.iterator();
for(int i=0; i<textSet.size(); i++){
int num = i+1;
System.out.println(num+". "+iterator.next());
}
break;
case "Map" :
System.out.println("레시피를 한문장씩 입력하세요.");
Map<Integer, String> textMap = new HashMap<>();
int number = 1;
while(true){
String text = sc.nextLine();
if(Objects.equals(text, "끝")){
break;
}
textMap.put(number++, text);
}
System.out.println("[ Map 으로 저장된 " + title+" ]");
for(int i=1; i<=textMap.size(); i++){
System.out.println(i+". "+textMap.get(i));
}
break;
default :
System.out.println("지정된 자료구조가 아닙니다.");
break;
}
}
}
생각보다 오래 걸렸다. List와 Set은 괜찮았지만 Map을 사용하여 저장할 때 구조와 체크해줘야 할 것이 많아서 검색을 많이 해서 참고하였다. 그래도 자료형에 대한 기억측면에선 확실히 도움이 될 것 같다.
정리
오늘은 조건문, 반복문을 복습하였고 여러 가지 종류의 컬렉션을 배우고 직접 코딩하며 사용해 보았다. 처음 접해보는 문법으로써 헷갈리는 부분이 상당히 있었다. 특히 Map부분에 대해서는 더 알고 넘어갈 수 있도록 내일 다시 복습할 예정이다. 또한 배열에 대한 복사 부분에서도 나의 틀렸던 지식을 고칠 수 있게 되어서 다행이라고 생각했다.