같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
타입[] 변수이름 = new 타입[길이];
인덱스의 범위는 0부터 '배열길이-1'까지이다.
배열은 한번 선언되고 나면 길이를 변경할 수 없기 때문에 길이를 변경할 경우, 더 큰 배열을 새로 생성한 후에 기존 배열을 새로운 배열에 복사해야한다.
/**
* 총합과 평균
*/
public class ArrayEx5 {
public static void main(String[] args) {
int sum = 0; // 총합을 저장하기 위한 변수
float avg = 0f; // 평균을 저장하기 위한 변수
int[] score = {100, 88, 100, 100, 90}; // 배열의 생성과 초기화
for (int i = 0; i < score.length; i++) {
sum += score[i];
}
avg = sum / (float) score.length; // 정확한 값을 얻기 위해 형 변환
System.out.println("총점 : " + sum);
System.out.println("평균 : " + avg);
}
}
/**
* 최대값과 최소값
*/
public class ArrayEx6 {
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);
}
}
/**
* 섞기
*/
public class ArrayEx7 {
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.println(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.println(numArr[i]);
}
}
}
/**
* 임의의 값으로 배열 채우기
*/
public class ArrayEx9 {
public static void main(String[] args) {
int[] code = {-4, -1, 3, 6, 11}; // 불연속적인 값들로 구성된 배열
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
int tmp = (int) (Math.random() * code.length);
arr[i] = code[tmp];
}
System.out.println(Arrays.toString(arr));
}
}
/**
* 정렬 - 버블정렬 알고리즘
*/
public class ArrayEx10 {
public static void main(String[] args) {
int[] numArr = new int[10];
for (int i = 0; i < numArr.length; i++) {
System.out.println(numArr[i] = (int) (Math.random() * 10));
}
System.out.println();
for (int i = 0; i < numArr.length - 1; i++) {
boolean changed = false; // 자리바꿈이 발생했는지 체크
for (int j = 0; j < numArr.length - 1 - i; j++) {
if (numArr[j] > numArr[j + 1]) { // 앞의 값이 더 크면 교환
int tmp = numArr[j];
numArr[j] = numArr[j + 1];
numArr[j + 1] = tmp;
changed = true; // 자리바꿈이 발생했으니 changed 변경
}
}
if (!changed) {
break; // 자리바꿈이 없으면 반복문 종료
}
for (int k = 0; k < numArr.length; k++) {
System.out.println(numArr[k]);
}
System.out.println();
}
}
}
/**
* 빈도수 구하기
*/
public class ArrayEx11 {
public static void main(String[] args) {
int[] numArr = new int[10];
int[] counter = new int[10];
for (int i = 0; i < numArr.length; i++) {
numArr[i] = (int) (Math.random() * 10);
System.out.print(numArr[i]);
}
System.out.println();
for (int i = 0; i < numArr.length; i++) {
counter[numArr[i]]++; // numArr에 저장된 값과 일치하는 인덱스의 요소에 저장된 값 1 증가
}
for (int i = 0; i < numArr.length; i++) {
System.out.println(i + "의 개수 : " + counter[i]);
}
}
}
String클래스는 char배열에 기능(메서드)을 추가한 것
/**
* char배열과 String클래스의 변환
*/
public class ArrayEx14 {
public static void main(String[] args) {
String src = "ABCDE";
for (int i = 0; i < src.length(); i++) {
char ch = src.charAt(i); // src의 i번째 문자 ch에 저장
System.out.println("shr.char(" + i + "): " + ch);
}
char[] chArr = src.toCharArray(); // String을 char[]로 변환
System.out.println(chArr);
}
}
public class ArrayEx18 {
public static void main(String[] args) {
int[][] score = {
{100, 100, 100,},
{20, 20, 20},
{30, 30, 30},
{40, 40, 40}
};
int sum = 0;
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
System.out.printf("score[%d][%d]=%d%n", i, j, score[i][j]);
}
}
// 배열에 배열!!
for (int[] tmp : score) { // score의 각 요소(1차원 배열의 주소)를 tmp에 저장
for (int i : tmp) { // tmp는 1차원 배열을 가리키는 참조변수
// System.out.println("--->"+i);
sum += i;
}
}
System.out.println("sum = " + sum);
}
}