[Java_Basic]배열(윤성우의 열혈 Java 프로그래밍)
배열
자료형이 같은 둘 이상의 값
1차원 배열 생성 방법
int[] ref = new int[5];
int[] ref -> int형 1차원 배열 인스턴스를 참조할 수 있는 '참조변수의 선언'
new int[5] -> int형 값 5개를 저장할 수 있는 '배열 인스턴스의 생성'
class ArrayIsInstance{
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];
//배열의 인스턴스 변수 접근
System.out.println("배열 ar1 길이 : " + ar1.length);
System.out.println("배열 ar2 길이 : " + ar2.length);
System.out.println("배열 ar3 길이 : " + ar3.length);
}
}

1차원 배열은 배열의 길이와 상관없이 참조가 가능하다
int[] ref;
ref = new int[5]; 의 형태이기 때문에
public static void main(String[] args){
int[] ar = new int[50];
System.out.println("length : " + ar.length); //length : 50
ar = new int[100];
System.out.println("length : " + ar.length); //length : 100
}
인스턴스를 저장할 수 있는 배열의 생성도 가능하다.
class Box{
private String conts;
Box(String cont){
this.conts = cont;
}
public String toString(){
return conts;
}
}
class ArrayIsInstance2{
public static void main(String[] args){
Box[] ar = new Box[5]; //길이가 5인 Box형 1차원 배열 생성
System.out.println("length : " + ar.length); //length: 5
}
}
배열의 저장
int[] ar = new int[3];
ar[0] = 7;
class Box{
private String conts;
Box(String cont){
this.conts = cont;
}
public String toString(){
return conts;
}
}
class BoxArray{
public static void main(String[] args){
Box[] ar = new Box[3];
//배열에 인스턴스 저장
ar[0] = new Box("First");
ar[1] = new Box("Second");
ar[2] = new Box("Third");
//저장된 인스턴스의 참조
System.out.println(ar[0]);
System.out.println(ar[1]);
System.out.println(ar[2]);
}
}

class StringArray{
public static void main(String[] args){
String[] ar = new String[7];
ar[0] = new String("Java");
ar[1] = new String("System");
ar[2] = new String("Compiler");
ar[3] = new String("Park");
ar[4] = new String("Tree");
ar[5] = new String("Dinner");
ar[6] = new String("Brunch Cafe");
int cnum = 0;
for(int i = 0; i < ar.length; i++)
cnum += ar[i].length();
System.out.println("총 문자의 수 : " + cnum);
}
}

배열 생성
int[] arr = new int[3]; // int arr[] =new int[3] 도 가능하지만 앞의것을 더 선호한다.
배열 생성 및 초기화
int[] arr = new int[] {1,2,3};
int[] arr = {1,2,3};
class ArrayTest{
public static void main(String[] args){
int[] ar = {1,2,3,4,5,6,7};
int sum = sumofAry(ar);
System.out.println(sum);
}
static int sumofAry(int[] ar){
int sum = 0;
for(int i = 0; i<ar.length; i++)
sum += ar[i];
return sum;
}
}
배열의 초기화와 배열의 복사
int[] ar = new int[10]; //배열의 모든 요소 0으로 초기화
String[] ar = new String[10]; //배열의 모든 요소 null로 초기화
public static void fill(int [] a, int val)
-> val 값으로 배열 초기화
public static void fill(int[] a, int fromIndex, int toIndex, int val)
->인덱스 from ~ to (-1) 까지의 범위를 val값으로 배열 초기화
import java.util.Arrays;
class ArrayUtils{
public static void main(String[] args){
int[] ar1 = new int[10];
int[] ar2 = new int[10];
Arrays.fill(ar1,7); //배열 ar1을 7로 초기화
System.arraycopy(ar1,0,ar2,3,4); //ar1 을ar2로 부분 복사
for(int i=0; i<ar1.length;i++)
System.out.print(ar1[i] + " ");
System.out.println(); //단순 줄바꿈
for(int i = 0; i<ar2.length;i++)
System.out.print(ar2[i] + " " );
}
}

class Simple{
public static void main(String[] args){
for(int i = 0; i < args.length; i++)
System.out.println(args[i]);
}
}

enhanced for문(for-each문)
배열이 등장하면 배열의 순차적 접근을 위해 for문이 나올 수 밖에 없다
이를 줄여서 표현 방법을 제공해야겠다 해서 만들어진것이다.
for(int e : ar){
System.out.println(e);
}
for(요소:배열){
반복할 문장들
}
class EnhanceFor{
public static void main(String[] args){
int[] ar = {1,2,3,4,5};
//배열 요소 전체 출력
for(int e : ar){
System.out.print(e + " " );
}
System.out.println();
int sum = 0;
//배열 요소의 전체 합 출력
for(int e : ar){
sum += e;
}
System.out.println("sum : " + sum);
}
}

2차원 배열 생성과 접근

길이가 4개인 배열을 3개 묶어서 사용하겠다.
class TwoDimenArray{
public static void main(String[] args){
int[][] arr = new int[3][4];
int num = 1;
//배열에 값을 저장
for(int i = 0; i < 3; i++){
for(int j = 0; j<4;j++){
arr[i][j] = num;
num++;
}
}
//배열에 저장된 값을 출력
for(int i = 0; i<3; i++){
for(int j = 0; j<4;j++){
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
}

2차원 배열의 초기화
int[][] arr = new int[][]{
{11,22,33},
{44,55,66},
{77,88,99}
};
class PartiallyFilledArray{
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();
}
}
}
