| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- MVC
- after-throwing
- 서비스레이어
- application.properties
- 비즈니스레이어
- 어노테이션
- @
- .xml
- PointCut
- @ResponseBody
- springjdbc
- 바인딩변수
- frontController
- jointpoint
- @Valid
- 생성자주입
- 의존주입
- @RequestMapping
- @RequestParam
- Model
- 유효성검사
- spring
- SpringBoot
- gradle
- c:if
- springmvc
- AOP
- produces
- Java
- 스프링
- Today
- Total
메모장
배열 본문
배열
: 서로 관련된 데이터들을 한 공간에 저장하고 싶을때 활용
배열 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;
}
'JAVA > 개념정리' 카테고리의 다른 글
| Scanner (0) | 2024.04.06 |
|---|---|
| 반복문 (for문) (0) | 2024.04.06 |
| 반복문 (while문) (0) | 2024.04.06 |
| 함수 (메서드) (0) | 2024.04.06 |
| 변수 , 연산자 (0) | 2024.04.06 |