[포스코x코딩온] 웹개발자 풀스택 부트캠프8기

[포스코x코딩온] JAVA- 표준배열(2차원 배열, arrays 메소드)

항상 발전하는 개발자 2023. 10. 21. 13:02
728x90

표준 배열

배열

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
  • 처음 선언한 배열의 크기는 변경할 수 없다.(정적 할당)
//배열 선언
int[] intArr;
char[] charArr;
		
//배열 생성
//배열 생성하면 크기 변경이 안된다.
int[] intArr1 = new int[5];
		
//배열 초기화
int[] intArr2 = {1,2,3,4,5};
		
Scanner sc = new Scanner(System.in);
for(int i=0; i < intArr1.length; i++) {
	intArr1[i] = sc.nextInt();
}
System.out.println(Arrays.toString(intArr1));
sc.close();

배열 출력

  • for문 활용
Scanner sc = new Scanner(System.in);
for(int i=0; i < intArr1.length; i++) {
	intArr1[i] = sc.nextInt();
}
System.out.println(Arrays.toString(intArr1));
sc.close();
  • Arrays 클래스의 toString 메소드 활용
    • Arrays 클래스는 배열을 다루기 위한 다양한 메소드가 포함되어 있다.
import java.util.Arrays;

System.out.println(Arrays.toString(intArray));

2차원 배열

//2차원 배열
		int[][] intDoubleArr;
		char[][] charDoubleArr;
		
		int[][] intDoubleArr2 = new int[2][3];
		
		int intDoubleArr3[][] = {{0,1,2},{3,4,5}};

for - each문

  • 배열의 각 원소에 순차적으로 접근하는 데 유용하다.
//for-each문
		for(int value: intArr1) {
			System.out.print(value + " ");
		}

  • 평균 구하기 예시
package Java_Basic;

import java.util.Scanner;

public class Practice_array_231021 {

	public static void main(String[] args) {
		//1차원 배열 평균 구하기
//		Scanner sc = new Scanner(System.in);
//		int[] intSum = new int[5];
//		int sum = 0;
//		int avg;
//		
//		System.out.println(intSum.length + "개의 정수를 입력해주세요.");
//		for(int i=0; i< intSum.length; i++) {
//			intSum[i] = sc.nextInt();
//		}
//		
//		for(int a=0; a<intSum.length; a++) {
//			sum += intSum[a];
//		}
//		System.out.println("평균" + (double)sum/intSum.length);
//		sc.close();
		
		//2차원 배열 평균 구하기
		double[][] score = {
				{3.3, 3.4},
				{3.5, 3.6},
				{3.7, 4.0},
				{4.1, 4.2}
		};
		double sum = 0;
		
		System.out.print(score.length);

		for(int i=0; i<score.length; i++) {
			for(int a=0; a<score[i].length; a++) {
				sum += score[i][a];
			}
		}
		
		int n = score.length;
		int m = score[0].length;
		
		System.out.println("전체 평균은 " + sum/(n*m));
	}

}

Arrays 메소드

  • copyOf(arr, copyArrayLength) : 배열 전체를 복사해 복사할 길이만큼 지정하여 복사한 새로운 배열로 반환
  • copyOfRange(arr, sIdx, eIdx) : 배열 시작 인덱스와 끝 인덱스를 지정하여 복사한 새로운 배열 반환
  • fill(arr, n) : 배열의 모든 요소를 동일한 값으로 채워주는 함수
  • toString(arr) : 배열을 문자열로 변환하여 반환
  • sort(arr) : 배열 내의 요소들을 오름차순으로 정렬(원본 배열 순서 변경)
  • equals(arr1, arr2) : 두 배열의 각각의 요소 값이 동일한지 비교하여 T/F로 반환
  • deepEquals(arr1, arr2) : 단일 차원 또는 다차원 배열인 두 배열이 같은지 비교하여 T/F 반환
  • binarySearch(arr, idx) : 배열의 특정 인덱스 요소 값을 이진 검색 알고리즘을 사용하여 검색한 후, 해당 위치 반환
    • 이진 검색 알고리즘을 사용하므로 매개변수로 전달되는 배열이 sort() 등을 사용하여 미리 정렬되어 있어야만 제대로 동작
package Java_Basic;

import java.util.Arrays;
import java.util.Comparator;

public class Array_method {

	public static void main(String[] args) {
		int[] arr = {0,1,2,3,4};
		// copyOf(arr, copy length)
		//처음부터 복사 시작
		int[] newArr1 = Arrays.copyOf(arr, arr.length);
		int[] newArr2 = Arrays.copyOf(arr, 3);
		int[] newArr3 = Arrays.copyOf(arr, arr.length+3);
		
		System.out.println(Arrays.toString(newArr1));
		System.out.println(Arrays.toString(newArr2));
		System.out.println(Arrays.toString(newArr3));

		
		//copyOfRange
		//범위를 지정하여 복사 가능
		int[] newArr4 = Arrays.copyOfRange(newArr3, 1, 4);
		System.out.println(Arrays.toString(newArr4));
		
		//fill
		//초기화 가능 & 기존 값을 지우고 넣어준 값으로 변경
		int[] fillArr1 = new int[5];
		Arrays.fill(fillArr1, 1);
		System.out.println(Arrays.toString(fillArr1));
		
		//시작 인덱스와 끝 인덱스 지정 가능
		int[] fillArr2 = new int[5];
		fillArr2[0] = 1;
		fillArr2[1] = 2;
		fillArr2[2] = 3;
		//3인덱스부터 끝 인덱스까지 100으로 채운다.
		Arrays.fill(fillArr2, 3, fillArr2.length, 100);
		System.out.println(Arrays.toString(fillArr2));
		
		//sort
		//오름차순 정렬
		int[] sortArr1 = {0,100,1,2,3,4};
		Arrays.sort(sortArr1);
		System.out.println(Arrays.toString(sortArr1));
		
		//내림차순 정렬
		Integer[] sortArr2 = {0,1,2,3,4};
		Arrays.sort(sortArr2, Comparator.reverseOrder());
		System.out.println(Arrays.toString(sortArr2));

		//equals
		//T/F로 반환한다.
		int[] equalArr1 = {1,2,3,4};
		int[] equalArr2 = {1,2,3,4};
		int[] equalArr3 = {1,3,2,4};
		int[] equalArr4 = {1,2,3,4,5};
		
		System.out.println(Arrays.equals(equalArr1, equalArr2));
		System.out.println(Arrays.equals(equalArr1, equalArr3));
		System.out.println(Arrays.equals(equalArr1, equalArr4));
		
		//deepEquls
		int doubleArr1[][] = {{1,2},{3,4},{5,6}};
		int doubleArr2[][] = {{1,2},{3,4},{5,6}};
		int doubleArr3[][] = {{1,3},{5,4},{7,6}};
		System.out.println(Arrays.deepEquals(doubleArr1, doubleArr2));
		System.out.println(Arrays.deepEquals(doubleArr1, doubleArr3));
	
		//binarySearch
		//해당 인덱스 값 반환
		System.out.println(Arrays.binarySearch(equalArr4, 3));
		
		
		
	}

}

ArrayList

  • 표준 배열보다 조금 느릴 수 있지만, 배열에서 많은 조작이 필요할 때 유용하게 사용되는 클래스
  • 크기를 미리 정하지 않아도 되는 배열(동적 할당)
add(element) ArrayList 맨 뒤에 element 추가
add(index, element) index 위치에 element 삽입
addAll(ArrayList) ArrayList 뒤에 ArrayList 추가
size() ArrayList의 길이 리턴
get(index) index에 해당하는 요소 리턴
indexOf(params) params와 같은 첫 번째 요소의 index 리턴, 없으면 -1 리턴
remove(index) index의 요소 삭제
clear()  모든 요소 삭제
package Java_Basic;

import java.util.ArrayList;

public class ArrayList_231021 {

	public static void main(String[] args) {
		ArrayList<Integer> arrList1 = new ArrayList<>();
		ArrayList<String> arrList2 = new ArrayList<>();
		
		arrList1.add(10);
		arrList1.add(8);
		arrList1.add(6);
		arrList1.add(4);
		arrList1.add(0,1);
		
		//addAll
		ArrayList<Integer> arrList3 = new ArrayList<>();
		arrList3.add(1);
		arrList3.add(2);
		arrList3.addAll(arrList3);
		
		//indexOd
		//같은 값의 인덱스 번호 찾
		System.out.println(arrList1.indexOf(1));
		System.out.println(arrList1.indexOf(12));
		
		
		for(int i=0; i < arrList1.size(); i++) {
			System.out.println(arrList1.get(i));
		}
				
		
		

	}

}

출력결과

package Java_Basic;

import java.util.ArrayList;
import java.util.Scanner;

public class Practice_arry_method {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		ArrayList<String> arr = new ArrayList<>();
		String input;
		
		System.out.println("문자를 입력해주세요:");
		while(!(input = sc.next()).equals("exit")) {
		arr.add(input);
		System.out.println("문자를 입력해주세요:");
		}
		
		System.out.println(arr.toString());
		

	}

}

출력결과


Java를 학부 시절 배웠던 내용이라 Javascript를 배울 때보다는 수월한거 같다. 그래서 복습하는 느낌으로 공부를 하고 있다.

 

지금 너무 하는 일이 많아서 정신 없지만 다 하고 나면 뿌듯하고 한층 더 성장해 있을 걸 알기에 포기하지 않고 다 할 것이다!!(학교 시험, 교육, 해커톤 준비, 알바...)

728x90