[Day5-Java] 배열(1차원) (22.09.13)
배열
같은 자료형의 변수 여러 개를 하나의 묶음으로 만들어 하나의 이름으로 다루는 것을 배열이라고 한다.
배열의 선언
배열공간의 주소 저장용 참조 변수를 만드는 것 (선언한다고 저장 공간이 생기진 않는다.)
타입[] 변수이름;
타입 변수이름[];
int[] arr;
int arr[];
배열의 생성
Heap 영역에 값을 저장하는 변수들을 연속 나열 할당하고, 발생한 배열 공간의 시작 주소를 선언된 배열 레퍼런스에 대입한다.
배열참조변수 = new 데이터타입 [연속 할당될 변수 갯수];
데이터 타입 [] 변수 = new 데이터타입[첨자]; / String[] strArr = new String[3];
배열의 초기화
데이터 타입[] 배열참조변수 = {값1, 값2, 값3, ... }; / String strArr[] = {"Apple", "Banana", "Orange" };
데이터 타입[] 배열참조변수 = new 데이터타입[] {값1, 값2, 값3, ... };
public class jb_array {
public static void main(String[] args) {
// String strArr[] =new String[]{"Apple", "Banana", "Orange"};
String strArr[] = {"Apple", "Banana", "Orange"};
String strArrIndex1 = strArr[1];
System.out.println("strArr배열의 1번째 인덱스 값은?: " + strArrIndex1);
String strArrIndex2 = strArr[2];
System.out.println("strArr배열의 2번째 인덱스 값은?: " + strArrIndex2);
for (int i = 0; i < strArr.length; i++) {
System.out.println(i +"번째 인덱스 값: " + strArr[i]);
}
}
}
strArr배열의 1번째 인덱스 값은?: Banana
strArr배열의 2번째 인덱스 값은?: Orange
0번째 인덱스 값: Apple
1번째 인덱스 값: Banana
2번째 인덱스 값: Orange
- 3번째 줄과 4번째 줄은 같은 의미이고, 4번째 줄은 new String[]을 생략하였다.
- 배열의 각 인덱스 값은 0부터 시작 출력과 같이 0번째 인덱스 요소는 Apple, 1번째 인덱스 요소는 Banana, 2번째 인덱스 요소는 Orange ( 인덱스: 순번을 나타내는 위치정보)
- 각 배열에 참조하기 위해서는 배열 변수명[인덱스값]으로 참조할 수 있고, for문을 통해 모든 값을 출력할 수 있다. 배열은 String의 길이를 알 수 있는 String.length()와 달리 배열의 길이는 strArr.length 괄호가 빠져있다.
- strArr에 배열의 크기는 3이다. strArr.length = 3 고로 i < strArr.length; 크기 값 이전까지 i 순환 또는 i <= strArr.length - 1;
예제1 - 배열 이동
package week_7;
public class w7_3 {
public static void main(String[] args) {
int[] array = {33,2,189,72,7,91,5,14,17,9};
final int first = array[0];
System.out.print("초기 배열 값: ");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
for (int i = 0; i < array.length-1; i++) {
array[i] = array[i+1];
}
array[array.length-1] = first;
System.out.print("\n이동 후 배열 값: ");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}
초기 배열 값: 33 2 189 72 7 91 5 14 17 9
이동 후 배열 값: 2 189 72 7 91 5 14 17 9 33
예제2 - 배열 정렬
package week_7;
import java.util.Arrays;
import java.util.Comparator;
public class w7_4 {
public static void main(String[] args) {
String[] array = {"kim", "park", "oh", "lim", "pang", "seo", "lee",
"yang", "bae", "back"};
System.out.print("정렬 전: ");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
System.out.println();
System.out.print("정렬 후: ");
Arrays.sort(array, Comparator.reverseOrder()); //내림차순 정렬
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}
정렬 전: kim park oh lim pang seo lee yang bae back
정렬 후: yang seo park pang oh lim lee kim bae back
예제3 - 배열 응용
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ex_3 {
public static void main(String[] args) {
float sum = 0;
double average;
int[] point = new int[5];
Scanner input = new Scanner(System.in);
for (int i = 0; i < 5; i++) {
while(true) {
System.out.println((i + 1) + "번째 심사위원의 점수: ");
point[i] = input.nextInt();
if ((0 > point[i]) ^ (100 < point[i])) {
System.out.println("점수는 0~100 사이로 입력해 주세요.");
} else {
break;
}
}
}
int max = point[0]; //0으로 초기화하면 0이 가장 크거나 작은 값일 수 있기 때문
int min = point[0];
//-----------------------------------------------------
System.out.println("총 입력된 점수");
for (int j = 0; j < point.length; j++) {
if (j == (point.length - 1)) {
System.out.println(point[j] + " (점)");
} else {
System.out.print(point[j] + ", ");
}
}
//-----------------------------------------------------
System.out.println("제거 대상 점수");
int max_z = 0;
int min_z = 0;
List<Integer> list_point = new ArrayList<>();
for (int i = 0; i < point.length; i++) {
list_point.add(point[i]);
}
for (int z = 0; z < point.length; z++) {
if (max < point[z]) {
max = point[z];
max_z = z;
}
}
list_point.remove(max_z);
for (int z = 0; z < point.length; z++) {
if (min > point[z]) {
min = point[z];
min_z = z;
}
}
list_point.remove(min_z);
System.out.println("최고 점수: " + max + "점");
System.out.println("최소 점수: " + min + "점");
//-----------------------------------------------------
System.out.println("최종 입력 점수");
int[] point_ = new int[list_point.size()];
for (int i = 0; i < list_point.size(); i++) {
point_[i] = list_point.get(i).intValue();
}
for (int i = 0; i < point_.length; i++) {
System.out.print(point_[i] + " ");
sum = sum + point_[i];
}
System.out.print("(점)");
System.out.println();
average = sum / point_.length;
System.out.printf("총점: %.0f점\n", sum);
System.out.printf("평균: %.2f점\n", average);
}
}
1번째 심사위원의 점수:
80
2번째 심사위원의 점수:
70
3번째 심사위원의 점수:
50
4번째 심사위원의 점수:
44
5번째 심사위원의 점수:
69
총 입력된 점수
80, 70, 50, 44, 69 (점)
제거 대상 점수
최고 점수: 80점
최소 점수: 44점
최종 입력 점수
70 50 44 (점)
총점: 164점
평균: 54.67점
화이팅화이팅 아자아자~~!
'Java' 카테고리의 다른 글
[Day4-Java] 제어문 (0) | 2022.10.06 |
---|---|
[Day3-Java] 변수와 자료형 2, 연산자 (0) | 2022.10.06 |
[Day2-Java] 변수와 자료형1 (0) | 2022.10.06 |
[Day1-Java] 프로그래밍 (0) | 2022.10.05 |