코딩 이야기
자바 배열 (5일) 본문
배열길이
배열의 길이란 배열에 저장할 수 있는 전체 항목의 개수를 말합니다. 코드에서 배열의 길이를 얻으려면 배열 객체의 length 필드를 읽습니다. 필드는 객체 내부의 데이터를 말합니다.
배열 변수.length;
배열의 length필드
package ch02;
public class ArrayLengthExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] scores = {83, 90, 87};
int sum = 0;
for(int i= 0; i<scores.length; i++) {
sum += scores[i];
}
System.out.println("총합 : "+ sum);
double avg = (double) sum / scores.length;
System.out.println("평균 : " + avg);
}
}
명령 라인 입력
프로그램을 실행을 위해 main() 메소드가 필요하다는 것을 알고 있습니다.
public static void main(String[] args) {···}
명령 라인 (명령 프롬포트)에서 위 코드를 java 명령어로 실행하면 JVM은 길이가 0인String 배열을 먼저 생성하고 main()메소드를 호출할 때 매개값으로 전달합니다.
main()메소드의 매개 변수
package ch02;
public class MainStringArrayArgument {
public static void main(String[] args) {
// TODO Auto-generated method stub
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);
}
}
다차원 배열
값들이 행과 열로서 구성된 배열을 2차원 배열이라고 합니다. 2차원 배열은수학의 행렬을 떠올리면 되는데, 가로 인덱스와 세로 인덱스를 사용합니다. 자바는 2차원 배열을 중첩 배열 방식으로 구현합니다.
예를들어 2(행)x3(열)을 만들기 위해 다음과 같은 코드를 사용합니다.
int[] [] scores = new int [2] [3];
배열 속의 배열
package ch02;
public class ArrayInArrayExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] mathScores = new int[2][3];
for(int i = 0; i < mathScores.length; i++) {
for(int k=0; k < mathScores[i].length; k++) {
System.out.println("mathScores["+i+"]["+k+"]="+mathScores[i][k]);
}
}
System.out.println();
int[][] englishScores = new int[2][];
englishScores[0] = new int[2];
englishScores[1] = new int[3];
for(int i = 0; i < englishScores.length; i++) {
for(int k=0; k < englishScores[i].length; k++) {
System.out.println("englishScores["+i+"]["+k+"]="+ englishScores[i][k]);
}
}
System.out.println();
int[][] javaScores = {{95,80}, {92,96,80}};
for(int i = 0; i < javaScores.length; i++) {
for(int k=0; k < javaScores[i].length; k++) {
System.out.println("javScores["+i+"]["+k+"]="+ javaScores[i][k]);
}
}
}
}
객체를 참조하는 배열
기본타입 (byte,short,char,int,long,float,double,boolean) 배열은 각 항목에 직접 값을 갖고 있지만 참조 타입배열은 각 항목에 객체의 번지를 가지고 있습니다. 예를 들어 String은 클래스이므로 String[] 배열은 각 항목에 문자열이 아니라 String 객체의 번지를 가지고 있습니다. String [] 배열은 String 객체를 참조 하게 됩니다.
객체를 참조하는 배열
package ch02;
public class ArrayReferenceObjectExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] strArray = new String[3];
strArray[0] = "Java";
strArray[1] = "Java";
strArray[2] = new String("Java");
System.out.println(strArray[0] == strArray[1]);
System.out.println(strArray[0] == strArray[2]);
System.out.println(strArray[0].equals(strArray[2]));
}
}
배열 복사
배열은 한 번 생성하면 크기를 변경할 수 없기 때문에 더 많은 저장 공간이 필요하다면 더 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사해야 합니다. 배열 간의 항목 값들을 복사하려면 for문을 사용하거나 System.arrarcopy() 메소드를 사용합니다.
for문으로 배열 복사
package ch05;
public class ArrayCopyByForExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] oldIntArray = {1, 2, 3};
int[] newIntArray = new int[5];
for(int i=0; i<oldIntArray.length; i++) {
newIntArray[i] = oldIntArray[i];
}
for(int i=0; i<newIntArray.length; i++) {
System.out.println(newIntArray[i]+",");
}
}
}
System.arraycopy() 메소드를 이용하여 배열 복사
Stytem.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
원본배열 시작인덱스 새 배열 시작인덱스 복사할 갯수
모든 항목을 복사할 때
예)
Stytem.arraycopy(arr1, 0, arr2, 0, arr1.length);
Stytem.arraycopy()로 배열 복사
package ch05;
public class ArrayCopyExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] oldStrArray = {"java","array","copy"};
String[] newStrArray = new String[5];
System.arraycopy(oldStrArray, 0 , newStrArray,0 ,oldStrArray.length);
for(int i=0; i<newStrArray.length; i++) {
System.out.println(newStrArray[i] + ",");
}
}
}
향상된 for문
package ch04;
public class AdvancedForExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
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);
}
}
'JAVA' 카테고리의 다른 글
JAVA 클래스 (0) | 2023.02.06 |
---|---|
자바 조건문과 반복문(5일) (0) | 2023.02.02 |
자바 배열 (4일) (0) | 2023.02.01 |
JAVA 참조 타입과 참조 변수 (0) | 2023.02.01 |
JAVA 4일 (0) | 2023.02.01 |