배열
자바에서 배열을 선언하고나면 배열의 길이는 바꿀 수 없다.
참조변수
배열을 갖고 있는 주소를 참조
데이터 타입 | ||
기본 타입 | 참조 타입 | |
정수 타입 | byte | 배열 타입 |
char | 열거 타입 | |
short | 클래스 | |
int | 인터페이스 | |
long | ||
실수 타입 | float | |
double | ||
논리 타입 | boolean |
깡으로 숫자(논리)가 아니고서는 전부 참조타입이라고 생각하면 된다. (String 은 참조변수)
배열생성
int[] score; // 배열을 선언 → 데이터를 저장할 수 있는 공간이 아직 없음
score = new int[5]; // 배열을 생성
배열 만들때는 숫자 5를 써서 5개의 방을 만든다고 하는데 셀 때는 0부터 센다.
→ score[0],score[1],score[2],score[3],score[4] ...
배열을 생성하고 아무것도 넣어주지 않는다면 값은 전부 0이 된다.
→ score[0] = 0, score[1] = 0, score[2] = 0, score[3] = 0, score[4] = 0 ...
int[] score = new int[5]; // → 크기가 5인 정수형 배열을 생성한다.
score[0] = 100; score[1] = 88; score[2] = 77; score[3] = 97;score[4] = 9; // 배열에 값 넣기
int[] score = {55, 20, 45, 88, 91, 77}; // 크기를 안정해놓고 값을 바로 넣어도 알아서 지정된다.
int[] score = new int[]{55, 20, 45, 88, 91, 77};
배열의 총합과 평균 구하기
public static void main(String[] args) {
int sum = 0; // 총점을 저장하기 위한 변수
int avg = 0; // 평균을 저장하기 위한 변수
int[] score = {88, 70, 91, 45, 30};
//score[0] == 88, score[4] == 30
for (int a = 0; a < score.length; a++) {
sum += score[a];
}
avg = sum / score.length;
System.out.println("총점 : " + sum);
System.out.println("평균 : " + avg);
}
}
length << 배열원소의 개수. score안에 객체 수가 변해도 자동으로 변경된다.
length()는 String 문자열의 길이.
public static void main(String[] args) {
// 시험 성적 중 가장 높은 점수와 가장 작은 점수는 무엇인가.
int [] score = {70, 60, 88, 45, 97, 58};
int max = score[0]; // 배열의 첫 번째 값으로 최대값을 초기화 한다.
int min = score[0]; // 배열의 첫 번째 값으로 최소값을 초기화 한다.
for (int a = 0; a < score.length; a++) {
if(min >= score[a]) min = score[a];
else if(max >= score[a]) continue;
else max = score[a];
}
System.out.println("최대값 : " + max); // 97
System.out.println("최소값 : " + min); // 45
}
min과 score[a]를 비교하여 score[a]가 min보다 작거나 같으면 min에다 score[a]의 값이 들어가게 한다.
max와 비교했을 때, max 값이 더 크다면 반복문을 다시 실행한다. max값이 더 작다면 max에 score[a] 값이 들어가게 해준다. 굳이 continue를 넣어주지 않고 if문을 하나 더 사용하여 max가 작다면 score[a]의 값이 들어가게 해주면 더 간단해진다.
숫자 섞기
public static void main(String[] args) {
int[] number = new int[10];
System.out.println(number);
for(int i = 0; i < number.length; i++) {
number[i] = i; // 배열을 0 ~ 9 까지의 정수로 초기화한다.
System.out.print(number[i] + "\t");
}
System.out.println();
// 첫 번째 방의 값과 랜덤하게 추출한 바으이 값을 100번 교환한다.
for(int i = 0; i < 100; i++) {
int r = (int)(Math.random() * 10); // 0 ~ 9 사이의 임의의 정수를 추출한다.
int 임시 = number[0];
number[0] = number[r];
number[r] = 임시;
}
for(int i = 0; i < number.length; i++) {
System.out.print(number[i] + "\t");
}
}
첫번째 for문을 통해 배여르이 모든 값에 정수를 넣어준다. ( 빈 방이 없도록)
두번째 for문을 통해 0 ~ 9 사이의 임의의 정수를 추출하고,
int 임시 = number[0];
number[0] = number[r];
number[r] = 임시;
이 과정을 통해 number[0] 에는 number[r]값이, number[r]에는 number[0]값이 들어가게 된다.
(결과로 출력되는 값에 겹치는 숫자가 안오는 이유)
이 과정을 100번 반복한다.
작은 수부터 왼쪽 정렬 (오름차순 정렬)
public static void main(String[] args) {
int[] number = new int[10];
for (int i = 0; i < number.length; i++) {
System.out.print((number[i] = (int) (Math.random() * 10)) + " ");
}
System.out.println();
// 작은 숫자가 왼쪽에 오도록 정렬해주세요!
// (세로방향) 전체 작업은 2개씩 비교하므로 number.length보다 1 작은 만큼한다.
for (int i = 0; i < number.length; i++) {
// (가로방향) number.length보다 1 작은 만큼 작업을 하는데,
// 한 번 작업이 끝나면 작업 횟수를 1씩 감소시킨다.
for (int j = 0; j < number.length - 1 - i; j++) {
// 오른쪽의 작업이 끝난 방은 다음 작업에서 제외시킨다.(-i)
if (number[j] > number[j + 1]) {// 오른쪽 방의 값이 왼쪽 방의 값보다 크면 교환한다.
int 임시 = number[j];
number[j] = number[j + 1];
number[j + 1] = 임시;
}
}
// 작업이 모두 끝나면 정렬된 결과를 출력한다.
for (int k = 0; k < number.length; k++) {
System.out.print(number[k]);
}
System.out.println();
}
}
출력 결과
제일 위에 나온 수를 작은 수 부터 정렬했다.
그런데 2번째 줄에 이미 정렬이 끝났는데 10줄이 출력 되었다.
만약 중복되는 값이 있을 때 정지시키고 싶다면 어디에 코드를 추가 해야 할까?
변수를 설정해서 한줄만 출력하게 할 수 있다.
number 변수를 설정한 곳에 count 변수를 따로 설정한다.
이후 if문이 실행된 곳에 마지막으로 count++;를 넣어준다.
이로써 if문이 실행되면 count의 수가 늘어나고, if문이 실행되지 않으며 count가 늘어나지 않게 된다.
if(count == 0 && i != 0) break;
else count = 0;
제일 마지막 for문 (결과 출력 문장) 위에 넣어준다.
i != 0 을 넣어준 이유 : 만약 운이 좋아서 시작하자마자 작은 수부터 정렬이 된 숫자가 나왔을 때 출력이 아예 되지 않는 경우를 방지
count 변수를 boolean형으로 만들고 fasle를 준 뒤, if문을 통과하면 값을 true 바꿔주는 형태로 사용해도 된다.
만약 내림차순으로 정렬하고 싶다면 if값의 부등호만 바꿔주면 된다.
10개의 무작위 숫자를 생성한 뒤, 각각의 숫자의 수를 구하기
public static void main(String[] args) {
int[] number = new int[10];
int[] counter = new int[10];
int[] num = new int[2]; // 배열값에 아무것도 안줬을때 확인용
System.out.println(num[0]++); // 0
System.out.println(num[0]); // 1
System.out.println(num[1]); // 0
// 0 ~ 9 까지 임의의 정수를 추출하여 number 방에 저장한다.
for(int a =0; a< number.length; a++) {
System.out.print(number[a] = (int)(Math.random() * 10));
}
System.out.println();
// 0 ~ 9 까지의 정수가 각각 몇 개인지 알려주세요.
for (int a= 0; a < number.length; a++) {
counter[number[a]]++;
}
for (int a=0; a<number.length; a++) {
System.out.println(a + "의 개수 : " + counter[a]);
}
}
배열에 ++를 달아주면 그 배열 안의 값이 1이 올라간다. 이를 이용해 각 정수가 출력된 횟수를 구할 수 있다.
출력 결과
'Language > Java' 카테고리의 다른 글
[Java] Array 실습 (length) (0) | 2022.07.28 |
---|---|
[Java] Array 내림차순 (0) | 2022.07.28 |
[Java] 별 모양 출력 (0) | 2022.07.26 |
[Java] 별 그리기 ★★★ (0) | 2022.07.26 |
[Java] 별 그리기 ★★ (0) | 2022.07.26 |