1차원 배열
배열 선언
배열 변수는 기본 자료형을 사용하더라도 다음과 같이 객체를 만드는 방법으로 선언
자료형[] 변수명 = new 자료형[개수]; // 자바에서 조금 더 선호하는 방법
자료형 변수명[] = new 자료형[개수];
배열 요소를 구분하는 배열 인덱스는 0부터 시작
int[] num = new int[10];
int[] num;
num = new int[10];
class BoxA1 {
}
public class Ex01_ArrayInstance
{
public static void main(String[] args)
{
// 길이가 5인 int형 1차원 배열의 생성
int[] ar1 = new int[5];
// 길이가 7인 double형 1차원 배열의 생성
double[] ar2 = new double[7];
// 배열의 참조변수와 객체 생성 분리
float[] ar3;
ar3 = new float[9];
// 객체 대상 1차원 배열
BoxA1[] ar4 = new BoxA1[5];
// 배열의 객체 변수 접근 / 메서드 사용
System.out.println("배열 ar1 길이: " + ar1.length);
System.out.println("배열 ar2 길이: " + ar2.length);
System.out.println("배열 ar3 길이: " + ar3.length);
System.out.println("배열 ar4 길이: " + ar4.length);
}
}
배열 사용 : 기본 자료형
public class Ex02_intArray
{
public static void main(String[] args)
{
// 길이가 3인 int형 1차원 배열의 생성
int[] ar = new int[3];
ar[0] = 100; // 값의 저장 : 첫 번째 요소
ar[1] = 90; // 값의 저장 : 두 번째 요소
ar[2] = 80; // 값의 저장 : 세 번째 요소
int sum = ar[0] + ar[1] + ar[2]; // 값의 참조
System.out.println("총점 : " + sum);
}
}
배열 사용 : String형
public class Ex03_StringArray
{
public static void main(String[] args)
{
String[] name = new String[7];
name[0] = new String("홍길동");
name[1] = new String("전우치");
name[2] = new String("손오공");
name[3] = new String("강감찬");
name[4] = new String("이순신");
name[5] = new String("을지문덕");
name[6] = new String("양만춘");
int cnum = 0;
for(int i = 0; i < name.length; i++) {
System.out.println(name[i]);
cnum += name[i].length();
}
System.out.println("총 문자의 수: " + cnum);
}
}
배열 사용 : 클래스형
class BoxA4 {
public String name;
BoxA4(String name) {
this.name = name;
}
}
public class Ex04_BoxArray
{
public static void main(String[] args)
{
BoxA4[] ar = new BoxA4[3];
// 배열에 객체 저장 (초기화)
ar[0] = new BoxA4("홍길동");
ar[1] = new BoxA4("전우치");
ar[2] = new BoxA4("손오공");
// 저장된 객체의 참조
System.out.println(ar[0].name);
System.out.println(ar[1].name);
System.out.println(ar[2].name);
}
}
배열 사용 : 매개변수, 반환형
public class Ex05_ArrayInMethod
{
public static void main(String[] args)
{
int[] arr = makeIntArray(5);
int sum = sumOfArray(arr);
System.out.println(sum);
}
public static int[] makeIntArray(int len)
{
int[] arr = new int[len];
for(int i=0; i< len; i++)
{
arr[i] = i;
}
return arr;
}
public static int sumOfArray(int[] arr)
{
int sum = 0;
for(int i=0; i< arr.length; i++)
{
sum = sum + arr[i];
}
return sum;
}
}
배열 생성과 동시에 초기화
// 배열 생성
int[] arr = new int[3];
// 배열 생성 및 초기화 1
int[] arr = new int[] {1, 2, 3};
// 배열 생성 및 초기화 2
int[] arr = {1, 2, 3};
배열의 값을 초기화하지 않았을 때도 디폴트 초기화는 진행됨
기본 자료형 배열은 모든 요소가 0으로 초기화되고, 객체 배열(참조 변수 배열)은 모든 요소가 null로 초기화 됨
class BoxA6 { }
public class Ex06_ArrayInit
{
public static void main(String[] args)
{
int[] arr1 = new int[3]; // 0으로 초기화
int[] arr2 = new int[] {1, 2, 3};
double[] arr3 = {1.0, 2.0, 3.0};
double[] arr4 = new double[3]; // 0.0으로 초기화
BoxA6[] arr5 = new BoxA6[3];
for (int i=0; i<arr1.length; i++)
{
System.out.print(arr1[i] + " ");
System.out.print(arr2[i] + " ");
System.out.print(arr3[i] + " ");
System.out.print(arr4[i] + " ");
System.out.print(arr5[i] + " ");
System.out.println();
}
}
}
main() 메서드의 매개변수
public static void main(String[] args)
{
}
main() 메서드는 개발자가 직접 호출하는 메서드가 아니고 JVM이 프로그램을 실행할 때 불리는 메서드
그래서 메서드를 호출해 인수를 넘겨주는 방식이 아니고 '명령 프롬프트'에서 프로그램을 실행할 때 인수를 넘겨주거나 이클립스에서는 다음에서 하는 방법으로 인수를 넘겨주어야 테스트를 할 수 있음
명령행에서 다음과 같이 실행하면 JVM이 내부적으로 배열을 만들어서 main() 메서드에 넘겨주게 됨
C:\JavaStudy> java Simple Apple Banana Orange
String[] arr = new String[] {"Apple", "Banana", "Orange"};
main(arr);
public class Ex07_mainParameter
{
public static void main(String[] args)
{
// main 메서드의 매개변수 확인
for(int i = 0; i < args.length; i++ )
System.out.println(args[i]);
}
}
for ~ each 문
'향상된 기능의 for문'
public class Ex08_EnhancedFor
{
public static void main(String[] args)
{
int[] arr = {1, 2, 3, 4, 5};
// 배열 요소 전체 출력
for(int e: arr) {
System.out.print(e + " ");
}
System.out.println(); // 줄 바꿈을 목적으로
int sum = 0;
// 배열 요소의 전체 합 출력
for(int e: arr) {
sum = sum + e;
}
System.out.println("sum: " + sum);
}
}
class House
{
private int houseNum;
private String name;
House(int houseNum, String name)
{
this.houseNum = houseNum;
this.name = name;
}
public int getHouseNum()
{
return houseNum;
}
public String getName()
{
return name;
}
}
public class Ex09_EnhancedForObject
{
public static void main(String[] args)
{
House[] arr = new House[5];
arr[0] = new House(101, "홍길동");
arr[1] = new House(102, "전우치");
arr[2] = new House(103, "손오공");
arr[3] = new House(104, "해리포터");
arr[4] = new House(105, "멀린");
for(House e: arr)
{
if(e.getHouseNum() == 102)
System.out.println(e.getName());
}
}
}
다차원 배열
다차원 배열은 2차원, 3차원 배열 등으로 만들 수 있음
2차원 배열
int[][] arr2 = new int[3][3];
public class Ex10_ForInFor
{
public static void main(String[] args)
{
int[][] arr = new int[3][3];
int num = 1;
for(int i=0; i<3; i++) {
// 먼저 i로 층을 정하고 여기서 j로 각 층의 방을 다 돕니다.
for(int j=0; j<3; j++) {
arr[i][j] = num;
num++;
}
}
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
}
2차원 배열의 실제 구조
// 자바에서는 다음과 같은 초기화도 가능
// C언어는 불가능
int[][] arr5 = {
{0},
{10, 11},
{20, 21, 22}
}
public class Ex11_PartiallyFilled
{
public static void main(String[] args)
{
int[][] arr = {
{11},
{22, 33},
{44, 55, 66}
};
// 배열의 구조대로 내용 출력
for(int i=0; i<arr.length; i++)
{
for(int j=0; j<arr[i].length; j++)
{
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
}
배열 관련 유틸리티 메서드
배열을 편하게 사용하게 해주는 여러 메서드
배열의 초기화 메서드
배열이 엄청 클 때는 값을 직접 일일이 지정해주는 초기화 방식은 무리
다음 클래스에 있는 메서드를 사용하여 원하는 값으로 배열 전부 또는 일부를 채울 수 있음
// java.util.Arrays 클래스에 정의되어 있는 메서드
public static void fill(int[] a, int val)
// 두 번째 매개변수로 전달된 값으로 배열 초기화
public static void fill(int[] a, int fromIndex, int toIndex, int val)
// 인덱스 fromIndex ~ (toIndex-1) 범위까지 val값으로 배열 초기화
배열의 복사 Array 클래스
// java.util.Arrays 클래스에 정의되어 있는 메서드
public static int[] copyOf(int[] original, int newLength)
// original에 전달된 배열을 첫 번째 요소로부터 newLength 길이만큼 복사
public static int[] copyOfRange(int[] original, int from, int to)
// original에 전달된 배열을 인덱스 from부터 to 이전 요소까지 복사
// java.util.System 클래스에 정의되어 있는 메서드
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
// 배열 src의 srcPos에서 배열 dest의 destPos로 length 길이만큼 복사
import java.util.Arrays;
public class Ex12_ArrayCopy
{
public static void main(String[] args)
{
int[] arr1 = new int[10];
int[] arr2 = new int[8];
// 배열 arr1을 3으로 초기화
Arrays.fill(arr1, 3);
// 배열 arr1을 arr2로 부분 복사
System.arraycopy(arr1, 0, arr2, 3, 4);
// arr1 출력
for(int i=0; i<arr1.length; i++)
System.out.print(arr1[i] + " ");
System.out.println();
// arr2 출력
for(int i=0; i<arr2.length; i++)
System.out.print(arr2[i] + " ");
System.out.println();
// 배열 ar1을 ar3로 부분 복사
int[] arr3 = Arrays.copyOfRange(arr2, 2, 5);
// arr3 출력
for(int i=0; i<arr3.length; i++)
System.out.print(arr3[i] + " ");
System.out.println();
}
}
배열 내용 비교
Arrays 클래스에는 배열을 비교해주는 equals() 메서드가 있음
두 배열에 저장된 데이터의 수, 순서 그리고 내용이 같을 때 true 반환
(배열 길이가 다르면 false 반환)
import java.util.Arrays;
public class Ex13_ArrayEquals
{
public static void main(String[] args)
{
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
boolean bCheck = Arrays.equals(arr1, arr2);
System.out.println(bCheck);
}
}
배열의 내용 정렬
Arryas 클래스에는 배열을 정렬해주는 sort() 메서드가 있음
public static void sort(int[] a)
// 매개변수 a로 전달된 배열을 오름차순으로 정렬
import java.util.Arrays;
public class Ex14_ArraySort
{
public static void main(String[] args)
{
int[] arr1 = {1, 3, 2, 4};
double[] arr2 = {4.4, 3.3, 2.2, 1.1};
String[] arr3 = {"홍길동", "전우치", "손오공", "멀린"};
Arrays.sort(arr1);
Arrays.sort(arr2);
Arrays.sort(arr3);
for (int n : arr1)
System.out.print(n + "\t");
System.out.println();
for (double d : arr2)
System.out.print(d + "\t");
System.out.println();
for (String s : arr3)
System.out.print(s + "\t");
System.out.println();
}
}
'JAVA > 이재환의 자바 프로그래밍 입문' 카테고리의 다른 글
[Java] Ch.17 자바의 기본 클래스 (0) | 2023.10.23 |
---|---|
[Java] Ch.16 예외 처리 (1) | 2023.10.23 |
[Java] Ch.14 String 클래스 (0) | 2023.10.20 |
[Java] Ch.13 패키지와 클래스 패스 (0) | 2023.10.20 |
[Java] Ch.12 클래스의 상속 (0) | 2023.10.20 |