학생 다섯 명의 성적을 저장한다면
int s1, s2, s3, s4, s5;
만약 전교색 (10000명)의 성적을 저장해야 한다면 변수를 10000개 선언할 것인가? 관리하기도 어렵다.
0. 배열을 사용하는 이유
같은 종류의 데이터(자료형)를 저장하기 위한 자료구조
배열을 객체로 취급
배열을 선언할 때 배열의 크기를 명시하지 않음
[ ] 는 앞에 오나 뒤에 오나 상관이 없음
어떤 형으로 사용할 것인가를 정하고 배열변수를 정해줌
1. 1차원 배열의 선언
배열 : 자료형이 동일한 여러개의 값을 연이어 저장할 수 있도록 하는 기억 공간의 집합체 (모임)
원소 : 배열에 저장된 각각의 값
인덱스 : 배열의 원소에 접근하기 위한 첨지
a[0], a[1] ...
(자바에서의 인덱스는 0부터 시작)
2. JAVA 메모리 구조
3. 배열의 생성
레퍼런스 변수란? (주소값을 가지고 있는 변수)
기본 데이터를 값으로 가지는 것이 아니고
메모리상이 다른 객체나 배열을 가리키고 있는 변수
int a = 10; 이라고 하면
스택이라는 영역에 a 가 10이라는 데이터를 가지고 들어가게 된다.
int [ ] a = new int [5];
스택이라는 영역에 a가 생성되고 힙에 5개의 영역이 생성된다.
힙이라는 곳의 주소값을 가리티는 것이 스택의 'a'
선언할 때에는 a[0], a[1] ...
new ~ 는 동적매모리 할당연산자로
new ~ 가 있어야 힙에 할당이 가능하다.
4. 1차원 배열 초기값
초기 값을 콤마로 구분하여 여러번 기술하고 이들을 중괄호 { } 로 감싸줌
int [ ] a = {10, 20, 30, 40, 50};
int [ ] a = new int[ ] {10, 20, 30, 40, 50};
int [ ] a .. 하고 배열 선언 해 줄때 [ ] 안에 원소 갯수를 적으면 안된다.
5. 1차원 배열의 원소 입력, 출력
배열의 원소 값들을 입력
int a[ ] = new int [ ] {1, 2, 3, 4, 5};
for (i=0; i<a.length; i++)
a[i] = (i+1) * 2;
배열명.length : 배열이 가지고 있는 갯수 (ex.a.length)
배열의 개수를 알아낼 수 있음
배열의 원소 값들을 출력
for (i=0; i<a.length; i++){
System.out.println(" a[ " + i + " ] = " +a[i]);
}
a[i] 번째 원소 값이 출력되어짐
5-1. 1차원 배열 예제
sort : 정렬함수
select sort : 선택한 부분만 정렬하기
위의 방법을 select sort 라고 한다.
6. 배열의 동적 할당
배열은 선언 후 나중에 변수 값으로 할당 받을 수 있음
ex.
int arr [ ];
int people = 5;
arr = new int[people];
-> 변수 people값이 변경되면 배열의 수도 변경됨
이러한 것을 동적 할당이라고 한다. new int[ ] 안에 상수값이 들어가면 정적할당이라고 부른다.
6-1. 동적 배열 예제
인원수를 입력 받고 그 인원 수 만큼 이름과 전화번호를 입력받아 출력해주기
인원을 설정하고 이름, 국어, 영어, 수학 점수를 입력하여 총 점과 순위까지 출력해주는 프로그램
7. Random
컴퓨터가 난수를 발생시키는 방법 (랜덤의 수를 구하는 방법)
Math.random() // double 형태로! 0.0 ~ 0.9999... 중 하나의 숫자가 출력
Random 클래스
ex.
System.out.println("난수 = " + Math.random());
1~10사이의 정수 값 뽑기
int ran = (int)(Math.random()*10)+1; // 정수의 형태로 값 구하는 방법
--> 0.0 ~ 9.9999... 중 하나의 숫자가 출력되어 지는데 int 로 형변환을 하면 소수점은 다 사라진다.
( 0 ~ 9까지의 숫자 중 랜덤의 숫자를 구한다 ) + 1 해주면 -> 0 ~ 10까지의 숫자중 랜덤 숫자 구하기
7-1. Math.random() 예제
Up, Down 게임 만들기
로또 게임 만들기
package ch04;
import java.util.*;
public class Exam_05 {
public static void main(String[] args) {
// 1 ~ 45까지의 숫자 중
// 컴퓨터가 6개의 중복되지 않은 임의의 수를 선택하게 한 후
// 사용자가 6개의 수를 입력하여 맞춘 개수를 알려주는 프로그램
// 단, 6개를 다 맞추면 축하한다는 메시지도 같이 출력
int ran [] = new int[6];
int su [] = new int[6];
for (int i =0; i < ran.length; ++i) {
// 45개의 숫자 랜덤 돌리기
ran[i] = (int)(Math.random()*45) + 1;
// i번째 위치 중복검사
for (int j = 0; j < i; ++j) {
// 만일 같다면 빼주고 if문을 빠져나온뒤 다른 수를 넣는다.
if (ran[i] == ran[j]) {
i--;
break;
}
}
}
// 사용자가 직접 수를 입력
Scanner sc = new Scanner(System.in);
for (int i =0; i < ran.length; ++i) {
do {
System.out.print(i + 1 + "번째 수를 입력 : ");
su[i] = sc.nextInt();
}while(su[i] < 1 || su[i] > 45);
// i번째 위치 중복검사
for (int j = 0; j < i; ++j) {
// 만일 같다면 빼주고 if문을 빠져나온뒤 다른 수를 넣는다.
if (su[i] == su[j]) {
i--;
break;
}
}
}
// 컴퓨터 랜덤 수와 사용자 입력 수가 몇개 맞췄는지 비교
int count = 0;
for (int i = 0; i < ran.length; ++i) {
for(int j = 0; j < su.length; ++j) {
if (ran[i] == su[j]) {
count ++;
break;
}
}
}
if(count == 6) {
System.out.println("축하합니다. 전부 다 맞추셨습니다.");
}else {
System.out.println(count + "개를 맞추셨습니다.");
}
}
}
8. 2차원 배열
2차원 배열은 1차원 배열을 여러 개 묶어서 사용한 형태로 이해
9. 2차원 배열 선언
10. 2차원 배열의 생성
[2차원 배열 선언 하는 방법]
int arr[][];
int [][] arr2;
int [] arr3[];
[3차원 배열 선언 하는 방법]
int arr4[][][];
int [][][] arr5;
int [] arr7[][];
// 3행 4열 배열 선언
int arr4[][] = new int[3][4]; --> 가능
int arr5[][] = new int[3][]; --> 가능 (행만 먼저 선언 하는 것은 가능하다.)
int arr6[][] = new int[][4]; --> 불가능 (열만 먼저 선언 하는 것은 안된다.)
// 각각의 행에 열의 갯수가 틀려도 상관 없다.
int arr5[][] = new int[3][];
arr5[0] = new int[2];
arr5[1] = new int[3];
arr5[2] = new int[4];
10-1. 2차원 배열 예제
마방진 만들기
- 시작점은 첫번째 줄 가운데
- 오른쪽 대각선으로 이동
- 이동한 곳에 행의 값이 음수이면 그 열의 최대값으로 이동
- 이동한 곳에 열의 값이 배열을 벗어나면 그 행의 최소값으로 이동
- 이동한 곳에 데이터가 있다면 원래 위치로 이동 후 행을 하나 증가
'Study > Java' 카테고리의 다른 글
Java 클래스_클래스기초Ⅰ (0) | 2023.01.05 |
---|---|
Java 배열과 메소드_메소드의 개요 (0) | 2023.01.02 |
Java 제어문과 반복문_반복문 (0) | 2022.12.28 |
Java 제어문과 반복문_제어문 (0) | 2022.12.27 |
Java 기초_연산자 (0) | 2022.12.26 |