3. LOOPS AND ARRAY_08 ARRAY

jaegeunsong97·2022년 11월 17일
0

[Inflearn] 홍팍 자바

목록 보기
8/15

Array

관련 데이터를 하나로 묶는 방법!
책을 1권, 2권,… 순서로 정리하면 편리하다. 한 학급의 학생 이름도 번호를 붙이면 관리에 좋다. 프로그램도 마찬가지다. 관련 데이터를 순서대로 관리하면 좋다.

definition >> 여러 값을 하나의 변수로 묶은 것. 이를 배열(arrays)이라 한다. 아래 코드는 9명의 학생 성적을 int타입 배열에 담은 예이다.

int[] scores = { 65, 74, 23, 75, 68, 96, 88, 98, 54 };

character >> 배열은 인덱스(index)라는 순서를 가지며, 모든 값의 타입이 같다.

How to use arrays

creat >> 배열은 보통 두 가지 방법으로 만든다.

// 1) 생성과 동시에 초기화
double[] arr = { 1.5, 3.2, 4.3, 0.9 }; // double 형 배열 생성
String[] names = { "Tom", "Kate", "Paul", "James" }; // String 배열 생성
// 2) 공간 할당 후 값 대입
int[] ids = new int[3]; // int형 배열 ids 공간 할당
ids[0] = 100; // 값 대입
ids[1] = 200; // 값 대입
ids[2] = 300; // 값 대입

using arrays elements >> 배열의 요소는 인덱스를 통해 사용한다.

// 1) 배열 값 읽기(read)
int[] scores = {99, 88, 77};
System.out.println(scores[0]); // 99
System.out.println(scores[1]); // 88
System.out.println(scores[2]); // 77
// 2) 배열 값 변경(write)
System.out.println(scores[0]); // 99
scores[0] = 0; // 0번 인덱스 값 변경
System.out.println(scores[0]); // 0

Arrays uses

using with loop code >> 배열을 보통 반복문과 함께 활용된다.

// 배열의 총합 구하기, 노가다 버전
int[] arr = { 7, 9, 31, 2, 6 };
int sum = arr[0];
sum += arr[1];
sum += arr[2];
sum += arr[3];
sum += arr[4];
// 반복문을 사용하여 개선
sum = 0;
for (int i = 0; i < 5; i++) {
  sum += arr[i]
}

length keyword >> length 키워드로 배열의 길이를 알 수 있다.

String[] names = {"Kim", "Lee", "Park", "Choi", "Oh", "Jo"};
int[] mathScores = {82, 76, 100, 92, 68, 96};
for (int i = 0; i < names.length; i++) {
  System.out.printf("%s : %d\n", names[i], mathScores[i]);
}

1) make arrays and uses - 1

make arrays >> 배열의 생성은, 중괄호에 값들을 넣어 만듭니다. 이때, 타입 뒤쪽에 대괄호([])가 필요합니다.

// int 배열 scores를 생성
int[] scores = { 90, 68, 77, 98 };
// String 배열 names를 생성
String[] names = {"Sam", "Kate", "John", "Jeny"};

access of array elements >> 배열에 담긴 값들은, 인덱스(index)라는 위치를 통해 접근 가능합니다. 인덱스는 0부터 시작함을 주의하세요.

System.out.println(names[0]); // "Sam"
System.out.println(names[1]); // "Kate"
System.out.println(names[2]); // "John"
System.out.println(names[3]); // "Jeny"

CODE

public class Grade {
  public static void main(String[] args) {
    // 배열 생성
    double[] grades = {3.45, 2.82, 3.85, 3.94};
     System.out.printf("1학년: %.2f\n", grades[0]);
     System.out.printf("2학년: %.2f\n", grades[1]);
     System.out.printf("3학년: %.2f\n", grades[2]);
     System.out.printf("4학년: %.2f\n", grades[3]);
  }
}

2) make arrays and uses - 2

make arrays >> 배열 생성의 또 다른 방법으로는, 크기를 먼저 잡고 하나씩 대입하는 방식이 있습니다.

// A. 기존 생성 법 - 생성과 동시에 초기화
int[] mathScore = { 96, 88, 72, 68 };
// B.1 먼저 배열의 크기 설정 후,
int[] arr = new int[4];
// B.2 인덱스별 값 대입
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
arr[4] = 44;

CODE

public class Americano {
  public static void main(String[] args) {
    // 배열 생성
    int[] sales = new int[5];
    // 배열 값 초기화
    sales[0] = 52;
    sales[1] = 50;
    sales[2] = 55;
    sales[3] = 42;
    sales[4] = 38;
    // 배열 합 계산
    int sum = sales[0] + sales[1] + sales[2] + sales[3] + sales[4];
    // 출력
    System.out.printf("총 판매량: %d잔\n", sum);
  }
}

3) arrays and loop

배열과 반복문을 활용하면, 더욱 풍부한 프로그래밍을 할 수 있습니다. 아래는 배열 요소들의 총합을 구하는 예입니다.

# 변수 생성
int[] scores = { 88, 76, 92, 68, 55, 48, 82 };
int sum = 0;
# 배열 요소의 합 계산
for (int i = 0; i < 7; i++) {
  sum += scores[i];
}
# 출력
System.out.println(sum); // 509

CODE

public class SumArray {
 public static void main(String[] args) {
    // 변수 생성
    int[] runningMinutes = { 42, 66, 57, 54, 88 };
    int sum = 0;
    /* 1. for 문을 사용하여 총합을 계산하시오. */
    for (int i = 0; i < 5; i ++) {
      sum += runningMinutes[i];
    }
    /* 2. 평균을 계산하시오. */
    double average = sum / 5.0;
    // 결과 출력
    System.out.printf("달리기 시간 총합: %d분\n", sum);
    System.out.printf("달리기 시간 평균: %.0f분\n", average);
  }
}

4) length of arrays

배열의 길이는 length 키워드를 사용하여 구할 수 있습니다.

// 배열 생성
String[] courses = { "자바", "자료구조", "알고리즘" };
// 배열의 길이 출력
System.out.println(courses.length); // 3

length 키워드는 모든 배열 순회 시 활용 가능합니다.

// 기존 방법
for (int i = 0; i < 3; i++) {
  System.out.println("%s\n", courses[i]);
}
// length 활용법
for (int i = 0; i < courses.length; i++) {
  System.out.println("%s\n", courses[i]);
}

CODE

public class ArrayLength {
  public static void main(String[] args) {
    // 변수 생성
    String[] cores = {"자바", "자료구조", "알고리즘", "데이터베이스"};
    String[] electives = {"컴퓨터 네트워크", "운영체제", "소프트웨어 공학"};
    String[] generals = {"영어회화", "영독해", "영작문", "팀워크", "직업윤리"};
    // 핵심 과정 출력
    System.out.printf("핵심과정: ");
    for (int i = 0; i < cores.length; i++) {
      System.out.printf("%s ", cores[i]);
    }
    /* 1. 선택 과정을 출력하시오. */
    System.out.printf("\n선택과정: ");
    for (int i = 0; i < electives.length; i++) {
      System.out.printf("%s ", electives[i]);
    }
    /* 2. 교양 과정을 출력하시오. */
    System.out.printf("\n교양과정: ");
    for (int i = 0; i < generals.length; i++) {
      System.out.printf("%s ", generals[i]);
    }
  }
}

5) get out of arrays

길이가 N인 배열의 인덱스는 0부터 시작하고, 그 끝은 N-1이 됩니다. 배열의 인덱스를 넘어가면 에러가 발생합니다.

// 정수형 배열
int[] scores = { 88, 72, 96, 28, 60 };
// 에러 발생
scores[-5] = 0; // (X)
scores[100] = 5; // (X)


CODE

public class OutOfIndex {
  public static void main (String[] args) {
    // 배열 생성
    String[] names = { "Kim", "Lee", "Park", "Choi" };
    // 배열요소 출력
    System.out.printf("names[%d] => %s\n", -1, "에러!! 인덱스는 음수가 될 수 없음.");
    System.out.printf("names[%d] => %s\n", 0, names[0]);
    System.out.printf("names[%d] => %s\n", 1, names[1]);
    System.out.printf("names[%d] => %s\n", 2, names[2]);
    System.out.printf("names[%d] => %s\n", 3, names[3]);
    System.out.printf("names[%d] => %s\n", 4, "에러!! 배열 인덱스를 벗어남.");
  }
}

6) arrays and parameters

pass variable to method >> 우리는 앞서, 일반 변수들이 메소드로 전달될 수 있음을 배웠습니다.

// 변수 생성
double a = 10.4;
double b = 6.6;
double result = add(a, b);

parameter of array style >> 배열을 전달받기 위해선, 파라미터의 타입 또한 배열로 선언해야 합니다.

# 메소드 정의부
public static int average(int[] arr) {
  ...
}

CODE

public class ArrayToParameter {
  public static void main(String[] args) {
    // 배열 생성
    int[] evens = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 }; // 짝수
    int[] primes = { 2, 3, 5, 7, 11, 13, 17, 19 }; // 소수
    // 계산
    int evenSum = sum(evens);
    int primeSum = sum(primes);
    // 출력
    System.out.println("0 이상 20 미만의 짝수와 소수 중..");
    System.out.printf("짝수의 합: %d\n", evenSum);
    System.out.printf("소수의 합: %d\n", primeSum);
  }
  // 정수형 배열을 입력 받아 총합을 반환
  public static int sum(int[] arr) {
    int sum = 0;
    for (int i = 0; i < arr.length; i++) {
      sum += arr[i];
    }
    /* 해당 메소드를 완성하세요. */
    return sum;
  }
}

7) review: average of arrays

CODE

public class DailyUser {
  public static void main(String[] args) {
    // 배열 생성
    int[] users = { 581, 512, 527, 495, 423, 141, 236 };
    // 계산
    double dailyUser = average(users);
    // 출력
    System.out.printf("하루 평균 사용자: %.2f명", dailyUser);
  }
  // 정수 배열을 입력받아, 평균을 반환
  public static double average(int[] arr) {
    // 1. 총합을 구하시오.
    double sum = 0.0;
    for (int i = 0; i < arr.length; i++) {
      sum += arr[i];
    }
    // 2. 평균을 계산하시오.
    double avg = sum / 7.0;
    // 결과값 반환
    return avg;
  }
}
profile
블로그 이전 : https://medium.com/@jaegeunsong97

0개의 댓글