자바의 배열(Array)은 생성 시 크기를 결정해줘야한다. 배열은 메모리 확보를 생성식에서 해주기 때문이다. 그리고 이 배열 생성식의 결과를 배열 변수에 대입하면 배열의 참조값(시작 주소)가 이 변수에 저장된다.
int arr[]; // 배열 변수 선언문
int[] arr; // 배열 변수 선언문(2)
new int[5]; // 배열의 생성식
arr = new int[5]; // 배열 변수에 배열의 시작 주소 저장
자바에서 배열은 다양한 방식으로 초기화할 수 있다.
int[] scores = new int[5];
int[] scores = {50, 60, 70, 80, 90};
int[] scores;
scores = new int[]{50, 60, 70, 80, 90};
마지막처럼 생성 후에 초기화를 해줄 때에는 new int[]를 생략해줄 수 없다.
for(int n: arr) {
System.out.println(n);
}
for문을 돌면서 출력을 할 수도 있지만,
이것이 번거로운 상황에는 Arrays.toString() 혹은 Arrays.deepToString()을 사용하여 배열을 문자열로 바꿔서 출력해준다.
자바에서 랜덤 값을 생성하는 방법에는 두 가지가 있다.
int rd = (int)(Math.random()*6) + 1 // 1~6까지의 랜덤값
Random r = new Random();
int rd2 = r.nextInt(6) + 1;
Math 클래스의 random 메서드를 사용할 수도 있고, 랜덤 클래스 자체를 활용할 수도 있다.
스캐너 클래스는 I/O (외부 리소스 사용)와 관련된 기능을 하므로, 사용이 끝난 후에는 반드시 close() 메소드를 통해 연결을 끊어줘야한다.
nextInt()와 nextLine()을 한 인스턴스에 대해서 혼용하면 문제가 발생한다.
nextInt()를 할 경우, 사용자가 입력 후 엔터를 치기 때문에 3\n이 들어오는데,
이 중 3만을 입력으로 받는다. 그런데 이후 nextLine()을 하면 이 남아있는
개행문자를 새로운 입력으로 받아들여 문제가 발생하는 것이다.
따라서 nextInt() 이후 nextLine()을 쓸 경우에는 nextLine()을 중간에
한 번 더 넣어줘서 개행문자를 버려줄 필요가 있다.
자바에서는 파이썬처럼 배열 슬라이싱이 메서드로 따로 구현돼있지 않다. 대신 배열의 일부를 copy하는 메서드를 통해 배열 슬라이싱을 구현한다.
System.arraycopy(원본 배열, 0, 카피 대상 배열, 시작점, 카피할 원소의 갯수);