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 |