배열 변수 선언방식
타입 변수이름[];
타입[] 변수이름;
int[] score = {55, 20, 45, 11, 77, 96}; // 방법1 : ok
int[] score = new int[]{55, 20, 45, 11, 77, 96}; // 방법2 : ok
int[] score = new int[6]; //방법3 : ok 이후 인덱스마다 값 지정해서 사용
int[] score;
score = {10, 20, 30, 40, 50}; //Error
int[] score;
score = new int[]{10, 20, 30, 40, 50}; //ok
int를 integer로 변환(integer를 int로 변환)
Arrays.sort()로 내림차순을 만들 때 The method sort(int[]) in the type Arrays is not applicable for the arguments (int[], Collections.reverseOrder())
라는 에러를 만날 수 있다.
Collections (또는 Comparator) 메서드는 객체에만 사용 가능한 메서드이기 때문이다.
int[]는 객체가 아닌 Primary type(기본타입) 이기 때문에 객체인 integer로 변경해 주는 것이다.
int[] num = new int[] {1,2,3,4}; // 배열 선언 및 생성
// int[] => Integer[]
Integer[] num2 = Arrays.stream(num).boxed().toArray(Integer[]::new);
// Integer[] => int[]
num = Arrays.stream(num2).mapToInt(Integer::intValue).toArray();
다차원배열
타입[][] 변수이름; // int[][] score;
타입 변수이름[][]; // int score[][];
타입[] 변수이름[]; // int[] score[];
int[][] score= {{1, 2, 3, 4}, {5, 6, 7, 8}};
System.out.println(score[0][1]); // 2
System.out.println(score[1][1]); // 6
앞쪽 []은 배열순서, 뒤쪽 []은 배열 내부 요소의 순서
다차원 배열에서 length의 기능
score.length == 2 (score의 배열의 수)
score[0].length == 4 (score의 첫번째 배열안의 요소의 수)
2차원 배열 이용
2차원 배열을 이용하여 학생들 점수와 총합,평균 계산하기
public class ArrayExam08 {
public static void main(String[] args) {
int[][] score = { // score.length(row의 개수) // score[2].length(3행의 개수)
{30, 40, 50}, // 1번 학생의 국어, 영어, 수학 점수
{60, 70, 80}, // 2번 학생의 국어, 영어, 수학 점수
{55, 65, 75}, // 3번 학생의 국어, 영어, 수학 점수
{68, 78, 88}, // 4번 학생의 국어, 영어, 수학 점수
{66, 76, 77} // 5번 학생의 국어, 영어, 수학 점수
};
int korTotal = 0;
int engTotal = 0;
int matTotal = 0;
int sum = 0;
int avg = 0;
int sum2 = 0;
int avg2 = 0;
System.out.println("번호\t국어\t영어\t수학\t총점\t평균");
System.out.println("=================================");
// 학생 수만큼 작업
for(int i = 0; i < score.length; i++) {
System.out.print(i+1 + "번");
// 학생 한명이 가지고 있는 점수들을 모두 작업
for( int j=0; j< score[i].length; j++) {
System.out.print("\t" + score[i][j]);
sum += score[i][j];
avg = sum/score[i].length;
}
korTotal += score[i][0];
engTotal += score[i][1];
matTotal += score[i][2];
System.out.print("\t" + sum + "\t" + avg);
sum2 += sum;
avg2 = sum2/score.length;
sum = 0;
avg = 0;
System.out.println();
}
System.out.println("==============================");
System.out.print("총점\t");
System.out.println(korTotal + "\t" + engTotal + "\t" + matTotal + "\t" + sum2 + "\t" + avg2);
}
}
바깥 for문에 들어올때마다 "i+1 (i는 시작시 0이니까) 번" 이라는 문자열을 출력한다.
안쪽 for문을 실행하여 각 배열 순서대로 점수가 나오게 출력한다.
처음 실행할 때는 i = 0, j = 0 이므로 첫번째 배열 속 첫번째 요소가 나오게 된다.
이후 for문 안에서 j값만 증가하므로 요소의 순서만 하나씩 추가로 변경한다.
sum을 통해 첫번째 배열 속 모든 요소의 합을 구해낸 뒤 sum값을 print 해준 후 다시 0을 할당한다.
다시 0을 할당하는 이유 : i 값이 바뀌어 두번째 배열에 대한 값을 구할 때 sum에는 아무것도 없어야 하기 때문.
배열 복사
int[] number = { 1, 2, 3, 4, 5 };
int[] newNum = new int[10];
for(int i = 0; i < number.length; i++) {
newNum[i] = number[i];
} // 1234500000
System.arraycopy()를 이용한 배열의 복사
System.arraycopy(Fromarr1, From, Toarr2, To, arr1.length);
Fromarr1 : 읽어올 배열
From : 읽어올 배열의 시작 위치
Toarr2 : 기록할 배열
To : 기록할 배열의 쓰여질 위치
arr1.length : 기록할 길이
public static void main(String[] args) {
char[] abc = {'A', 'B', 'C', 'D'};
char[] num = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
char[] result = new char[abc.length + num.length];
System.arraycopy(abc, 0, result, 0, abc.length);
System.arraycopy(num, 0, result, abc.length, num.length);
System.out.println(new String(result));
System.arraycopy(abc, 0, num, 0, abc.length);
System.out.println(new String(num));
}
출력 결과
ABCD0123456789
ABCD456789
'Language > Java' 카테고리의 다른 글
[Java] 자바 기초 (0) | 2022.07.31 |
---|---|
[Java] 로또 번호 만들기 (0) | 2022.07.30 |
[Java] Java기초 (0) | 2022.07.30 |
[Java] 자바소스와 컴파일 (0) | 2022.07.30 |
[Java] Array 실습 (동전) (0) | 2022.07.28 |