본문 바로가기

Studying/JAVA

[JAVA]_Array(배열)

1. 배열

 

package array;

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

        int student1 = 90;
        int student2 = 80;
        int student3 = 70;
        int student4 = 60;
        int student5 = 50;

        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);

    }
}

[Array1]

 

▶ 배열이 필요한 이유

- 학생을 추가하여 점수를 출력할 때, 많은 학생의 수를 입력하는데 있어서 많은 시간이 필요하고 문제가 발생함.

- 변수 선언하는 부분에서 int형 변수를 계속해서 추가해야하며, 반복해서 선언하는 문제가 생김.

 

이렇게 같은 타입의 변수를 반복해서 선언하고 반복해서 사용하는 문제를 해결하는 것이 배열임.


package array;

public class Array1Ref1 {
    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]);
    }
}

[Array1Ref1]

 

1. int[] students; → int형 배열 변수 선언. (int 대신 double, char... 입력할 수 있음.)

2. sutdents = new int[5]; → 총 5개의 공간을 가지는 배열을 생성.

   => 자바는 배열을 생성할 때 그 내부값을 자동으로 초기화하는데 숫자는 0, boolean은 false, String은 null(없음)으로 초기화.

 

- 배열을 생성하면 배열의 크기만큼 메모리를 확보함. int 형을 5개 사용하면 4byte * 5 = 20byte 확보.

- 배열 생성하면 자바는 메모리 어딘가에 있는 이 배열에 접근할 수 있는 참조값(주소)을 반환.

- 참조값을 통해 배열을 참조할 수 있음. 쉽게 말해 참조값을 통해 메모리에 있는 실제 배열에 접근하고 사용할 수 있음.

 

▶ 인덱스

- 배열은 변수와 사용법이 비슷하지만, 차이점이 있다면 [ ] 사이에 숫자 번호를 넣어주면 됨.

- 배열의 위치를 나타내는 숫자를 인덱스(index)라고 하는데 0부터 시작!

- 즉 사용가능한 인덱스의 범위는 0 ~ (n-1)이 됨.

▶ 기본형 / 참조형

 

① 기본형(Primitive Type)

   - 사용하는 값을 직접 넣을 수 있음.

   - int, long, double, boolean처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입.

② 참조형(Reference Type)

   - 배열 변수와 같이 메모리의 참조값을 넣을 수 있음.

   - 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입.

   - 객체나 클래스를 담을 수 있는 변수들도 모두 참조형.

 

▶ 참고

- 배열이 복잡하게 참조형을 사용하는 이유는 동적으로 사이즈를 변경할 수 있기 때문.

- 기본형인 변수는 단순히 그 안에 값을 넣고 사용할 수 있으며, 모두 사이즈가 명확하게 정해짐. 즉 크기를 동적으로 바꾸거나 할 수 없음.

- 예를 들어 Scanner를 사용해서 사용자 입력에 따라 변수의 값이 변하고, 생성되는 배열의 크기도 달라질 수 있음.

   => 이런 것을 동적메모리 할당이라고 함.

- 참조형을 사용하게 되면 동적으로 크기가 변해 유연성을 제공할 수 있음.

 

▶ 각각의 장점

- 기본형은 사용할 값을 직접 저장. 더 빠르고 메모리를 효율적으로 처리.

- 참조형은 메모리에 저장된 배열이나 객체의 참조를 저장. 따라서 참조형은 더 복잡한 데이터 구조를 만들고 관리할 수 있음.


package array;

public class Array1Ref2 {
    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++) {
            System.out.println("학생" + (i + 1) + " 점수 : " + students[i]);
        }
    }
}

[Array1Ref2]

 

▶ 리팩토링

- 기존의 코드 기능은 유지하면서 내부 구조를 개선하여 가독성을 높이고, 유지보수를 용이하게 하는 과정.

- 이는 중복을 제거하고, 복잡성을 줄이며, 이해하기 쉬운 코드로 만들기 위해 수행.

- 리팩토링은 버그를 줄이고, 프로그램의 성능을 향상시킬 수 있고, 코드의 설계를 개선하는 데에도 도움이 됨.

- 쉽게 말해, 작동하는 기능은 똑같은데, 코드를 개선하는 것.


package array;

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

        int[] students; // 배열 변수 선언
        students = new int[]{90, 80, 70, 60, 50};  // 배열 생성과 초기화

        // 변수 값 사용
        for(int i = 0; i < students.length; i++) {
            System.out.println("학생" + (i + 1) + " 점수 : " + students[i]);
        }
    }
}

[Array1Ref3]

 

▶ 리팩토링_초기화

- 배열은 { }을 사용해 생성과 동시에 편리하게 초기화하는 기능 제공.


package array;

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

        int[] students = {90, 80, 70, 60, 50};  // 배열 생성과 초기화

        // 변수 값 사용
        for(int i = 0; i < students.length; i++) {
            System.out.println("학생" + (i + 1) + " 점수 : " + students[i]);
        }
    }
}

[Array1Ref4]

 

- Array1Ref3보다 더 편하고, 간단하게 작성 가능. 한 줄에 작성한 것을 볼 수 있음.


package array;

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

        // 2X3 2차원 배열 생성
        int[][] arr = new int[2][3];    // 행2, 열3

        arr[0][0] = 1;  // 0행 0렬
        arr[0][1] = 2;  // 0행 1렬
        arr[0][2] = 3;  // 0행 2렬
        arr[1][0] = 4;  // 1행 0렬
        arr[1][1] = 5;  // 1행 1렬
        arr[1][2] = 6;  // 1행 2렬

        // 0행 출력
        System.out.print(arr[0][0] + " ");    // 0열 출력
        System.out.print(arr[0][1] + " ");    // 1열 출력
        System.out.print(arr[0][2] + " ");    // 2열 출력
        System.out.println();   // 한 행이 끝나면 라인 변경.

        // 1행 출력
        System.out.print(arr[1][0] + " ");    // 0열 출력
        System.out.print(arr[1][1] + " ");    // 1열 출력
        System.out.print(arr[1][2] + " ");    // 2열 출력
        System.out.println();   // 한 행이 끝나면 라인 변경
    }
}

[ArrayDi0]

 

▶ 2차원배열

 

- 2차원배열은 행과 열로 구성됨.

- int[][] arr = new int[2][3]처럼 선언하고 생성함.

- 행은 row(로우), 열은 column(칼럼)이라고 하며, 자주 사용하는 단어이니 기억해 두자.


package array;

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

        // 2X3 2차원 배열 생성
        int[][] arr = new int[2][3];    // 행2, 열3

        arr[0][0] = 1;  // 0행 0렬
        arr[0][1] = 2;  // 0행 1렬
        arr[0][2] = 3;  // 0행 2렬
        arr[1][0] = 4;  // 1행 0렬
        arr[1][1] = 5;  // 1행 1렬
        arr[1][2] = 6;  // 1행 2렬

        for(int row = 0; row < 2; row++) {
            System.out.print(arr[row][0] + " ");    // 0열 출력
            System.out.print(arr[row][1] + " ");    // 1열 출력
            System.out.print(arr[row][2] + " ");    // 2열 출력
            System.out.println();   // 한 행이 끝나면 라인 변경.

        }
    }
}

 

[ArrayDi1]

 

▶ 2차원배열_리팩토링01

 

- 행의 코드가 반복되니, 행의 코드 반복 부분을 for문 생성하여 출력.


package array;

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

        // 2 X 3 2차원 배열 생성
        int[][] arr = new int[2][3];    // 행2, 열3


        arr[0][0] = 1;  // 0행 0렬
        arr[0][1] = 2;  // 0행 1렬
        arr[0][2] = 3;  // 0행 2렬
        arr[1][0] = 4;  // 1행 0렬
        arr[1][1] = 5;  // 1행 1렬
        arr[1][2] = 6;  // 1행 2렬

        for(int row = 0; row < 2; row++) {
            for(int column = 0; column < 3; column++) {
                System.out.print(arr[row][column] + " ");
            }
            System.out.println();   // 한 행이 끝나면 라인 변경.

        }
    }
}

[ArrayDi2]

 

- 열의 부분도 반복되는 부분이 있으므로 for문을 하나 더 생성하여 출력. (이중for문)


package array;

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

        // 2X3 2차원 배열 생성하면서 초기화
        int[][] arr = new int[][]{
            {1,2,3},
            {4,5,6},
            {7,8,9}
        };    // 행2, 열3

        /*
        아래처럼 작성 할 수 있음
        int[][] arr = {
                {1,2,3},
                {4,5,6}
        };
        */


        for(int row = 0; row < arr.length; row++) {
            for(int column = 0; column < arr[row].length; column++) {
                System.out.print(arr[row][column] + " ");
            }
            System.out.println();   // 한 행이 끝나면 라인 변경.

        }
    }
}

[ArrayDi3]

 

▶ 2차원배열_리팩토링02

 

개선해야 할 부분

1. 초기화 : 기존 배열처럼 2차원 배열도 편리하게 초기화 가능.

2. for문에서 배열의 활용

 

- arr.length : 행의 길이

- arr[row].length : 열의 길이


package array;

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

        int[][] arr = new int[3][4];

        int i = 1;
        
        // 값을 넣음
        for(int row = 0; row < arr.length; row++) {
            for(int column = 0; column < arr[row].length; column++) {
                arr[row][column] = i++; // 후위증감 연산자
            }
        }
        
        // 값을 출력
        for(int row = 0; row < arr.length; row++) {
            for(int column = 0; column < arr[row].length; column++) {
                System.out.print(arr[row][column] + " ");
            }
            System.out.println();
        }
    }
}

[ArrayDi4]

 

- 이번에는 배열에 직접 값을 초기화하는 것이 아닌, 배열의 크기와 상관없이 배열에 순서대로 1씩 증가하는 값을 입력.

- 중첩된 for문 사용해서 값을 순서대로 입력하고, i++ 후위 증감 연산자 사용하여 값을 먼저 대입한 후 다음에 증가하도록 함.


package array;

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

        int[] numbers = {1, 2, 3, 4, 5};

        // 일반 for문
        for(int i = 0; i < numbers.length; i++) {
            int number = numbers[i];
            System.out.println(number);
        }

        System.out.println("-----------");

        // 향상된 for문, for-each문 -> 단축키 : iter
        for(int number : numbers) {
            System.out.println(number);
        }

        System.out.println("-----------");

        //for-each문을 사용할 수 없는 경우 증가하는 index 값 필요
        for(int i = 0; i < numbers.length; i++) {
            System.out.println("number" + i + "번의 결과는 : " + numbers[i]);
        }
    }
}

[EnhancedFor1]

 

▶ 향상된 for문

 

- 각각의 요소를 탐색한다는 의미로 for-each문이라고도 많이 부름.

- for (변수 : 배열 또는 컬렉션) { // 배열 또는 컬렉션이 요소를 순회하면서 수행할 작업 }

 

- 일반 for문은 배열에 있는 값을 순서대로 읽어서 number 변수에 넣고 출력.

- 배열은 처음부터 끝까지 순서대로 읽어서 사용하는 경우가 많음.

 

- 향상된 for문은 앞서 일반 for문과 동일하게 작동.

- 향상된 for문은 배열의 인덱스를 사용하지 않고, 종료 조건을 주지 않아도 됨. 단순히 해당 배열을 처음부터 끝까지 탐색.

- :의 오른쪽에는 탐색할 배열 선택하고, 왼쪽에는 반복할 때마다 찾은 값을 저장할 변수 선언.

 

▶ 향상된 for문 사용하지 못하는 경우

- 향상된 for문 사용하지 못하는 경우가 있음.

- 향상된 for문에는 증가하는 인덱스 값이 감추어져 있음.

  따라서 int i와 같은 증가하는 인덱스 값을 직접 사용해야 하는 경우 향상된 for문 사용할 수 없음.


1-1. 배열 예제

[ArrayEx1]

 

package array.ex;

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);
            System.out.println("점수 평균: " + average);
        }
    }

 

다음 문제를 배열을 사용해서 개선하자

 

- 실행결과 예시

     점수 총합 : 350

     점수 평균 : 70.0

package array.ex;

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

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

        int sum = 0;

        for(int i = 0; i < students.length; i++) {
            sum += students[i];
        }
        double avg = (double) sum / students.length;

        System.out.println("점수 총합 : " + sum);
        System.out.println("점수 평균 : " + avg);

    }
}

[ArrayEx2]

 

사용자에게 5개이 정수 입력받아 배열에 저장하고, 입력 순서대로 출력.

출력시 출력 포맷은 1, 2, 3, 4, 5와 같이 , 쉼표를 사용해서 구분하고, 마지막에는 쉼표를 넣지 않아야 함.

 

- 실행결과 예시

     5개의 정수를 입력하세요 : 

     1

     2

     3

     4

     5

     출력

     1, 2, 3, 4, 5

package array.ex;

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);

        int[] numbers = new int[5];

        System.out.println("5개의 정수를 입력하세요 : " );
        for(int i = 0; i < numbers.length; i++) {
            numbers[i] = scanner.nextInt();
        }

        System.out.println("출력");
        for(int i = 0; i < numbers.length; i++) {
            System.out.print(numbers[i]);
            if(i < numbers.length - 1) {    // numbers.length = 5
                System.out.print(", ");
            }
        }
    }
}

[ArrayEx3]

 

사용자에게 5개의 정수 입력받아서 배열에 저장하고, 입력받은 순서의 반대인 역순으로 출력.

출력시 출력 포맷은 5, 4, 3, 2, 1과 같이 , 쉼표를 사용해서 구분하고, 마지막에는 쉼표를 넣지 않아야 함.

 

- 실행결과 예시

     5개의 정수를 입력하세요 :

     1

     2

     3

     4

     5

     출력

     5, 4, 3, 2, 1

package array.ex;

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);

        int[] numbers = new int[5];

        System.out.println("5개의 정수를 입력하세요 : ");
        for(int i = 0; i < numbers.length; i++) {
            numbers[i] = scanner.nextInt();
        }

        System.out.println("입력한 정수를 역순으로 출력 : ");
        for(int i = 4; i >= 0; i--) {
            System.out.print(numbers[i]);
            if(i > 0) {
                System.out.print(", ");
            }
        }
    }
}

[ArrayEx4]

 

사용자에게 5개이 정수를 입력받아서 이들 정수의 합계와 평균을 계산하는 프로그램 작성

 

- 실행결과 예시

     5개의 정수를 입력하세요 : 

     1

     2

     3

     4

     5

     입력한 정수의 합계 : 15

     입력한 정수의 평균 : 3.0

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;

        System.out.println("5개의 정수를 입력하세요 : ");
        for(int i = 0; i < numbers.length; i++) {
            numbers[i] = scanner.nextInt();
            sum += numbers[i];
        }

        double avg = (double) sum / numbers.length;

        System.out.println("입력한 정수의 합계 : " + sum);
        System.out.println("입력한 정수의 평균 : " + avg);
    }
}

[ArrayEx5]

 

ArrayEx4에서 입력받을 숫자의 개수를 입력받도록 개선.

 

- 실행결과 예시1

     입력받을 숫자의 개수를 입력하세요 : 3

     3개의 정수를 입력하세요 : 

     1

     2

     3

     입력한 정수의 합계 : 6

     입력한 정수의 평균 : 2.0

 

- 실행결과 예시2

     입력받을 숫자이 개수를 입력하세요 : 5

     5개의 정수를 입력하세요 : 

     1

     2

     3

     4

     5

     입력한 정수의 합계 : 15

     입력한 정수의 평균 : 3.0

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 num = scanner.nextInt();
        int[] numbers = new int[num];
        int sum = 0;
        double avg;

        System.out.println(num + "개의 정수를 입력하세요 : ");
        for(int i = 0; i < num; i++) {
            numbers[i] = scanner.nextInt();
            sum += numbers[i];
        }

        avg = (double) sum / num;

        System.out.println("입력한 정수의 합계 : " + sum);
        System.out.println("입력한 정수의 평균 : " + avg);
    }
}

[ArrayEx6]

 

사용자로부터 n개의 정수를 입력받아 배열에 저장 후, 배열 내에서 가장 작은 수와 가장 큰 수를 찾아 출력하는 프로그램 작성.

 

- 실행결과 예시

     입력받을 숫자의 개수를 입력하세요 : 3

     3개의 정수를 입력하세요 : 

     1

     2

     3

     가장 작은 정수 : 1

     가장 큰 정수 : 5

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 numbers = scanner.nextInt();
        System.out.println(numbers + "개의 정수를 입력하세요 : ");
        int[] num = new int[numbers];

        int minNum, maxNum;

        for(int i = 0; i < numbers; i++) {
            num[i] = scanner.nextInt();
        }

        minNum = maxNum = num[0];
        for(int i = 0; i < numbers; i++) {
            if(num[i] < minNum) {
                minNum = num[i];
            }
            if(num[i] > maxNum) {
                maxNum = num[i];
            }
        }
        System.out.println("가장 작은 정수 : " + minNum);
        System.out.println("가장 큰 정수 : " + maxNum);
    }
}

[ArrayEx6]

 

minNum, maxNum의 변수를 배열의 0번째의 숫자와 같다하고 비교하기.

for문을 통해 배열을 돌면서 minNum(최소)보다 작으면 minNum은 num[i]이고,

maxNum(최대)보다 크면, maxNum은 num[i].


[ArrayEx7]

 

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

2차원 배열 사용하고, 실행 결과 예시 참고.

 

- 실행결과 예시

     1번 학생의 성적을 입력하세요 : 

     국어 점수 : 100

     영어 점수 : 80

     수학 점수 : 70

     2번 학생의 성적을 입력하세요 : 

     국어 점수 : 30

     영어 점수 : 40

     수학 점수 : 50

     ...

     1번 학생의 총점 : 250, 평균 : 83.3333333333

     2번 학생의 총점 : 120, 평균 : 40.0

     ...

package array.ex;

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);

        int[][] scores = new int[4][3];
        String[] subjects = {"국어", "영어", "수학"};

        for(int i = 0; i < 4; i++) {
            System.out.println((i+1) + "번 학생의 성적을 입력하세요 : ");
            for(int j = 0; j < 3; j++) {
                System.out.print(subjects[j] + " 점수 : ");
                scores[i][j] = scanner.nextInt();
            }
        }


        for(int i = 0; i < 4; i++) {
            int sum = 0;
            for(int j = 0; j < 3; j++) {
                sum += scores[i][j];
            }
            double avg = (double) sum / 3;

            System.out.println((i+1)+ "번 학생의 총점 : " + sum + ", 평균 : " + avg);
        }
    }
}

점수를 받는 2차원 배열 생성. (scores)4행 3열을 생성하는데 4행은 학생의 수, 3열은 과목의 수.

과목을 담는 1차원 배열 생성. (subjects)


[ArrayEx8]

 

ArrayEx7에서 학생수를 입력받도록 개선한 코드.

실행 결과 예시 참고.

 

- 실행결과 예시

     학생수를 입력하세요 : 3

     1번 학생의 성적을 입력하세요 : 

     국어 점수 : 10

     영어 점수 : 20

     수학 점수 : 30

     ...

     1번 학생의 총점 : 60, 평균 : 20.0

     ...

package array.ex;

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);

        System.out.print("학생 수를 입력하세요 : ");
        int studets = scanner.nextInt();

        int[][] scores = new int[studets][3];
        String[] subjects = {"국어", "영어", "수학"};

        for(int i = 0; i < studets; i++) {
            System.out.println((i+1) + "번 학생의 성적을 입력하세요 : ");
            for(int j = 0; j < subjects.length; j++) {
                System.out.print(subjects[j] + " 점수 : ");
                scores[i][j] = scanner.nextInt();
            }
        }

        for(int i = 0; i < studets; i++) {
            int total = 0;
            for(int j = 0; j < subjects.length; j++) {
                total += scores[i][j];
            }

            double avg = (double) total / subjects.length;

            System.out.println((i+1) + "번 학생의 총점 : " + total + ", 평균 : " + avg);
        }
    }
}

[ProductAdminEx]

 

자바를 이용하여 상품 관리 프로그램 생성. 이 프로그램은 다음의 기능이 필요

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

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

 

다음과 같이 동작해야 함.

   - 첫 화면에서 사용자에게 세 가지 선택을 제시. "1. 상품 등록", "2. 상품 목록", "3. 종료"

   - "1. 상품 등록"을 선택하면, 사용자로부터 상품 이름과 가격을 입력받아 배열에 저장.

   - "2. 상품 목록"을 선택하면, 배열에 저장된 모든 상품을 출력.

   - "3. 종료"를 선택하면 프로그램을 종료.

 

제약조건 : 상품은 최대 10개까지 등록 가능

 

다음은 사용해야 하는 변수 및 구조

   - Scanner scanner : 사용자 입력을 받기 위한 Scanner 객체

   - String[] productNames : 상품 이름을 저장할 String 배열

   - int[] productPrices : 상품 가격을 저장할 int 배열

   - int productCount : 현재 등록된 상품의 개수를 저장할 int 변수

 

--------------------------------------------------

○ 실행결과 예시 ○

 

1. 상품등록 | 2. 상품 목록 | 3. 종료

메뉴를 선택하세요 : 1

상품 이름을 입력하세요 : JAVA

상품 가격을 입력하세요 : 10000

1. 상품등록 | 2. 상품 목록 | 3. 종료

메뉴를 선택하세요 : 1

상품 이름을 입력하세요  SPRING

상품 가격을 입력하세요 : 20000

1. 상품등록 | 2. 상품 목록 | 3. 종료

메뉴를 선택하세요 : 2

JAVA : 10000

SPRING : 20000

1. 상품등록 | 2. 상품 목록 | 3. 종료

메뉴를 선택하세요 : 3

프로그램을 종료합니다.

 

--------------------------------------------------

 

○ 상품을 더 등록할 수 없는 경우 ○

 

1. 상품 등록 | 2. 상품 목록 | 3. 종료

메뉴를 선택하세요 : 1

더 이상 상품을 등록할 수 없습니다.

 

--------------------------------------------------

 

○ 등록된 상품이 없는 경우 ○

 

1. 상품 등록 | 2. 상품 목록 | 3. 종료

메뉴를 선택하세요 : 2

등록된 상품이 없습니다.

 

--------------------------------------------------

 

○ 없는 메뉴 클릭 시 ○

 

1. 상품 등록 | 2. 상품 목록 | 3. 종료

메뉴를 선택하세요 : 4

잘못된 메뉴를 선택했습니다.

package array.ex;

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);

        int maxProduct = 10;
        String[] productNames = new String[maxProduct];
        int[] productPrices = new int[maxProduct];
        int productCount = 0;


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

            scanner.nextLine();

            if(menu == 1) {
                if(productCount >= maxProduct) {
                    System.out.println("더 이상 상품을 등록할 수 없습니다.");
                    continue;
                }
                System.out.print("상품 이름을 입력하세요 : ");
                productNames[productCount] = scanner.nextLine();

                System.out.print("상품 가격을 입력하세요 : ");
                productPrices[productCount] = scanner.nextInt();

                productCount++;
            } else if (menu == 2) {
                if(productCount == 0) {
                    System.out.println("등록된 상품이 없습니다.");
                    continue;
                }
                for(int i = 0; i < productCount; i++) {
                    System.out.println(productNames[i] + " : " + productPrices[i] + "원");
                }
            } else if(menu == 3) {
                System.out.println("프로그램을 종료합니다");
                break;
            } else {
                System.out.println("잘못된 메뉴를 선택했습니다.");
            }
        }

    }
}

 

maxProducts는 상품의 최대 개수로 10개로 지정.상품명을 담을 배열과 상품가격을 담을 배열 생성.

등록된 상품의 개수는 처음에 0으로 초기화.

 

while(true) 입력하여 break 만나기 전 까지 게속 실행할 수 있게 함.

menu를 몇 번 선택하는지에 따라 프로그램이 다르게 실행되어야 하므로 if문 입력.

 

menu == 1일 때 등록된 상품의 개수와 상품의 최대 개수가 같거나 넘으면 더 이상 상품을 등록할 수 없다고 출력.

사용자에게 입력을 받은 후 productCount++하여 상품의 개수를 1개씩 증가.

'Studying > JAVA' 카테고리의 다른 글

[JAVA]_Class and Data (클래스와 데이터)  (2) 2024.12.23
[JAVA]_Method(메서드)  (2) 2024.12.14
[JAVA]_Scanner(스캐너)  (1) 2024.12.05
[JAVA]_Casting(형변환)  (0) 2024.12.03
[JAVA]_Scope(스코프)  (0) 2024.12.03