조금 더 상세한 설명
-->변수는 저장하는 공간이 떨어져 있을 수 있지만 배열같은 경우에는 저장공간이 같이 붙어있다. 변수는 선언하는 순간 저장공간이 만들어지지만 배열은 선언하는 순간 저장공간이 만들어 진다기 보다는 배열을 다루기 위한 참조변수가 만들어지는 것이다.
타입[] 변수이름; --> 배열 선언(배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이]; --> 배열 생성(실제 저장공간을 생성)
배열의 인덱스 - 각 요소에 자동으로 붙는 번호
Ex1
int[] score;
score = new int[5];
int [] score = new int[5]
=> int tmp = arr.length; (배열의 길이는 int type이다! 즉 한번 생성하면 배열의 길이는 바꿀 수 없다)
-> 배열의 길이를 바꿀 수 없는 이유는 배열이 선언되고 크게하려고 할 경우 배열의 경우 연속적으로 주소값을 줘야 하는데 뒤에 있는 메모리주소에 이미 다른 값이 할당되어있을
경우가 있기 때문이다. 그래서 늘릴경우 기존배열을 복사하고 늘리려는 부분의 공간이 있는 곳을 찾아서 늘려주어야 한다.
--> 하지만 선언과 초기화를 나눠야 할 경우에는 1번의 방식을 사용해야 한다.
int[] score;
score = new int[]{ 50, 60, 70, 80, 90 };
--> 이유는 배열의 주소가 나오기 때문이다. 하지만 char type의 경우는 예외적으로 출력이 된다.
char[] chArr = { 'a', 'b', 'c', 'd' };
System.out.println(chArr); --> abcd가 출력된다.
for문 사용
--> for(int i=0; i < iArr.length; i++) {
System.out.println(iArr[i]);
}
Arrays.toString 사용
--> System.out.println(Arrays.toString(iArr));
* 총합과평균
* 최대값과 최소값 구하기
* 섞기(숫자섞기)
public static void main(String[] args) {
int[] numArr = {0,1,2,3,4,4,5,6,7,8,9};
System.out.println(Arrays.toString(numArr));
for (int i=0; i < 100; i++ ) {
int n = (int)(Math.random() * 10); // 0~9 중의 한 값을 임의로 얻는다.
int tmp = numArr[0]; // 빈자리 만들어서 넣기 !!
numArr[0] = numArr[n];
numArr[n] = tmp;
}
System.out.println(Arrays.toString(numArr));
}
* 로또 구하는 예제
public static void main(String[] args) {
int[] ball = new int[45]; // 45개의 정수값을 저장하기 위한 배열 생성.
// 배열의 각 요소에 1~45의 값을 저장한다.
for(int i=0; i < ball.length; i++)
ball[i] = i+1; // ball[0]에 1이 저장된다.
int tmp = 0; // 두 값을 바꾸는데 사용할 임시변수
int j = 0; // 임의의 값을 얻어서 저장할 변수
// 배열의 i번째 요소와 임의의 요소에 저장된 값을 서로 바꿔서 값을 섞는다.
// 0번째 부터 5번째 요소까지 모두 6개만 바꾼다.
for(int i=0; i < 6; i++) {
j = (int)(Math.random() * 45); // 0~44범위의 임의의 값을 얻는다.
tmp = ball[i];
ball[i] = ball[j];
ball[j] = tmp;
}
// 배열 ball의 앞에서 부터 6개의 요소를 출력한다.
for(int i=0; i < 6; i++)
System.out.printf("ball[%d]=%d%n", i, ball[i]);
}
int[][] score = new int[4][3]; --> 4행 3열의 2차원 배열을 생성한다. (기본적으로 0값이 대입된다)
1. int[][] arr = new int[][] { {1,2,3}, {4,5,6} };
2. int[][] arr = { {1,2,3}, {4,5,6} };
3. int[][] arr = {
{1,2,3},
{4,5,6}
};
--> 3번이 직관적으로 보기가 좋으므로 3번의 방식으로 초기화하는 습관을 기르자 !!
* 과목 평균,총점구하기
public static void main(String[] args) {
int[][] score = {
{ 100, 100, 100}
, { 20, 20, 20}
, { 30, 30, 30}
, { 40, 40, 40}
, { 50, 50, 50}
};
// 과목별 총점
int korTotal = 0, engTotal = 0, mathTotal = 0;
System.out.println("번호 국어 영어 수학 총점 평균 ");
System.out.println("=============================");
for(int i=0;i < score.length;i++) {
int sum = 0; // 개인별 총점
float avg = 0.0f; // 개인별 평균
korTotal += score[i][0];
engTotal += score[i][1];
mathTotal += score[i][2];
System.out.printf("%3d", i+1);
for(int j=0;j < score[i].length;j++) {
sum += score[i][j];
System.out.printf("%5d", score[i][j]);
}
avg = sum/(float)score[i].length; // 평균계산
System.out.printf("%5d %5.1f%n", sum, avg);
}
System.out.println("=============================");
System.out.printf("총점:%3d %4d %4d%n", korTotal, engTotal, mathTotal);
}
String str = “ABCDE”*
char ch = str.charAt(3); --> 문자열 str의 4번째 문자 ‘D’를 ch에 저장
String str = “012345”;
String tmp = str.substring(1,4); --> str에서 index범위 1~4의 문자들을 반환
System.out.println(tmp) --> “123”이 출력
int[] arr = {0,1,2,3,4};
int[][] arr2D = {{11,12}, {21,22}};
System.out.println(Arrays.toString(arr)); --> [0,1,2,3,4]
System.out.println(Arrays.deepToString(arr2D); --> [[11.12].[21.22]]
배열을 같은 지 비교하기 위해서는 각각의 요소들을 하나하나 전부 비교를 해봐야 한다.
* 단어 맞추기
public static void main(String[] args) {
String[][] words = {
{"chair","의자"}, // words[0][0], words[0][1]
{"computer","컴퓨터"}, // words[1][0], words[1][1]
{"integer","정수"} // words[2][0], words[2][1]
};
Scanner scanner = new Scanner(System.in);
for(int i=0;i<words.length;i++) {
System.out.printf("Q%d. %s의 뜻은?", i+1, words[i][0]);
String tmp = scanner.nextLine();
if(tmp.equals(words[i][1])) {
System.out.printf("정답입니다.%n%n");
} else {
System.out.printf("틀렸습니다. 정답은 %s입니다.%n%n",words[i][1]);
}
}
}
배열파트는 정말 중요해서 뭔가 말로 설명하기 부족했다. 강의에서 나오는 내용들은 정말 기초내용이라서 다시 한번 배열의 개념을 잡는데 도움이 되었다. 최근 List와 Array를 사용할 일이 정말 많은데 Array는 주소값들이 연속적으로 저장되기 떄문에 pointer의 개념으로 값들의 위치를 찾아가는 데 편리한 것 같았다. 또한 List, Array, Map이 내 생각에는 진짜 3대장인것 같아서 계속 이 3가지의 방식들이 코딩을 할 때 익숙해 질 수 있도록 연습해야 겠다.