package chapter06;
public class ArrEx {
public static void main(String[] args) {
int[] arrInt;
int arrInt2[];
double[] arrDouble;
String[] arrString;
}
}
배열 생성
타입[] 변수명; // 배열을 다루기 위한 참조변수 선언
변수이름 = new 타입[길이]; // 배열 실제 생성(실제 저장 공간)
배열의 인덱스
인덱스(index)는 배열의 요소마다 붙여진 일련번호
인덱스의 범위는 0 ~ 배열길이 - 1
int[] score = new int[5]
score
score[0]
score[1]
score[2]
score[3]
score[4]
0x100
0
0
0
0
0
package chapter06;
public class ArrEx3 {
public static void main(String[] args) {
int[] arrInt = new int[5]; // 길이가 5개인 배열 객체 생성
arrInt[0] = 1;
arrInt[1] = 2;
arrInt[2] = 3;
arrInt[3] = 4;
arrInt[4] = 5;
}
}
배열의 초기화
int [ ] score = new int [ ] { 50, 60, 70, 80, 90 }; // 배열이 생성 과 초기화
int[ ] score = { 50, 60, 70, 80, 90 }; int [] 생략 가능
package chapter06;
public class ArrEx5 {
public static void main(String[] args) {
String[] arrStr = {"홍길동", "이순신", "김유신"};
}
}
배열의 길이
int 범위의 양의 정수(0 포함)
배열이름.length
배열은 생성 후 길이를 변경 할 수 없음
package chapter06;
public class ArrEx6 {
public static void main(String[] args) {
String[] arrStr = {"홍길동", "이순신", "김유신"};
System.out.println("배열의 길이 : "+arrStr.length);
}
}
배열과 반복문 입/출력
index 위치의 값 출력
반복을 통해 index 위치의 값들 출력
index 없는 반복문을 통해 값들 출력
배열객체 Arrays 메소드 toString() 으로 출력
반복문으로 출력
package chapter06;
public class ArrEx7 {
public static void main(String[] args) {
String[] arrStr = {"홍길동", "이순신", "김유신"};
for (int i=0; i<arrStr.length; i++) {
System.out.println(arrStr[i]);
}
}
}
반복문으로 입/출력
package chapter06;
public class ArrEx8 {
public static void main(String[] args) {
int[] number = new int[100];
// 배열 변수에 입력
for (int i=0; i<number.length; i++) {
number[i] = i+1;
}
// 배열 변수 출력
for (int i=0; i<number.length; i++) {
System.out.println(number[i]);
}
}
}
반복문, 조건문 활용
package chapter06;
import java.util.Arrays;
public class ArrayLoopTest {
public static void main(String[] args) {
// 1 ~ 100 사이의 값의 합, 짝수의 합, 홀수의 합, 3의 배수의 합을 구하시오.
// data 준비 초기화
int[] data = new int[100];
for(int i=0; i<data.length; i++) {
data[i] = i+1;
}
// data 확인
System.out.println("data="+Arrays.toString(data));
// 합 구하기
int sum = 0;
for(int i=0; i<data.length; i++) {
sum = sum + data[i];
}
// sum 확인
System.out.println("sum="+sum);
// 홀짝합 구하기
int triSum = 0;
int evenSum = 0;
int oddSum = 0;
for(int i=0;i<data.length;i++) {
if(data[i]%3 == 0) {
triSum = triSum + data[i];
}
if(data[i]%2 == 0) {
evenSum = evenSum + data[i];
}else {
oddSum += data[i];
}
}
// sum 확인
System.out.println("sum="+sum);
System.out.println("triSum="+triSum);
System.out.println("evenSum="+evenSum);
System.out.println("oddSum="+oddSum);
}
}
index 없는 반복문 출력
package chapter06;
import java.util.Arrays;
public class ArrayTest1 {
public static void main(String[] args) {
String[] arrStr = {"홍길동", "이순신", "김유신"};
// index, lenght 사용
for (int i=0; i<arrStr.length; i++) {
System.out.println(arrStr[i]);
}
// index 미사용
for (String str : arrStr) {
System.out.println("str = " + str );
}
int[] nums = new int[5];
// 배열 변수에 입력
for (int i=0; i<nums.length; i++) {
nums[i] = i+1;
}
// index, lenght 사용
for (int i=0; i<nums.length; i++) {
System.out.println(nums[i]);
}
// index 미사용
for (int num : nums ) {
System.out.println("num=" + num);
}
}
}
main(String agrs[])
콘솔에서 클래스파일 실행 시 인자값을 String 클래스 args 배열로 받음
Run > Run Configurations > Main class 확인 > Arguments 값 입력
package chapter06;
public class ArrEx9 {
public static void main(String[] args) {
System.out.println("첫번째 값 : "+args[0]);
System.out.println("두번째 값 : "+args[1]);
}
}
package chapter06;
import java.util.Arrays;
public class ArrayCopyTest {
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5};
// 배열 늘리기 - 기존 값 복사
int[] arr2 = new int[10];
for(int i = 0;i < arr1.length; i++) {
arr2[i] = arr1[i];
}
System.out.println("arr2="+Arrays.toString(arr2));
// 배열 늘리기 - System 클래스 arraycopy() 메소드 사용
int[] arr3 = new int[10];
System.arraycopy(arr2, 0, arr3, 0, arr1.length);
System.out.println("arr3="+Arrays.toString(arr3));
// 배열 늘리기 - Arrays 클래스 copyOf() 메소드 사용
int[] arr4 = null;
arr4 = Arrays.copyOf(arr1, arr1.length+5);
System.out.println("arr4="+Arrays.toString(arr4));
}
}
다차원 배열
2차원 이상의 배열
1차원 : 벡터
2차원 : 행렬
3차원 이상 : 텐서
2차원 배열은 1차원 배열의 값이 배열, 정방 행렬일 필요 없음
2차원 배열의 생성시 두번째 값은 정하지 않아도 됨
2차원배열은 반복문 2개를 중첩해서 작업
선언 방법
선언 예
타입[][] 변수이름
int [][] score
타입 변수이름[][]
int score[][]
타입[] 변수이름[]
int[] score[]
2차원 배열의 선언 및 초기화
package chapter06;
public class ArrEx10 {
public static void main(String[] args) {
// 첫번째
int[][] matrix = new int[3][3];
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[1][0] = 4;
matrix[1][1] = 5;
matrix[1][2] = 6;
matrix[2][0] = 7;
matrix[2][1] = 8;
matrix[2][2] = 9;
// 두번째
int[][] matrix2 = {{1,2,3}, {4,5,6}, {7,8,9}};
// 세번째
int[][] matrix3 = {
{1,2,3},
{4,5,6},
{7,8,9}
};
System.out.println("[첫번째]");
for (int i=0; i<matrix.length; i++) {
for (int j=0; j<matrix[i].length; j++) {
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
System.out.println("[두번째]");
for (int i=0; i<matrix2.length; i++) {
for (int j=0; j<matrix2[i].length; j++) {
System.out.print(matrix2[i][j]+" ");
}
System.out.println();
}
System.out.println("[세번째]");
for (int i=0; i<matrix3.length; i++) {
for (int j=0; j<matrix3[i].length; j++) {
System.out.print(matrix3[i][j]+" ");
}
System.out.println();
}
}
}
package chapter06;
public class ArrEx12 {
public static void main(String[] args) {
// 두번째 인덱스 생략 가능
int[][] arrInt = new int[3][];
arrInt[0] = new int[] {1};
arrInt[1] = new int[] {2,3};
arrInt[2] = new int[] {4,5,6};
for (int i=0; i<arrInt.length; i++) {
for (int j=0; j<arrInt[i].length; j++) {
System.out.print(arrInt[i][j]);
}
System.out.println();
}
}
}
3차원 배열
[][][] 3개 사용
반복문 3개를 중첩 해서 사용
package chapter06;
public class ArrEx11 {
public static void main(String[] args) {
int[][][] arrInt = new int[3][3][3];
int value = 0;
// 값 대입
for (int i=0; i<=2; i++) {
for (int j=0; j<=2; j++) {
for (int k=0; k<=2; k++) {
arrInt[i][j][k] = value++;
}
}
}
// 값 출력
for (int i=0; i<=2; i++) {
for (int j=0; j<=2; j++) {
for (int k=0; k<=2; k++) {
System.out.print(arrInt[i][j][k]+"\t");
}
System.out.println();
}
}
}
}
배열 활용 예제
총합과 평균
class ArrayTest01 {
public static void main(String[] args) {
int sum =0; // 총점을 저장하기 위한 변수
float average = 0f; // 평균을 저장하기 위한 변수
int[] score = {100, 88, 100, 100, 90};
for (int i=0; i < score.length ; i++ ) {
sum += score[i];
}
average = sum / (float)score.length ; // 계산결과를 float로 얻기 위함.
System.out.println("총점 : " + sum);
System.out.println("평균 : " + average);
}
}
최대값과 최소값
class ArrayTest02{
public static void main(String[] args) {
int[] score = { 79, 88, 91, 33, 100, 55, 95};
int max = score[0]; // 배열의 첫 번째 값으로 최대값을 초기화 한다.
int min = score[0]; // 배열의 첫 번째 값으로 최소값을 초기화 한다.
for(int i=1; i < score.length;i++) {
if(score[i] > max) {
max = score[i];
} else if(score[i] < min) {
min = score[i];
}
} // end of for
System.out.println("최대값 :" + max);
System.out.println("최소값 :" + min);
} // end of main
} // end of class
배열 값 섞기(shuffle)
class Lotto5 {
public static void main(String[] args) {
int[] numArr = new int[10];
for (int i=0; i < numArr.length ; i++ ) {
numArr[i] = i; // 배열을 0~9의 숫자로 초기화한다.
System.out.print(numArr[i]);
}
System.out.println();
for (int i=0; i < 100; i++ ) {
int n = (int)(Math.random() * 10); // 0~9중의 한 값을 임의로 얻는다.
int tmp = numArr[0];
numArr[0] = numArr[n];
numArr[n] = tmp;
}
for (int i=0; i < numArr.length ; i++ )
System.out.print(numArr[i]);
} // main의 끝
}
로또번호 1장 뽑기
package chapter06;
import java.util.Arrays;
public class LottoOne {
public static void main(String[] args) {
int[] lottoBall = new int[45];
for (int i=0; i < lottoBall.length ; i++ ) {
lottoBall[i] = i+1; // 배열을 1~45의 숫자로 초기화한다.
}
// 값 확인
System.out.println(Arrays.toString(lottoBall));
// 값 섞기
for (int i=0; i < 777; i++ ) {
int n = (int)(Math.random() * 45); // 0~44중의 한 값을 임의로 얻는다.
int tmp = lottoBall[0];
lottoBall[0] = lottoBall[n];
lottoBall[n] = tmp;
}
// 값 확인
System.out.println(Arrays.toString(lottoBall));
// 1장 뽑기
int[] lotto1 = new int[6];
for (int i=0; i < lotto1.length ; i++ ) {
lotto1[i] = lottoBall[i];
}
// 값 확인
System.out.println(Arrays.toString(lotto1));
}
로뽀 번호 5장 뽑기
package chapter06;
import java.util.Arrays;
public class LottoFive {
public static int[] getLottoOne() {
int[] lottoBall = new int[45];
for (int i=0; i < lottoBall.length ; i++ ) {
lottoBall[i] = i+1; // 배열을 1~45의 숫자로 초기화한다.
}
// 값 확인
System.out.println(Arrays.toString(lottoBall));
// 값 섞기
for (int i=0; i < 777; i++ ) {
int n = (int)(Math.random() * 45); // 0~44중의 한 값을 임의로 얻는다.
int tmp = lottoBall[0];
lottoBall[0] = lottoBall[n];
lottoBall[n] = tmp;
}
// 값 확인
System.out.println(Arrays.toString(lottoBall));
// 1장 뽑기
int[] lotto1 = new int[6];
for (int i=0; i < lotto1.length ; i++ ) {
lotto1[i] = lottoBall[i];
}
// 값 확인
System.out.println(Arrays.toString(lotto1));
return lotto1;
}
public static void main(String[] args) {
// 5장 뽑기
int[][] lotto5 = new int[5][6];
// 5장 확인
for(int i=0;i<lotto5.length;i++) {
lotto5[i] = getLottoOne();
}
System.out.println("=============== LOTTO ===============");
// 5장 출력
for(int i=0;i<lotto5.length;i++) {
System.out.println(Arrays.toString(lotto5[i]));
}
}
}
정렬(버블 정렬)
배열 길이 n 일때 첫 번째부터 n-1까지 요소에 대해 크기 비교 후 자리 바꿈 반복
class ArrayTest03 {
public static void main(String[] args) {
int[] numArr = new int[10];
for (int i=0; i < numArr.length ; i++ ) {
System.out.print(numArr[i] = (int)(Math.random() * 10));
}
System.out.println();
for (int i=0; i < numArr.length-1 ; i++ ) {
boolean changed = false; // 자리바꿈이 발생했는지를 체크한다.
for (int j=0; j < numArr.length-1-i ;j++) {
if(numArr[j] > numArr[j+1]) { // 옆의 값이 작으면 서로 바꾼다.
int temp = numArr[j];
numArr[j] = numArr[j+1];
numArr[j+1] = temp;
changed = true; // 자리바꿈이 발생했으니 changed를 true로.
}
} // end for j
if (!changed) break; // 자리바꿈이 없으면 반복문을 벗어난다.주석 후 확인
for(int k=0; k<numArr.length;k++)
System.out.print(numArr[k]); // 정렬된 결과를 출력한다.
System.out.println();
} // end for i
} // main의 끝
}