Java - Array

CYSSSSSSSSS·2024년 2월 26일
0

자바

목록 보기
8/26

Array

Array

Start

  • 배열이 필요한 이유 -> 값이 다 다른 값을 쓰기 위해서는 코드가 줄이 많이 길어지고 반복문으로 처리할 수가 없다.
package array;

public class Array1 {
    public static void main(String[] args) {
        int student1 = 90;
        int student2 = 80;
        int student3 = 70;
        int student4 = 80;
        int student5 = 60;

        System.out.println("학생1 점수: " + student1);
        System.out.println("학생2 점수: " + student2);
        System.out.println("학생3 점수: " + student3);
        System.out.println("학생4 점수: " + student4);
        System.out.println("학생5 점수: " + student5);
    }
}

Declaration and Creation

  • 같은 타입의 변수를 사용하기 편하게 하나로 묶어둔 것이다.
package array;

public class ArrayRef1 {
    public static void main(String[] args) {
        int [] students; // 배열 선언
        students = new int[5]; // 배열의 크기 설정

        students[0] = 90;	// 배열에 위치에 맞는 값을 넣을 수 있다.
        students[1] = 80;
        students[2] = 70;
        students[3] = 60;
        students[4] = 50;

        System.out.println("학생1 점수: " + students[0]);
        System.out.println("학생2 점수: " + students[1]);
        System.out.println("학생3 점수: " + students[2]);
        System.out.println("학생4 점수: " + students[3]);
        System.out.println("학생5 점수: " + students[4]);
    }
}
  • 배열 선언 할때는 대괄호를 넣어야 한다.
  • 배열 크기를 정할때는 new + 자료형 + 대괄호(크기)를 넣어줘야 한다.
  • 자바는 배열을 생성할때 그 내부값을 선언한 자료형으로 초기화를 해준다.
  • int(0) , boolean(false) , String(null) 로 초기화 된다.
  • 배열을 생성하면 선언된 크기만큼 메모리를 확보한다
  • new int [5] -> 5x(4bytes) = 20bytes
  • 배열이 만들어지면 참조값을 반환해준다.
  • 참조값을 통해 배열에 접근이 가능하다.

Array index

  • 배열은 대괄호 사이에 번호를 넣어 위치를 나타내는데 이를 인덱스(index) 라고 한다.
  • 사용하는 방법은 대괄호 사이에 숫자만 넣어주면 된다.
  • 선언한 배열의 크기를 오버 할 경우 index out of range 에러가 발생한다.

Primitive Type vs Reference Type

  • 자바의 기본 변수형 타입은 기본형과 참조형으로 구분할 수 있다.
  • 기본형은 우리가 지금까지 바온 int,long,double,boolean 처럼 변수에 사용할 값을 직접 넣을수 있는 타입이다.
  • 참조형은 int[] students와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입이다.
  • 참조형에는 배열이나 객체나 클래스를 담을 수 있는 변수들이 해당된다.

동적으로 배열 크기를 변경

int size = 1000;
new int[size];
  • Scanner를 통해 사용자로부터 값을 입력 받아 배열의 크기를 변경할 수 있다.

Array Refactoring

리펙토링

  • 기존의 코드를 유지하면서 내부 구조를 개선하여 가독성을 높이고, 유지보수를 용이하게 하는 과정을 말한다.
  • 리펙토링은 버그를 줄이고, 코드의 설계를 개선하는 데에도 도움이된다.
package array;

public class ArrayRef2 {
    public static void main(String[] args) {
        int [] students; // 배열 선언
        students = new int[5]; // 배열의 크기 설정

        students[0] = 90;
        students[1] = 80;
        students[2] = 70;
        students[3] = 60;
        students[4] = 50;

        for (int i=0; i<students.length; i++){  // students.length -> length는 배열의 크기를 구할수 있다.
            System.out.println("학생"+(i+1)+" 점수: " + students[i]);
        }
       
    }
}
  • length 배열의 크기를 구하는 속성이다.
  • 대입은 불가능하며 조회만 가능하다.
package array;

public class ArrayRef3 {
    public static void main(String[] args) {
        int [] students; // 배열 선언
        students = new int[]{90,80,70,60,50};   // 배열의 들어가는 값을 초기화 할 수 있다.

        for (int i=0; i<students.length; i++){  // students.length -> length는 배열의 크기를 구할수 있다.
            System.out.println("학생"+(i+1)+" 점수: " + students[i]);
        }

    }
}

  • 생성과 동시에 초기화가 가능하다.
package array;

public class ArrayRef4 {
    public static void main(String[] args) {
        int [] students = {90,80,70,60,50}; // 배열 선언 + 초기화

        for (int i=0; i<students.length; i++){  // students.length -> length는 배열의 크기를 구할수 있다.
            System.out.println("학생"+(i+1)+" 점수: " + students[i]);
        }

    }
}

2d array

  • 하나의 차원이 추가되어 관리되는 것이 2차원 배열이다.
  • int [][] arr =new int[2][3]와 같이 선언하고 정리한다.
  • 순서는 행의 크기 , 열의 크기로 지정하면 된다.
package array;

public class ArrayDi0 {
    public static void main(String[] args) {
        int [][] arr = new int [2][3]; // 행,열
        arr[0][0] = 1;
        arr[0][1] = 2;
        arr[0][2] = 3;
        arr[1][0] = 4;
        arr[1][1] = 5;
        arr[1][2] = 6;

        // 0번째 행 출력
        System.out.print(arr[0][0] + " ");
        System.out.print(arr[0][1] + " ");
        System.out.print(arr[0][2] + " ");
        System.out.println();
        // 1번쨰 행 출력
        System.out.print(arr[1][0] + " ");
        System.out.print(arr[1][1] + " ");
        System.out.print(arr[1][2] + " ");

    }
}

2d array refactoring

package array;

public class ArrayDi2 {
    public static void main(String[] args) {
        int [][] arr = new int [2][3]; // 행,열
        arr[0][0] = 1;
        arr[0][1] = 2;
        arr[0][2] = 3;
        arr[1][0] = 4;
        arr[1][1] = 5;
        arr[1][2] = 6;

        for(int row = 0; row < 2; row++){
            for(int col =0; col<3;col++){
                System.out.print(arr[row][col] + " ");
            }
            System.out.println();
        }
    }
}
package array;

public class ArrayDi2 {
    public static void main(String[] args) {
        int [][] arr = new int [][]{    // 선언과 동시에 초기화가 가능하다.
            {1,2,3},
            {4,5,6}
        }; // 행,열
        
        for(int row = 0; row < 2; row++){
            for(int col =0; col<3;col++){
                System.out.print(arr[row][col] + " ");
            }
            System.out.println();
        }
    }
}
  • 2차원 배열 역시 선언과 동시에 초기화가 가능하다
package array;

public class ArrayDi2 {
    public static void main(String[] args) {
        int [][] arr = new int [][]{    // 선언과 동시에 초기화가 가능하다.
            {1,2,3},
            {4,5,6}
        }; // 행,열

        for(int row = 0; row < arr.length; row++){  // arr 자체는 2개의 데이터를 가지고 있다,
            for(int col =0; col<arr[row].length;col++){ // arr 의 열의 길이는 arr[row] 의 길이를 측정하면 된다.
                System.out.print(arr[row][col] + " ");
            }
            System.out.println();
        }
    }
}
  • arr.length -> 행의 길이
  • arr[row].length -> arr 열의 길이

2d array init

  • 배열의 길이를 i라는 변수를 통해 1씩 증가하는 코드를 작성
package array;

public class ArrayDi4 {
    public static void main(String[] args) {
        int [][] arr = new int [2][3];

        int i = 0;
        for (int row =0; row<arr.length; row++){
            for (int col=0;col<arr[row].length; col++){
                arr[row][col] = ++i;
            }
        }

        for(int row = 0; row < arr.length; row++){  // arr 자체는 2개의 데이터를 가지고 있다,
            for(int col =0; col<arr[row].length;col++){ // arr 의 열의 길이는 arr[row] 의 길이를 측정하면 된다.
                System.out.print(arr[row][col] + " ");
            }
            System.out.println();
        }
    }
}

for-each

  • index를 이용한 접근이 아니라 배열 자체에서 요소를 하나하나 꺼내서 사용할 때 쓴다.
package array;

public class EnhancedFor1 {
    public static void main(String[] args) {
        int [] numbers = {1,2,3,4,5};


        for(int i=0;i<numbers.length;i++){
            int number = numbers[i];
            System.out.println(number);
        }
        
        // 향상된 for문 
        for (int number:numbers) {  // numbers 배열에 있는 원소 하나하나르 가져와서 사용한다.
            System.out.println(number);
        }
    }

}
  • 인덱스를 사용하지 않는다.
  • :을 기준으로 오른쪽에는 배열의 이름 왼쪽에는 사용할 변수명
  • 코드가 간결하고 가독성이 좋다
  • iter 명령어로 쉽게 for each 문을 사용할수 있다.
  • 직접적인 index 가 필요할 때는 for each 보다 for를 쓰는게 좋다.

ArrayEx1

  • 다음의 코드를 배열을 사용하여 리펙토링 하시오
package array.ex;

import java.util.Arrays;

public class ArrayEx1 {
    public static void main(String[] args) {
        int student1 = 90;
        int student2 = 80;
        int student3 = 70;
        int student4 = 60;
        int student5 = 50;

        int total = student1 + student2 + student3 + student4 + student5;
        double average = (double) total / 5;

        System.out.println("total = " + total);
        System.out.println("average = " + average);
    }
}
package array.ex;

import java.util.Arrays;

public class ArrayEx1 {
    public static void main(String[] args) {

        int [] students = {90,80,70,60,50};
        int total = 0;

        for(int i = 0; i<students.length; i++){
            total += students[i];
        }

        double average = (double) total / students.length;

        System.out.println("total = " + total);
        System.out.println("average = " + average);
    }
}

ArrayEx2

  • 5개의 정수를 입력받고 배열에 저장한 다음 출력하는 프로그램을 작성하시오
package array.ex;

import java.util.Scanner;

public class ArrayEx2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int [] nums = new int[5];

        for(int i = 0; i < nums.length; i++){
            nums[i] = scanner.nextInt();
        }
        System.out.println("출력");
        for(int i = 0; i < nums.length; i++){
            if (i != nums.length -1){
                System.out.print(nums[i] + ", ");
            }else {
                System.out.print(nums[i]);
            }
        }
    }
}

ArrayEx3

  • 5개의 정수를 입력받아 역수로 출력
package array.ex;

import java.util.Scanner;

public class ArrayEx3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] arrays = new int[5];

        System.out.println("5개의 정수를 입력하시오");
        
        for(int i = 0; i<5;i++){
            arrays[i] = scanner.nextInt();
        }
        for(int i = 0; i<5;i++){
            if(i == 4){
                System.out.print(arrays[4-i]);
            }else{
                System.out.print(arrays[4-i] + ", ");
            }
        }
    }
    
}

ArrayEx4

  • 5개의 정수를 입력받아 합과 평균을 출력하시오
package array.ex;

import java.util.Scanner;

public class ArrayEx4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        int[] numbers = new int[5];
        int sum = 0;
        double average;

        System.out.println("5개의 정수를 입력하시오");

        for(int i = 0; i<5; i++){
            numbers[i] = scanner.nextInt();
            sum += numbers[i];
        }
        average = sum / 5;
        System.out.println("입력한 정수의 합계: " + sum);
        System.out.println("입력한 정수의 평균: " + average );
    }

}

ArrayEx5

  • 배열의 크기를 사용자로부터 입력받은 다음 배열에 정수를 저장하여 합과 평균을 출력하시오
package array.ex;

import java.util.Scanner;

public class ArrayEx5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("입력받을 숫자를 입력하세요: ");
        int count = scanner.nextInt();
        int [] nums = new int[count];
        int sum = 0;
        double average;
        System.out.println(count + "개의 정수를 입력하시오:");
        for(int i=0; i<count;i++){
            nums[i] = scanner.nextInt();
            sum += nums[i];
        }
        average = sum / count;
        System.out.println("입력된 정수의 합계: " + sum);
        System.out.println("입력한 정수의 평균: " + average);
    }
    
}

ArrayEx6

  • 사용자로부터 n개의 정수를 입력받아 가장 작은수와 가장 큰수를 찾아 출력하는 프로그램을 작성하시오.
package array.ex;

import java.util.Scanner;

public class ArrayEx6 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("입력받을 숫자의 개수를 입력하세요: ");
        int count = scanner.nextInt();
        int []nums = new int[count];
        System.out.println(count + "개의 정수를 입력하세요: ");
        for(int i=0;i<count;i++){
            nums[i] = scanner.nextInt();
        }
        int max = nums[0];
        int min = nums[0];

        for(int i = 1; i<nums.length;i++){
            if (max < nums[i]) {
                max = nums[i];
            }
            if (min > nums[i]) {
                min = nums[i];
            }
        }

        System.out.println("가장 큰 정수는: " + max);
        System.out.println("가장 작은 수는: " + min);
    }
    
}

ArrayEx7

  • 사용자로부터 4명 학생의 국어,수학,영어 점수를 입력받아 각 학생의 총점과 평균을 계산하는 프로그램을 작성하세요
package array.ex;

import java.util.Scanner;

public class ArrayEx7 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int korean,math,english;
        int [] scores = new int[4];
        for(int i = 0;i<4;i++){
            System.out.println((i+1) + "번 학생의 성적을 입력하세요:");
            System.out.print("국어 점수: ");
            korean = scanner.nextInt();
            System.out.print("수학 점수: ");
            math = scanner.nextInt();
            System.out.print("영어 점수: ");
            english = scanner.nextInt();
            scores[i] = korean + math + english;
        }
        for(int i = 0; i<4; i++){
            System.out.println((i+1) + "번 학생의 총점: " + scores[i]+", 평균: " + ((double)scores[i] / 3));
        }
    }
    
}

상품 관리 프로그램

  • 상품 등록 : 상품 이름과 가격을 입력받아 저장한다.

  • 상품 목록 : 지금까지 등록한 모든 상품의 목록을 출력한다.

  • 첫 화면에서 세 가지 선택지를 준다 : 1.상품 등록 , 2.상품 목록 , 3.종료

  • 상품 등록시 사용자가 상품 이름과 가격을 입력하면 배열에 저장한다.

  • 상품 목록을 출력하면 배열에 저장된 모든 상품을 출력한다.

  • 종료를 누르면 프로그램을 종료한다.

  • 상품은 최대 10개까지 등록 가능

조건

  • String[] productNames : 상품 이름을 저장할 String 배열
  • int[] productPrices : 상품 가격을 저장할 String 배열
  • int productCount : 현재 등록된 상품의 개수를 저장할 int 변수
package array.ex;

import java.util.Scanner;

public class ProductAdminEx {
    public static void main(String[] args) {
        int maxProducts = 10;
        String[] productNames = new String[maxProducts];
        int[] productPrices = new int[maxProducts];
        int productCount = 0;

        Scanner scanner = new Scanner(System.in);
        while(true){
            System.out.print("1.상품 등록 | 2.상품 목록 | 3.종료\n 메뉴를 선택하세요:");
            int menu = scanner.nextInt();

            if (menu == 1) {
                if (productCount > maxProducts) {
                    System.out.println("더 이상 상품을 등록할 수 없습니다.");
                    continue;
                }
                System.out.print("상품 이름을 입력하세요: ");
                productNames[productCount] = scanner.next();
                System.out.print("상품 가격을 입력하세요: ");
                productPrices[productCount] = scanner.nextInt();
                productCount++;
            }else if (menu == 2) {
                if (productCount == 0) {
                    System.out.println("등록된 상품이 없습니다.");
                    continue;
                }else{
                    for(int i=0; i<productCount; i++){
                        System.out.println("상품 이름: " + productNames[i] + " 상품 가격: " + productPrices[i]);
                    }
                }
            }else{
                System.out.println("상품 등록 프로그램을 종료합니다.");
                break;
            }

        }

    }
    
}
profile
개발자 되고 싶어요

0개의 댓글

관련 채용 정보