본문 바로가기

항해 99/Java

Java 기초 5 - 배열

배열

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

 

  • 학생을 추가할 때마다 변수를 선언하는 부분과 점수 출력 부분의 코드를 추가해야 함. 학생 수가 증가함에 따라 코딩 양이 비례해서 증가하는 문제 발생
  • 비슷한 변수를 반복해서 선언하는 문제가 발생한다
  • 점수 출력 부분의 변수 이름을 바꿀 수 없기 때문에 반복문 적용도 불가능

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

 

 

배열의 선언과 생성

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

 

 

 

1.배열 변수 선언

  1. int[ ] students; // 배열 변수 선언

  • 배열을 사용하려면 int[ ] students; 와 같이 배열 변수를 선언해야 한다.
  • 일반적인 변수와 차이점은 int[ ] 처럼 타입 다음에 대괄호( [ ] )가 들어감.
  • 배열 변수를 선언한다고해서 아직 사용할 수 있는 배열이 만들어진 것은 아님.
    • int a에는 정수를, double b에는 실수를 담을 수 있다.
    • int[ ] students와 같은 배열 변수에는 배열을 담을 수 있다. (배열 변수에는 10, 20 같은 값이 아니라 배열이라는 것을 담을 수 있다)

2. 배열 생성

 2. students = new int[5]; // 배열 생성

  • 배열을 사용하려면 배열을 생성해야 한다.
  • new int[ 5 ]라고 입력하면 그림과 같이 총 5개의 int형 변수가 만들어진다.
  • new는 새로 생성한다는 뜻이고, int[5]는 int형 변수 5개라는 뜻이다. 따라서 int형 변수 5개를 다룰 수 있는 배열을 새로 만든다는 뜻이다.

배열과 초기화

  • new int[ 5 ] 라고 하면 총 5개의 int형 변수가 만들어진다. 자바는 배열을 생성할 때 그 내부값을 자동으로 초기화한다.
  • 숫자는 0, boolean은 false, String은 null로 초기화 한다.

3. 배열 참조값 보관

  • new int[ 5 ]로 배열을 생성하면 배열의 크기만큼 메모리를 확보한다.
    • int형을 5개 사용하면 4byte * 5 → 20byte를 확보한다
  • 배열을 생성하고 나면 자바는 메모리 어딘가에 있는 배열에 접근할  수 있는 참조값(주소)(x001)을 반환
    • x001은 예시 참조값
  • 앞서 선언한 배열 변수인 int[ ] students에 생성된 배열의 참조값(x001)을 보관한다.
  • int[ ] students 변수는 new int[ 5 ]로 생성한 배열의 참조값을 가지고 있음
    • 참조값을 통해 메모리에 있는 실제 배열에 접근하고 사용할 수 있다.
    • 배열을 생성하는 new int[ 5 ] 자체에는 아무런 이름이 없음, int형 변수를 5개 연속으로 만드는 것으로 생성한 배열에 접근하는 방법이 필요함. 따라서 배열 생성 시 반환되는 참조값을 어딘가에 보관해야 함. int[ ] students 변수에 참조값을 보관하고 이 변수를 통해 배열에 접근할 수 있음.

배열 사용

인덱스

배열은 변수와 사용법이 비슷한데, [ ] 사이에 숫자 번호를 넣어줘야 한다는 차이점이 있음, 배열의 위치를 나타내는 숫자를 인덱스(index)라 한다.

 

배열은 0부터 시작한다.

new int[ 5 ]와 같이 요소 5개를 가지는 int형 배열을 생성하면 인덱스는 0, 1, 2, 3, 4가 존재한다. 인덱스는 0부터 시작하기 때문에 사용 가능한 인덱스의 범위는 0 ~ (n - 1)이 된다.

  • 사용 가능한 배열의 인덱스 범위를 넘어가면 오류가 발생한다.

배열에 값 대입

배열에 값을 대입하거나 사용하는 것은 일반적인 변수와 사용법은 같다. 추가로 [ ]를 통해 인덱스만 넣어주면 된다.

students[1] = 80; // 1. 배열에 값 대입
x001[1] = 80; // 2. 변수에 있는 참조값을 통해 실제 배열에 접근, 인덱스를 사용해서 해당 위치의 요소에 접근, 값 대입

 

배열 값 읽기

배열을 사용하면 참조값을 통해서 실제 배열에 접근하고 인덱스를 통해서 원하는 요소를 찾는다.

//1. 변수 값 읽기
System.out.pritnln("학생 1 점수: " + students[0]);
//2. 변수에 있는 참조값을 통해 실제 배열에 접근, 인덱스를 사용해서 해당 위치의 요소에 접근
System.out.pritnln("학생 1 점수: " + x001[0]);
//3. 배열의 값을 읽어옴
System.out.pritnln("학생 1 점수: " + 90);

 

기본형 vs 참조형

자바의 변수 데이터 타입은 크게 보면 기본형과 참조형으로 분류 가능.

사용하는 값을 직접 넣을 수 있는 기본형, 배열 변수와 같이 메모리의 참조값을 넣을 수 있는 참조형으로 분류

  • 기본형(Primitive Type):  int , long , double , boolean 처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입을 기본형(Primitive Type)이라 한다.
  • 참조형(Reference Type): int[ ] students 와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형(Reference Type)이라 한다. 객체나 클래스를 담을 수 있는 변수들도 모두 참조형이다.

참고

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

  • 기본형은 선언과 동시에 크기가 정해진다(크기를 동적으로 바꿀 수 없음). 배열 같은 참조형은 크기를 동적으로 할당할 수 있음(동적 메모리 할당). 참조형을 사용 시 동적으로 크기가 변해서 유연성을 제공할 수 있다.
  • 기본형은 사용할 값을 직접 저장함, 참조형은 메모리에 저장된 배열이나 객체의 참조를 저장한다. 참조형은 더 복잡한 데이터 구조를 만들고 관리할 수 있다. 기본형은 더 빠르고 메모리를 효율적으로 처리함.

 

배열 리펙토링

배열 리펙토링 - 변수 값 사용

리펙토링(Refactoring)은 기존의 코드 기능은 유지하면서 내부 구조를 개선하여 가독성을 높이고, 유지보수를 용이하게 하는 과정을 뜻한다. 이는 중복을 제거하고, 복잡성을 줄이며, 이해하기 쉬운 코드로 만들기 위해 수행된다. 리펙토링은 버그를 줄이고, 프로그램의 성능을 향상시킬 수도 있으며, 코드의 설계를 개선하는 데에도 도움이 된다. 쉽게 이야기해서 작동하는 기능은 똑같은데, 코드를 개선하는 것을 리펙토링이라 한다.

 

Array1Ref2

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]);
        }
    }
}
  • 반복문 사용으로 배열을 통해 값을 사용하는 부분을 효과적으로 변경
  • 배열의 인덱스는 0부터 시작함, 반복문 초기값을 i=0으로 사용.
  • students.length
    • 배열의 길이를 제공하는 특별한 기능
    • 이 값은 조회만 가능하며 대입은 할 수 없음
  • for문 조건이 i < students.length 이므로 i는 0~4까지만 반복함.

 

배열 리펙토링 - 변수 값 사용, 간단한 배열 생성

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

package array;

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

 

배열의 편리한 초기화

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

// 오류
int[] students;
students = {90, 80, 70, 60, 50};
  • 이 경우 배열 변수의 선언을 한 줄에 함께 사용할 때만 가능하다.

 

2차원 배열

2차원 배열은 int [ ] [ ] arr = new int[2][3]와 같이 선언하고 생성한다. 그리고 arr[1][2]와 같이 사용하는데, 먼저 행 번호를 찾고, 그 다음에 열 번호를 찾으면 된다.

  • 행은 영어로 row, 열은 영어로 column이라고 한다.

2차원 배열 사용법은 [ ] 가 하나 추가되는 것을 제외하고는 1차원 배열과 같다.

 

2차원 배열의 데이터 : arr[row][column]

 

ArrayDi0

package array;

public class ArrayDi0 {
    public static void main(String[] args) {
        // 2 x 3 2차원 배열
        int[][] arr = new int[2][3]; // row 2 column 3

        arr[0][0] = 1; // row 0 col 0
        arr[0][1] = 2; // row 0 col 1
        arr[0][2] = 3; // row 0 col 2
        arr[1][0] = 4; // row 1 col 0
        arr[1][1] = 5; // row 1 col 1
        arr[1][2] = 6; // row 1 col 2

        // row 0 출력
        System.out.print(arr[0][0] + " "); // col 0
        System.out.print(arr[0][1] + " "); // col 1
        System.out.print(arr[0][2] + " "); // col 2
        System.out.println();

        // row 1 출력
        System.out.print(arr[1][0] + " "); // col 0
        System.out.print(arr[1][1] + " "); // col 1
        System.out.print(arr[1][2] + " "); // col 2
        System.out.println();
    }
}
  • 2차원 배열을 만들고 배열에 값을 1부터 6까지 순서대로 직접 입력한 것
  • 0행의 1, 2, 3열 출력, 1행의 1, 2, 3 열 출력

 

2차원 배열 - 리펙토링

구조 개선 - 행 출력 반복

구조 변경

ArrayDi1

package array;

public class ArrayDi1 {
    public static void main(String[] args) {
        // 2 x 3 2차원 배열
        int[][] arr = new int[2][3]; // row 2 column 3

        arr[0][0] = 1; // row 0 col 0
        arr[0][1] = 2; // row 0 col 1
        arr[0][2] = 3; // row 0 col 2
        arr[1][0] = 4; // row 1 col 0
        arr[1][1] = 5; // row 1 col 1
        arr[1][2] = 6; // row 1 col 2

        for (int row = 0; row < 2; row++) {
            System.out.print(arr[row][0] + " "); // col 0
            System.out.print(arr[row][1] + " "); // col 1
            System.out.print(arr[row][2] + " "); // col 2
            System.out.println();
        }
    }
}
  • for문을 통해 row를 반복해서 접근한다. 각 row 안에서 column이 3개 이므로 for문 한 번 도는 동안 column은 3번 출력된다.

 

구조 개선 - 열 출력 반복

ArrayDi2

package array;

public class ArrayDi2 {
    public static void main(String[] args) {
        // 2 x 3 2차원 배열
        int[][] arr = new int[2][3]; // row 2 column 3

        arr[0][0] = 1; // row 0 col 0
        arr[0][1] = 2; // row 0 col 1
        arr[0][2] = 3; // row 0 col 2
        arr[1][0] = 4; // row 1 col 0
        arr[1][1] = 5; // row 1 col 1
        arr[1][2] = 6; // row 1 col 2

        // row, column 반복문으로 출력
        for (int row = 0; row < 2; row++) {
            for (int col = 0; col < 3; col++) {
                System.out.print(arr[row][col] + " ");
            }
            System.out.println();
        }
    }
}
  • 중첩 반복문을 사용해 첫 번째 for문은 row를 탐색하고, 내부의 두 번째 for문은 column을 탐색한다.

 

2차원 배열 - 리펙토링2

구조개선 - 초기화, 배열의 길이

ArrayDi3

package array;

public class ArrayDi3 {
    public static void main(String[] args) {
        // 2 x 3 2차원 배열 생성 및 초기화
        int[][] arr = {
            {1, 2, 3},
            {4, 5, 6}
        }; // row 2 column 3

        // row, column 반복문으로 출력
        for (int row = 0; row < arr.length; row++) {
            for (int col = 0; col < arr[row].length; col++) {
                System.out.print(arr[row][col] + " ");
            }
            System.out.println();
        }
    }
}

 

배열의 길이

for문에서 2차원 배열의 길이를 활용

  • arr.length : row(행)의 길이를 뜻함, row = 2
  • arr[row].length : column(열)의 길이를 뜻함, column = 3

구조개선 - 값 입력

ArrayDi4

package array;

public class ArrayDi4 {
    public static void main(String[] args) {
        // 2 x 3 2차원 배열 생성 및 초기화
        int[][] arr = new int[2][3];

        // 값 입력
        int i = 1;
        for (int row = 0; row < arr.length; row++) {
            for (int col = 0; col < arr[row].length; col++) {
                arr[row][col] = i++;
            }
        }

        // row, column 반복문으로 출력
        for (int row = 0; row < arr.length; row++) {
            for (int col = 0; col < arr[row].length; col++) {
                System.out.print(arr[row][col] + " ");
            }
            System.out.println();
        }
    }
}
  • 중첩 반복문을 활용해서 1 씩 증가되는 값을 2차원 배열에 대입할 수 있음

 

향상된 for문

향상된 for문(Enhanced For Loop) : 각각의 요소를 탐색한다는 의미로 for-each문이라고 많이 부른다.

향상된 for문은 배열을 사용할 때 기존 for문보다 더 편리하게 사용할 수 있다.

 

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

        // for-each
        for (int number : numbers) {
            System.out.println(number);
        }
    }
}

 

일반 for문

  • 배열의 값을 순서대로 읽어서 number 변수에 넣고, 출력한다.
  • 배열의 값을 읽기 위해서는 int i와 같은 인덱스를 탐색할 수 있는 변수를 선언하고 배열의 끝 조건을 지정해야 하고, 배열의 값을 하나 읽을 때마다 인덱스를 1씩 증가해야 한다.

향상된 for문

  • 향상된 for문은 배열의 인덱스를 사용하지 않고, 종료 조건을 주지 않아도 된다(해당 배열을 처음부터 끝까지 탐색한다).
  • : 의 오른쪽에 numbers와 같이 탐색할 배열을 선택하고, : 의 왼쪽에 int number와 같이 반복할 때마다 찾은 값을 저장할 변수를 선언한다.
    • 배열의 값을 하나씩 꺼내 왼쪽의 number에 담고 for문을 수행함, numbers 배열의 끝에 도달해서 더 값이 없으면 for문이 종료된다.
  • 향상된 for문은 배열의 인덱스를 사용하지 않고도 배열의 요소를 순회할 수 있기 때문에 코드가 간결하고 가독성이 좋다.

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

  • int i와 같은 증가하는 인덱스 값을 직접 사용해야 하는 경우에는 향상된 for문을 사용할 수 없다.
// for-each 사용할 수 없는 경우
for (int i = 0; i < numbers.length; i++) {
    System.out.println("number" + i + "번의 결과는:" + numbers[i]);
}

 

 

 

문제

1. 배열을 사용하도록 변경

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

 

위 코드를 배열로 변경

package array.ex;

public class ArrayEx1Ref {
    public static void main(String[] args) {
        int[] students = {90, 80, 70, 60, 50};
        int total = 0;

        for (int num : students) {
            total += num;
        }
        double average = (double) total / students.length;

        System.out.println("점수 총합: " + total);
        System.out.println("점수 평균: " + average);
    }
}

 

 

2. 배열의 입력과 출력

사용자에게 정수 5개를 입력받아 배열에 저장하고, 입력 순서대로 출력 (출력 포멧은 ,(쉼표)를 사용해서 구분하고 마지막에는 넣지 않는다).

package array.ex;

import java.util.Scanner;

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

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

 

 

3. 배열의 역순 출력

사용자에게 5개의 정수를 입력받아서 배열에 저장하고, 입력받은 순서의 반대인 역순으로 출력, 출력 포멧은 ,(쉼표)를 사용해서 구분하고 마지막에는 넣지 않는다.

package array.ex;

import java.util.Scanner;

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

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

 

 

4. 합계와 평균

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

package array.ex;

import java.util.Scanner;

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

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

        // 출력
        int sum = 0;
        for (int number : numbers) {
            sum += number;
        }
        System.out.println("입력한 정수의 합계: " + sum);
        double average = (double) sum / numbers.length;
        System.out.println("입력한 정수의 평균: " + average);
    }
}

 

 

5. 합계와 평균 2

이전 문제에서 입력받을 숫자의 개수를 입력하도록 개선

package array.ex;

import java.util.Scanner;

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

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

        System.out.println("입력한 정수의 합계: " + sum);
        double average = (double) sum / numbers.length;
        System.out.println("입력한 정수의 평균: " + average);
    }
}

 

 

6. 가장 작은 수, 큰 수 찾기

사용자로부터 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 num = scanner.nextInt();
        int[] numbers = new int[num];

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

        int max = 0, min = numbers[0];
        for (int number : numbers) {
            if (max < number) {
                max = number;
            }
            if (min > number) {
                min = number;
            }
        }
        System.out.println("가장 작은 정수: " + min);
        System.out.println("가장 큰 정수: " + max);
    }
}

 

 

7. 2차원 배열 1

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

package array.ex;

import java.util.Scanner;

public class ArrayEx7 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[][] students = new int[4][3];
        String[] subjects = {"국어", "영어", "수학"};
        int[] sum = new int[4];
        double[] average = new double[4];

        for (int i = 0; i < students.length; i++) {
            System.out.println((1+i)+ "번 학생의 성적을 입력하세요: ");
            for (int j = 0; j < students[i].length; j++) {
                System.out.print(subjects[j] + " 점수: ");
                students[i][j] = scanner.nextInt();
                sum[i] += students[i][j];
            } average[i] = (double) sum[i] / students[i].length;
        }
		
        // 기존 설계 출력
        for (int i = 0; i < students.length; i++) {
            System.out.println((i+1)+"번 학생의 총점: "+sum[i]+", 평균: "+average[i]);
        }

        // 변수를 for문 안에서만 생성하고 사용
        for(int i = 0; i < students.length; i++) {
            int total = 0;
            for (int j = 0; j < students[i].length; j++) {
                total += students[i][j];
            }
            double aver = (double) total / students[i].length;
            System.out.println((i+1)+"번 학생의 총점: "+total+", 평균: "+aver);
        }


    }
}

 

 

8. 2차원 배열 2

이전 문제에서 학생수를 입력받도록 개선

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 student = scanner.nextInt();
        int[][] scores = new int[student][3];
        String[] subjects = {"국어", "영어", "수학"};
        //int[] sum = new int[student];
        //double[] average = new double[student];

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

//        for (int i = 0; i < students.length; i++) {
//            System.out.println((i+1)+"번 학생의 총점: "+sum[i]+", 평균: "+average[i]);
//        }

        // 변수를 for문 안에서만 생성하고 사용
        for(int i = 0; i < scores.length; i++) {
            int total = 0;
            for (int j = 0; j < scores[i].length; j++) {
                total += scores[i][j];
            }
            double aver = (double) total / scores[i].length;
            System.out.println((i+1)+"번 학생의 총점: "+total+", 평균: "+aver);
        }


    }
}

 

 

9. 상품 관리 프로그램 만들기

자바를 이용하여 상품 관리 프로그램을 제작

프로그램의 기능

  • 상품 등록: 상품 이름과 가격을 입력받아 저장
  • 상품 목록: 지금까지 등록한 모든 상품의 목록을 출력

프로그램 동작

  • 첫 화면에서 사용자에게 세 가지 선택을 제시: 1. 상품 등록, 2. 상품목록, 3.종료
  • 1. 상품 등록 선택 시, 사용자로부터 상품 이름과 가격을 입력받아 배열에 저장
  • 2. 상품 목록을 선택 시, 배열에 저장된 모든 상품을 출력한다.
  • 3. 종료를 선택하면 프로그램을 종료한다.

제약 조건

상품은 최대 10개까지 등록할 수 있다.

 

사용해야 하는 변수 및 구조

  • Scanner scanner : 사용자 입력 받기
  • String[ ] productNames : 상품 이름을 저장
  • int[ ] productPrices : 상품 가격을 저장
  • int productCount : 현재 등록된 상품의 개수를 저장
package array.ex;

import java.util.Scanner;

public class ArrayEx9 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // input
        String[] productNames = new String[10]; // 상품 이름 저장
        int[] productPrices = new int[10]; // 상품 가격 저장
        int productCount = 0; // 상품 등록 수 저장

        // 프로그램
        while (true) {
            System.out.println("1. 상품 등록 | 2. 상품 목록 | 3. 종료" );
            System.out.print("메뉴를 선택하세요:");
            int select = scanner.nextInt(); // 메뉴 선택
            scanner.nextLine(); // \n 처리

            if (select == 1) { // 1번 메뉴 선택
                if (productCount == 10) { // 상품 10개 이상 등록 시 처리
                    System.out.println("더 이상 상품을 등록할 수 없습니다.");
                    continue;
                }
                System.out.print("상품 이름을 입력하세요:"); // 상품 이름 등록
                productNames[productCount] = scanner.nextLine();
                System.out.print("상품 가격을 입력하세요:"); // 상품 가격 등록
                productPrices[productCount] = scanner.nextInt();
                scanner.nextLine();
                productCount++; // 상품 등록 건수 카운트
            } else if (select == 2) { // 2번 메뉴 선택
                if (productCount == 0) { // 등록 상품 0개일 때 처리
                    System.out.println("등록된 상품이 없습니다.");
                    continue;
                }
                for (int i = 0; i < productCount; i++) { // 등록된 상품 이름 및 가격 출력
                    System.out.println(productNames[i] + ": " + productPrices[i] + "원");
                }
            } else if (select == 3) { // 프로그램 종료
                System.out.println("프로그램을 종료합니다.");
                break;
            } else { // 잘못된 값 입력 시 처리
                System.out.println("잘못된 메뉴를 선택했습니다.");
            }
        }
    }
}

'항해 99 > Java' 카테고리의 다른 글

Java 기초 7 - 클래스, 기본형과 참조형  (1) 2024.01.25
Java 기초 6 - 메서드  (1) 2024.01.23
Java 기초 4 - 훈련  (1) 2024.01.22
Java 문법 기초 테스트-3  (1) 2024.01.22
Java 문법 기초 테스트-2  (0) 2024.01.20