JAVA (4) - 배열
by Kim
배열
배열이란 같은 유형의 값을 하나의 묶어서 저장하는 것으로 많은 양의 값을 다룰 때 유용합니다. 배열 내부의 요소들은 연속적입니다.
선언과 생성
배열의 경우 처음 선언시 일반적인 변수 선언과 비슷하지만 변수 타입 오른쪽에 대괄호[]
를 붙여줍니다. 값을 저장할 공간은 배열 선언시 만들어지는 것이 아니라 배열 생성시 만들어집니다.
int[] arr; // 선언
arr = new int[5]; //생성
초기화 및 확인
변수 초기화와 마찬가지로, 배열에 처음으로 값을 저장하는 것입니다. 배열 내의 각각의 값을 요소라고 하고 각 요소의 고유 번호가 있는데 이를 인덱스라고 합니다.
초기화에 들어가기 앞서 변수 유형별 배열 선언을 살펴봅시다.
public static void main(String[] args) {
float[] f = new float[3]; // 0.0
System.out.println(f[0]);
System.out.println(f[1]);
System.out.println(f[2]);
double[] d = new double[3]; //0.0
System.out.println(d[0]);
System.out.println(d[1]);
System.out.println(d[2]);
boolean[] b = new boolean[3]; //false
System.out.println(b[0]);
System.out.println(b[1]);
System.out.println(b[2]);
String[] str = new String[3]; // null
System.out.println(str[0]);
System.out.println(str[1]);
System.out.println(str[2]);
}
배열은 선언만으로도 초기화가 이루어지는 것을 볼 수 있습니다.
다음은 기존 방식과 배열을 이용한 방식을 비교해보겠습니다.
public static void main(String[] args) {
int sc1 = 83;
int sc2 = 90;
int sc3 = 74;
int sc4 = 78;
int sc5 = 98;
int sc6 = 82;
int sum = 0;
sum += sc1;
sum += sc2;
sum += sc3;
sum += sc4;
sum += sc5;
sum += sc6;
System.out.println(sum);
int[] score = {83, 90, 74, 78, 98, 82};
sum = 0;
for (int idx = 0; idx <=4; idx++) {
sum += score[idx];
}
System.out.println(sum);
}
변수 선언과 생성을 값마다 하지 않고 한번에 할 수 있어서 코드가 간결해졌습니다. 배열에서 반복문 사용할 수 있는 이유는 요소 번호가 0부터 1씩 증가하는 값을 가지기 때문입니다.
(+) python에서는 변수명을 지정할 때 globals()와 for문을 통해 각각 다른 변수명을 지정할 수 있지만 자바에서는 되지 않습니다.
다음으로는 5칸의 배열에 100점부터 60점까지 입력해봅시다.
int[] arr = new int[5]; //배열을 만들면 기본값으로 초기화
arr[0] = 100;
arr[1] = 90;
arr[2] = 80;
arr[3] = 70;
arr[4] = 60;
//
for(int i=0;i<5;i++) {
arr[i] = (10-i) * 10;
}
다음으로 for each문이 있습니다. 배열이 가지고 있는 요소를 하나하나씩 받아오는 반복문입니다. 조건식, 증감식 등을 쓰지 않아도 되는 편리함이 장점입니다.
public class Ex12 {
public static void main(String[] args) {
int[] values = {1,2,3,4,5};
for(int val : values)
System.out.println(val);
}
}
배열 안의 모든 요소를 확인할 때 for문을 사용하는 이유는 배열은 참조 자료형이기 때문에 System.out.println();를 이용하여 출력하면 값이 출력되는 것이 아니라 참조 주소값을 출력하기 때문입니다. 해당 내용은 본 블로그 자바(1)에서 볼 수 있습니다.
물론 아래와 같이 다른 클래스를 이용해 문자형태로 출력하면 배열을 볼 수 있습니다.
public class Ex1 {
public static void main(String[] args) {
int[] values = {1,2,3,4,5};
System.out.println(Arrays.toString(i));
//[1, 2, 3, 4, 5]
}
}
지금까지 배운 내용들을 토대로 배열을 활용해봅시다. 아래는 스캐너, 배열, 조건/반복문을 이용하여 주사위를 뽑는 횟수를 입력하고 각각의 눈이 몇 번씩 뽑혔는지 알려주는 코드입니다.
import java.util.Scanner;
public class Ex01 {
public static void main(String[] args) {
int[] dice;
int[] count = new int[6];
Scanner sc = new Scanner(System.in);
System.out.println("주사위 굴릴 횟수 입력 : ");
int times = sc.nextInt();
sc.close();
dice = new int[times];
int i = 0;
while(i < times) {
dice[i] = (int)(Math.random() * 6 + 1);
for (int j = 0; j < 6; j++) {
if (dice[i] == j + 1) {
count[j] += 1;
}
}
i++;
}
for (int z = 0; z < 6; z++) {
System.out.println((z + 1) + "은(는) " + count[z] + "번 뽑혔습니다.");
}
}
}
다차원 배열의 선언과 생성
기존에 만든 1차원 배열이 아닌 다차원 배열이 있는데 이를 생성하기 위해서는 원하는 차원 수 만큼 대괄호[]
를 붙여줍니다. 배열 안에 있는 배열들끼리는 서로 길이가 같을 필요는 없습니다.
int[][] score = {
{100, 95, 90},
{ 20, 20, 20},
{ 30, 30, 30},
{ 40, 40, 40}
};
(+) args
메인 메소드에서 보이던 args는 cmd창에서 java로 해당 클래스를 실행할 때 추가로 입력받는 값입니다.
public static void main(String[] args) {
if(args[0].equals("/?")) {
System.out.println("도움말입니다.");
} else if(args[0].equals("+")) {
System.out.println(Integer.parseInt(args[1])+
Integer.parseInt(args[2]));
} else if(args[0].equals("-")) {
System.out.println(Integer.parseInt(args[1])-
Integer.parseInt(args[2]));
}
}
java 파일명 /? 입력시 “도움말입니다”를 출력하고, java 파일명 + 1 2 입력시 3이 출력됩니다.
Subscribe via RSS