05-Array



배열: 동일 타입의 데이터를 여러 개 모아놓은 변수의 형태

​ 기본형 변수(boolean, char, int, double …)는 메모리 크기가 정해져있고 stack에 실제 값을 직접 q 저장하는 형식이고, 참조형 변수는 stack에 주소값 정보만 저장하고 heap에 영역의 값을 저장

배열의 경우 참조형 변수의 일종이다.

example

String s1 = “abcd”;

System.out.println(s1);

String s2;

System.out.println(s2);

stack heap
s2 : null
s1 : 100 (주소)
100: “abcd”
  • heap : 객체와 배열(자바에서는 객체로 취급)이 생성되는 영역
  • stack : 기본형 변수의 값과 참조형 변수의 주소값이 저장되는 영역

배열생성

//배열의 길이란 배열에 저장할 수 있는 전체 항목 수 
타입 변수[] = new 타입[길이];
String r = new String[4];
int a[] = new int[3]; // 3개의 데이터 길이가 생성
a[0] = 1; // 첫번째 데이터공간의 인덱스는 1
a[1] = 2;
a[2] = 3;

// 다음과 같은 배열 선언도 가능하다. 
int b[] = {1, 2, 3, 4, 5} // b.length = 5
int c[] = {
  {1, 2, 3,}
  {3, 2, 5, 6}
  {2, 3, 2, 4}
}


다차원배열

//2차원배열
int[][]scores = new int[2][3];
//scores.length  > 2 
//scores[1].length  > 3
int[][]scores = new int[2][]; // 이런식의 선언도 가능하다. 
scores[0] = new int[2];
scores[1] = new int[3];
//앞의 배열은 총 2개의 배열에 0번에 2개의 배열길이, 1번에 3개의 배열길이가 만들어진다. 

배열 속의 배열

int[][]mathScores = new int[2][3];
for(int i = 0; i<mathScores.length; i++){
  for(int k = 0; k<mathScores[i].length; k++){
    System.out.println(mathScores[i][k]);
  }
}


int[][]englishScores = new int[2][];
englishScore[0] = new int[2];
englishScore[1] = new int[3];
for(int i = 0; i<englishScores.length; i++){
  for(int k = 0; k<englishScores[i].lenghth; k++){
    System.out.println(englishScores[i][k]);
  }
}


int[][] javaScores = { {95, 80}, {92, 96, 80}};
for(int i = 0; i<javaScores.lenght; i++){
  for(int k = 0; k<javaScores[i].length; k++){
    System.out.println(javaScores[i][k]);
  }
}

String names[] = new String[5];
		int scores[][] = new int[names.length][3];
		 double avg [] = new double[names.length];
		 
		 names[0] = "가 ";
			names[1] = "나 ";
			names[2] = "다 ";
			names[3] = "라 ";
			names[4] = "마 ";
			
			for(int i = 0; i < scores.length; i++) {//5
				int sum = 0;
				System.out.print(names[i]+"\t");
			    for(int j = 0; j < scores[i].length;j++) {//5
			    	scores[i][j] = (int)(Math.random()*100)+1;
			    	System.out.print(scores[i][j]+"\t");
			    	sum += scores[i][j];//3번 
			    }
			    avg[i] = (double)sum / scores[i].length;
			  // java.text.DecimalFormat dec = new DecimalFormat("##.00");
			    
			    System.out.println( (avg[i]));
			    System.out.println();
        

for문( : ){ }

for(타입변수 : 배열){ 
  실행문
}
// 배열의 길이만큼 실행, 타입변수는 배열에 가져올 값이 있을경우 첫번째부터 하나씩 가져와서 실행함
//
int[] scores = {95, 71, 92, 93, 59}
int sum = 0;
for(int score : scores){
  sum += score
}



Enum

  • 배열: 동일 타입의 데이터가 여러개
  • 열거 타입: enum 데이터가 여러개