
배열이란 ?
같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 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권(남궁성), 도우출판
'개발 > JAVA' 카테고리의 다른 글
[Java] 객체 지향 프로그래밍 (OOP) (0) | 2022.07.01 |
---|---|
[Java] 열거타입(enum) (0) | 2022.06.29 |
[Java] 혼자공부하는 자바 - 참조타입과 참조변수 (0) | 2022.06.27 |
[Java] 혼자공부하는자바 - System.in.read()와 Scanner (0) | 2022.06.24 |
[Java] 혼자공부하는자바 - 변수와 타입 (0) | 2022.06.23 |