[Java] 배열 (Array) 기초

2022. 7. 30. 21:01·Language/Java
728x90

배열 변수 선언방식

타입 변수이름[];
타입[] 변수이름;

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
'Language/Java' 카테고리의 다른 글
  • [Java] 자바 기초
  • [Java] 로또 번호 만들기
  • [Java] Java기초
  • [Java] 자바소스와 컴파일
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    TypeScript
    Python
    타입스크립트
    객체
    react
    event
    변수
    Java
    MySQL
    JavaScript
    object
    CSS
    제어문
    array
    next.js
    HTML
    파이썬
    리액트
    자바스크립트
    web
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Java] 배열 (Array) 기초
상단으로

티스토리툴바