배열

서지은·2024년 7월 9일

JAVA 개념정리

목록 보기
7/13
post-thumbnail

변수

  • 하나의 공간에 하나의 값을 담을 수 있다.
    실제 리터럴값을 곧바로 담을 수 있는 변수를 일반변수라고 한다.
    주소값을 담고 있는 변수는 참조 변소(레퍼런스 변수)라고 표현
    • 기본자료형(원시타입):boolean, int, char, byte, long, double등등으로 선언된 변수
      =>실제 리터럴 값을 바로 담을 수 있다.
  • 그외 자료형(String, Scanner, int[], double[],char[]...) -> 참조변수

배열

하나의 공간에 여러개의 값을 담을 수 있는 개념
"같은 자료형의 값"으로만 담을 수 있다.
정확하게 애기하자면 배열의 각 인덱스 자리에 실제 값이 담긴(index는 0부터 시작)

배열을 사용하는 이유

변수만을 사용하게 된다면?
-> 대량의 데이터들을 보관하고자 할 때 각각의 변수를 만들어서 따로 관리해야한다.

heep메모리는 가변적이다 단,초기화 필수
String 초기화 = null

초기화 과정

		int[] arr1 = new int[5];
		arr1[0] = 0;
		arr1[1] = 1;
		arr1[2] = 2;
		arr1[3] = 3;
		arr1[4] = 4;
		int[] arr1 = {0,1,2,3,4};

1. 배열선언(여러개의 값들을 보관할 배열을 만들겠다. -> 참조변수 선언)

	-자료형[] 배열이름;
	-자료형 배열이름[];
	ex) int[] arr;

2. 배열할당(이 배열에 몇개의 값들을 보관할건지 크기를 지정하는 과정)

	-배열명 = new 자료형[배열의 크기(길이)];
	ex) arr = new int[5];
	//배열을 선언과 동시에 할당
	int[] arr2 = new int[5];

3. 값을 대입하고 가져와서 사용하기

	-index를 이용해서 접근한다.
   ex)
    arr[0] = 10;
	arr[1] = 20;
	arr[2] = 30;
	arr[3] = 40;
	arr[4] = 50;		
		for(int i = 0; i < arr.length; i++) { 
		System.out.println(arr[i]);
	}
		error)
	System.out.print(arr);	//실제 arr이라는 값을 출력하면 arr의 정보(자료형+길	이+주소정보)같은 것들이 출력됨 -> 이상문구출력

배열의 가장 큰 단점
-한번 지정한 배열의 크기는 변경이 불가하다.
=>배열의 크기를 변경하고자한다면 다시 만들어야 한다.

-연결이 끊어진 기존 배열은 heap영역 에 둥둥 떠다닌다. (어떤 변수에도 참조되지 않는 상태, 불러올 수 없는 메모리)
=> 일정시간이 지나면 "가비지컬렉터(GC)"가 알아서 지워준다.
=>자바에서의 "자동메모리관리" 특징 -> 개발자가 코드에만 집중할 수 있다.

배열을 강제로 삭제시키고자 한다면 => 연결고리를 끊어주면 된다.(null대입)

arr = null;
	int[] arr2 = {1,1,1,1,1};
	int[] arr3 = {1,1,1,1,1};
	System.out.println(arr2 == arr3); 
//false => 각 참조변수는 ==을 통해서 비교시 주소값을 비교하기 때문에
	arr3[0] = 100;
	System.out.println(arr2[0]);
//true => arr3]배열과 arr2[]배열은 같은 배열을 가르키고 있기 때문에 arr3[0]값과 arr2[0]의 값은 같다.

배열 문제

1번 문제

1. 크기가 10인 정수형 배열 생성후
	int[] arr = new int[10];
2. 반복문을 통해서 0번 인덱스부터 마지막 인덱스까지 모든 값을 1로 초기화
	`0~(배열열 길이 -1)까지 반복`
	for(int i =0; i < arr.length; i++) {
 			 arr[i] = 1;
	}
3. 반복문을 통해서 0~마지막인덱스까지 전부 출력
    for(int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
4. 사용자에게 배열의 길이를 입력받 해당크키의 문자열배열을 생성해라.
	("길이 입력 : X")
	int size;
	System.out.print("길이 입력 : ");
	size = sc.nextInt();
String[] strArr = new String[size];
5. 반복문을 활용해서 매번 사용자에게 과일명을 입력받아 그값을 strArr에 대입
	(0~마지막인덱스)
	좋아하는 과일을 입력 : 바나나(반복)
	for(int i = 0; i < strArr.length; i++) {
      Ststem.out.print("좋아하는 과일을 입력 : ");
      strArr[i] = sc.next();
    }
6. 반복문을 이용해서 strArr에 있는 모든 값을 출력
	for(int i = 0; i < strArr.length; i++) {
      System.out.println(strArr[i]);
    }

출력 결과

1111111111 //1로 초기화한 arr[] 값
길이 입력: sc.nextInt(); //사용자가 입력한 값
좋아하는 과일을 입력 : 바나나
좋아하는 과일을 입력 : 바나나
좋아하는 과일을 입력 : 바나나
좋아하는 과일을 입력 : 바나나
좋아하는 과일을 입력 : 바나나
바나나
바나나
바나나
바나나
바나나

2번 문제

-사용자에게 문자열 하나 입력받은 후
-각각의 인덱스에 있는 문자들을 char배열에 옮겨담기
	1. 사용자에게 문자열 하나 입력받은 후
    	System.out.print("문자열 입력: ");
		String str = sc.next();//apple
	2. char배열 생성하기(길이 => 문자열의 길이)
		char[] chArr = new char[str.length()];
	3. 반복문을 통해서 해당 문자열에서 각각 인덱스별 문자를 char배열에 각 인덱스값에 대입
    	for(int i = 0; i < chArr.length; i++) {
          chArr[i] = str.charAt(i);
        }
	4. char배열의 모든 index값을 전체 출력
    	for(int i = 0; i < chArr.length; i++) {
          System.out.println(chArr[i]);
        }

출력 결과

문자열 입력: apple
apple

3번 문제

- 사용자에게 배열의 길이를 입력받아 해당 길이의 정수형배열 arr을 생성한다.
- arr에 모든 인덱스값에 1~100사이의 랜덤값을 할당해주고
- arr에 모든 값을 출력한 후
- 이중 짝수인 값의 총 합을 구해서 출력
System.out.print("정수 입력 : ");
int size = sc.nextInt();
int sum = 0;
int arr[] = new int[size];
	for(int i = 0; i < arr.length; i++) {
      arr[i] =(int)(Math.random()*100) +1;
    }
	for(int i = 0; i < arr.length; i++) {
      System.out.print(arr[i] + " ");
    }
	for(int i = 0; i < arr.length; i++) {
      if(arr[i] % 2 == 0) {
        sum += arr[i];
      }
    }
System.out.println();
System.out.print("짝수의 총 합 : " + sum);

출력 결과

정수입력 : 3   	  //nextInt로 입력한 값
11 45 30          //1~100사이의 랜덤값
짝수의 총 합 : 30   //짝수인 값의 총 합

0개의 댓글