profile image

L o a d i n g . . .

 

배열이란 ?

같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 index를 부여해놓은 자료구조.

같은 타입의 여러 변수를 하나의 묶음으로 다룬다.

 

 

// 배열선언 (둘 다 가능)
타입[] 변수명;
타입 변수명[]; 

// score배열의 인덱스는 각 항목의 데이터를 읽거나 저장하는데 사용된다
score[index]

// 배열 생성
타입[] 변수명; //배열을 선언 (배열을 다루기 위한 참조변수 선언)
변수명 = new 타입[길이]; //배열을 생성 (실제 저장공간을 생성)

 

배열의 특징

- 배열은 같은 타입의 데이터만 저장 가능

- 한번 생성된 배열은 길이를 늘리거나 줄일 수 없다 ==> 나중에 List를 더 많이쓰는 이유가 됨

 

 

 

 


배열 생성

package a220628;

public class ArrayCreateByValueListEx {
	public static void main(String[] args) {
		int[] scores = { 83, 90, 87 };
		
		System.out.println("scores[0] : " + scores[0]);
		System.out.println("scores[1] : " + scores[1]);
		System.out.println("scores[2] : " + scores[2]);
		
		int sum = 0;
		for (int i = 0; i < 3; i++) {
			sum += scores[i];
		}
		System.out.println("총합 : " + sum);
		double avg = (double) sum / 3;
		System.out.println("평균 : " + avg);
	}
}

예전 스튜던드 하던 추억이 떠오르는구먼..

 

 

중괄호 {}는 주어진 값들을 항목으로 가지는 배열 객체를 heap에 생성하고 배열객체의 번지를 리턴한다.

배열 변수는 리턴된 주소를 저장함으로써 참조가 이루어지게 된다.

이때 점수를 바꾸고 싶다면

scores[2] = 100;

이런 식으로 대입 연산자를 사용하면 된다.

 

 

 

주의사항

- 배열변수를 이미 선언한 후에는 중괄호를 사용한 배열 생성이 허용되지 않는다.

 

그렇기 때문에 배열변수 선언 후 값 목록을 나중에 추가할 시에는 new연산자를 사용하여 값목록을 지정해줘야한다.

		String[] names;
		names = new String[] {"길동"};
		System.out.println(names[0]);

 

 

 


명령 라인 입력 

프로그램 실행을 위해 main()메소드가 필요하긴한데,.. 메소드 매개값인 String[] args는 무엇일까?

public static void main(String[] args) {...}

 

 

명령 프롬프트에서 위 코드를 java명령어로 실행하면 JVM은 길이가 0인 String 배열을 먼저 생성 후 main()메소드를 호출할 때 매개값으로 전달한다.

String[] args = { }; 

	// ↑ main 메소드 호출시 전달 ↓

    public static void main(String[] args){
        ...
    }

메인메소드는 String[] args 매개변수를 통해 명령라인에서 입력된 데이터의 수(배열의 길이)와 입력된 데이터(배열 항목값)을 알 수 있게된다.

 

 

main()메소드의 매개변수 예제

package a220628;

public class MainStringArrayArgument {
	public static void main(String[] args) {
		if (args.length != 2) {
			System.out.println("값의 수가 부족합니다.");
			System.exit(0); //프로그램 강제종료
		}
		
		String strNum1 = args[0]; //첫 번째 데이터 얻기
		String strNum2 = args[1]; //두 번째 데이터 얻기
		
		int num1 = Integer.parseInt(strNum1);
		int num2 = Integer.parseInt(strNum2);
		
		int result = num1 + num2;
		System.out.println(num1 + " + " + num2 + " = " + result);
	}
}

프로그램을 실행할 때 매개값을 주고 실행하려면 run - run Configurations Main에서 설정해주면된다.

 

 

 

 

배열 복사 System.arraycopy()

package a220628;

public class ArrayCopyByForEx {
	public static void main(String[] args) {
		int[] oldInArray = { 1, 2, 3 };
		int[] newInArray = new int[5];
		
		System.arraycopy(oldInArray, 0, newInArray, 0, oldInArray.length);
		for (int i = 0; i < newInArray.length; i++) {
			System.out.print(newInArray[i] + ",");
		}
	}
}

 

 

 

 

 

 

 

 

 

배열의 활용

최대값과 최소값

package a220628;

public class ArrayMaxMin {
	public static void main(String[] args) {
		int[] score = {79,88,91,33,100,55,95};
		
		int max = score[0]; //배열의 첫 번째 값으로 최대값을 초기화 한다.
		int min = score[0]; //배열의 첫 번째 값으로 최소값을 초기화 한다.
		
		for (int i = 0; i < score.length; i++) {
			if (score[i] > max) {
				max = score[i];
			} else if(score[i] < min) {
				min = score[i];
			}
		}
		
		System.out.println("최대값 : " + max);
		System.out.println("최소값 : " + min);
	}
}

 

 

 

 

섞기(shuffle)

package a220628;

public class ArrayShuffleEx {
	public static void main(String[] args) {
		int[] numArr = new int[10];
		
		for (int i = 0; i < numArr.length; i++) {
			numArr[i] = i; //배열을 0~9의 숫자로 초기화
			System.out.print(numArr[i]);
		}
		System.out.println();
		
		for (int i = 0; i < 100; i++) {
			int n = (int) (Math.random() * 10); //0~9값을 임의로 얻는다.
			int tmp = numArr[0];
			numArr[0] = numArr[n];
			numArr[n] = tmp;
		}
		
		for (int i = 0; i < numArr.length; i++) {
			System.out.print(numArr[i]);
		}
	}
}

package a220628;

public class ArrayLottoEx {
	public static void main(String[] args) {
		int[] ball = new int[45];
		
		for (int i = 0; i < ball.length; i++) {
			ball[i] = i + 1;
		}
		
		int temp = 0;
		int j = 0;
		
		for (int i = 0; i < 6; i++) {
			j = (int)(Math.random() * 45);
			temp = ball[i];
			ball[i] = ball[j];
			ball[j] = temp;
		}
		
		for (int i = 0; i < 6; i++) {
			System.out.printf("ball [%d]=%d%n", i , ball[i]);
		}
	}
}

 

 

 

 

 

 

 

 

 

향상된 for문

자바는 배열, 컬렉션을 좀 더 쉽게 처리하기위해 향상for문을 제공한다.

for ( 배열에서 꺼낸 항목을 저장할 변수선언 : 배열) {...}

 

package a220628;

public class AdvancedForEx {
	public static void main(String[] args) {
		int[] scores = { 95, 71, 84, 93, 87 };
		
		int sum = 0;
		for (int score : scores) {
			sum = sum + score;
		}
		System.out.println("점수 총합 = " + sum);
		
		double avg = (double) sum / scores.length;
		System.out.println("점수 평균 = " + avg);
	}
}

 

 

 

 

 

 

 

참고 : 

- 혼자 공부하는 자바(신용권), 한빛미디어

- 자바의 정석 1권(남궁성), 도우출판

 

반응형
복사했습니다!