메모장

배열 본문

JAVA/개념정리

배열

Itchild 2024. 4. 6. 14:14
728x90
반응형

배열

: 서로 관련된 데이터들을 한 공간에 저장하고 싶을때 활용

 

배열 3요소

1) 반드시 서로 관련되어 있어야 한다! ( 서로 관련된 데이터 )

ex)신발과 옷을 한곳에 저장 안하는 것과 같은것

2) 데이터들의 자료형이 일치

ex)내 옷이랑 내 신발이랑 같이 넣고 내 동생 옷이랑 내 동생 신발도 같은 곳에 보관 ? x

3) 데이터들의 개수를 알고 있어야 한다 (공간의 크기를 알아야한다)

 


코드로 정리해보자 ..!

 


// 배열 []

 

int stu1 = 20;

int stu2 = 50;

int stu3 = 70;

//1. 서로 관련되어 있고 2. 타입도 같고 3. 개수도 안다. <- 배열의 3요소 충족하는지 확인하기

// 배열을 사용할수 있는 상황 이구나!

int[] stu = new int[3];

// new 연산 : 메모리에 공간을 생성해줘 ! 라는 부탁을 할때 쓴다.

 

// [ 인덱스 ]

// [ index] => 목차랑 똑같은 말 , 책에서 같은 주제 끼리 모아놓는 목차 !

// ★ 0부터 시작한다 ★

stu[0] = 20;

stu[1] = 50;

stu[2] = 75;

 

 

for (int i = 0; i < 3; i++) {

System.out.println("학생 " + i + "의 점수는 " + stu[i] + "점 입니다.");

}

 
사진 삭제

콘솔창에 에러가 발생했다..! 나는 잘 모르니 얼른 구글 검색 !

자바는 배열의 작성 및 조작을 데이터 구조로 지원한다.

배열의 크기를 n이라고 했을 때 배열의 인덱스는 1부터 n까지가 아닌 0부터 n-1까지 이다.

프로그래밍 중 ArrayIndexOutOfBoundsException이 가장 많이 발생하는 이유중 하나이다.

자바는 인덱스가 배열의 크기보다 크거나 음수 인덱스에 대한 요청이 있으면 자바는 위의 예외를 발생시킨다.

또한 이 예외는 자바 컴파일러는 검사하지않고 항상 런타임(실행도중)에 예외를 발생시킵니다.


최대값 찾기 알고리즘에 대해서도 알아보자 !

 

// [최대값 찾기 알고리즘]

 

현재 최대값을 [0]에 존재한다 가정하고 다음 자리의 숫자와 차례대로 비교하여

제일 큰 수 , 최대값을 찾는다.

 

int max = stu[0]; // 현재 최대값이 [0]에 존재하는 값이다!

int maxIndex = 0; // 최대값이 저장된 index를 기억할 변수

// 최대값이 바뀔때만 바뀌면된다.

 

// [1]부터 차례대로 '현재 최대값'과 비교

for (int i = 1; i < stu.length; i++) {

if(max<stu[i]) { // 최대값이 현재 비교값보다 작다면,

// 변화발생

max = stu[i];

maxIndex = i;

}

}


문제 예시


[ 2 3 4 1 ]

 

현재 최대값이 [0]에 존재하는 값이다!

현재 최대값 : 2

 

[1]부터 차례대로 '현재 최대값'과 비교

2 > 3 ? 아니라면 현재 최대값을 바꿈

현재 최대값 : 3

3 > 4 ?

현재 최대값 : 4

4 > 1 ? 맞다면 변화없음

현재 최대값 : 4

 

결론 도출 완료


 

문제) 학생 6명

29 99 30 22 87 57

 

1. 평균점수

2. 평균을 넘긴 학생수

3. 6등의 번호

4. 짝수번째 학생들의 총점

5. 평균을 못넘긴 학생들의 번호

 

int[] stu = new int[6];

 

stu[0] = 29;

stu[1] = 99;

stu[2] = 30;

stu[3] = 22;

stu[4] = 87;

stu[5] = 57;

 

코드로 작성해보자 ..!

// 출력

System.out.println("===== 학생 명단 =====");

for (int i = 0; i < stu.length; i++) {

System.out.println("학생" + (i + 1) + "번은" + stu[i] + "점 입니다.");

}

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

 

// 평균점수

int sum = 0; // 총점을 저장할 변수

 

for (int i = 0; i < stu.length; i++) {

sum += stu[i]; // 총점을 차곡차곡 쌓는다. (복합연산자로)

}

 

double avg = sum * 1.0 / stu.length;

System.out.println("총점은 " + sum + "점 입니다.");

System.out.println("평균점수는 " + avg + "점 입니다.");

 

// 평균을 넘긴 학생수

int count = 0; //평균을 넘긴 학생 수

for (int i = 0; i < stu.length; i++) {

if (stu[i] > avg) {

// if(내가 보고있는 학생이 평균을 넘겼니?)

count++;

}

}

System.out.println("평균을 넘긴 학생 수는 " + count + "명 입니다.");

 

// 6등의 번호

// ----->> [최대값찾기 알고리즘] 을 활용

int min = stu[0];

int minIndex = 0;

 

for (int i = 0; i < stu.length; i++) {

if (min > stu[i]) {

min = stu[i];

minIndex = i;

}

}

 

System.out.println("6등은 학생" + (minIndex + 1) + "번이고 " + "점수는 " + min + "점 입니다.");

// 짝수번째 학생들의 총점

int total = 0;

for (int i = 0; i < stu.length; i++) {

if ((i + 1) % 2 == 0) {

total += stu[i]; // 짝수번째 학생들의 점수를 total에 차곡차곡

}

 

System.out.println("짝수번째 학생들의 총점은 " + total + "점 입니다.");

 

// 평균을 못넘긴 학생들의 번호 --->> 변수 xx

// : 저장공간을 예상하는 방법

// : 나중에 배열을 생성

int result = 0;

 

System.out.print("평균을 못넘긴 학생들의 번호는 ");

for (int i = 0; i < stu.length; i++) {

if (stu[i] < avg) {

result = (i + 1);

System.out.print(result + "번 ");

}

}

 

System.out.println(" 입니다.");

}

 

숫자를 랜덤으로 돌릴때 랜덤으로 정수 받는법 !

// 랜덤으로 정수를 생성해보자

Random rand = new Random(); // 랜덤할 수 있는 기계를 미리 만들어놔야한다.

 

for (int i = 0; i < stu.length; i++) {

// stu[i] = 랜덤수;

stu[i] = rand.nextInt(101); // 0~100 까지

System.out.println(stu[i] + " ");

}

System.out.println();

>> 위에서 배열을 하나하나 지정 했었던 이 부분 ! 을 랜덤 형식으로 바꿔본다.

int[] stu = new int[6];

 

stu[0] = 29;

stu[1] = 99;

stu[2] = 30;

stu[3] = 22;

stu[4] = 87;

stu[5] = 57;


< 랜덤으로 바꿨을 시 >

int[] stu = new int[6];

for (int i = 0; i < stu.length; i++) {

// stu[i] = 랜덤수;

stu[i] = rand.nextInt(101); // 0~100 까지

System.out.println(stu[i] + " ");

}

System.out.println();


Scanner sc=new Scanner(System.in);

---> 사용자에게 입력을 받을 수 있다.

사용자에게 값을 입력 받고 실행해주기

 

<자판기를 예시로 들어보자 >

// 자판기

String[] mName=new String[3];

mName[0]="아메리카노";

mName[1]="카푸치노";

mName[2]="아이스티";

 

int[] mPrice=new int[3];

mPrice[0]=2500;

mPrice[1]=4500;

mPrice[2]=3000;

 

int[] mCnt=new int[3];

mCnt[0]=100;

mCnt[1]=10;

mCnt[2]=2;

 

Scanner sc=new Scanner(System.in);

 

 

while(true) {

 

System.out.println("=== 메뉴판 ===");

for(String v:mName) {

System.out.println(v);

}

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

 

// 사용자의 편의성을 고려하여 코딩한다! ★

System.out.print("먹고싶은메뉴를 입력하세요) ");

int uNum=sc.nextInt(); // 아메리카노

int uCnt=10; // 몇개 구매할지

 

if(uCnt>mCnt[uNum-1]) {

System.out.println("재고가 부족합니다!");

break;

}

 

System.out.println(mName[uNum-1]+"메뉴를 ");

System.out.println(uCnt+"개 구매했습니다.");

System.out.println("총 금액: "+uCnt*mPrice[uNum-1]);

mCnt[uNum-1]-=uCnt;

 

 

}

 

728x90
반응형

'JAVA > 개념정리' 카테고리의 다른 글

Scanner  (0) 2024.04.06
반복문 (for문)  (0) 2024.04.06
반복문 (while문)  (0) 2024.04.06
함수 (메서드)  (0) 2024.04.06
변수 , 연산자  (0) 2024.04.06