자료구조에는 스택,큐,리스트,트리,배열 등이 존재.
int[] [변수명] = new int[길이]; 와 같이 선언
new = 레퍼런스 변수를 선언하는 키워드
배열타입 int[] [변수명]으로 작은 공간에 레퍼런스 변수만을 선언.
이것은 이름만 존재하는 공간만 선언 되는 것임.
레퍼런스 변수: 참조하는 변수[위의 변수명 array], 배열이 선언될 때 배열이 갖는 주소 값.
ex: Array[0] =3; 에서, 0은 인덱스, 3은 데이터.
인덱스 = 방번호라고 생각하면 편함
배열은 저장공간이 두가지 공간으로 나뉘는데
작은 공간(stack)은 참조하는 배열 레퍼런스 변수가 큰공간의 배열을 가리키는 것이고
큰 공간(array)은 배열 내 인덱스로 데이터가 존재하는 것이다. [0]
여기서 작은공간 -> 큰공간에 이어지는게 레퍼런스 변수로 이어지는데
이 링크가 끊어지면 자동으로 소멸하게 해주는 것이 가비지 콜렉터이다.
따라서 배열은 인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료 구조이다.
─ 한 번에 많은 메모리 공간 선언 가능
같은 종류의 데이터들이 순차적으로 저장되는 공간이다.
─ 데이터들이 순차적으로 저장됨
─ 반복문을 이용해 처리하기에 적합한 자료구조
배열 인덱스는 0부터 시작한다.
길이를 먼저 주는 방법 [array] 와, 성분을 같이 선언해주는 방법 [array4] 가 있다.
변수 이름만 선언해주고 초기화는 시키지 않았기 때문에, 출력을 할 수 없다. (주소값도 없다)
『 주의 사항 』
○ int[] arr = new int[]; 와 같은 형태는 크기가 지정되어있지 않아 불허용,
○ int[] arr = 10; 는 변수는 배열인데 실제 데이터를 지정
○ int intarray[10]; X 레퍼런스 변수 선언시 배열 크기를 지정할 수 없음.
○ int[] arr = new int1[]; arr[1] = 20; 의 경우에는 배열의 크기와 인덱스의 범위가 불일치
이렇게 선언할 경우 같은 데이터를 가리키게 된다.
public class ex01 {
public static void main(String[] args) {
int[] intArray = new int[5];
int[] myArray = intArray; //
intArray[1] = 2;
System.out.println("1번값 : "+intArray[1]);
myArray[1] = 6;
System.out.println("1번값 : "+intArray[1]);
}
}
다음과 같이 intArray의 주소를 myArray에 복사하였으므로
intArray와 같은 곳을 가리키는 myArray의 인덱스 데이터값을 바꾸면
intArray가 가리키는 곳도 똑같이 변경된다. [ 같은 곳을 가리키므로 ]
배열 크기는 배열 레퍼런스 변수를 선언할 때 결정되지 않음 ( int[] array; 는 크기가 없음)
배열의 크기는 배열 생성시 결정, 나중에 바꿀 수 없음.
배열의 크기는 배열의 length 라는 필드에 저장 됨.
import java.util.Random;
public class ex04 {
public static void main(String[] args) {
Random ran = new Random();
int z = 0;
int zzak = 0;
int hol = 0;
int[] i = new int[10];
int i_hol = 0;
System.out.printf("Array에 들어있는 홀수는 ");
for (int j = 0; j < i.length; j++) {
z = ran.nextInt(10);
i[j] = z;
if (z % 2 == 0) {
zzak = zzak + 1;
} else if (z % 2 == 1) {
hol = hol + 1;
i_hol = z;
}
System.out.printf("%d", i_hol);
}
System.out.println("이며, \n" + hol + "개 입니다.");
}
}
이 코드는 랜덤한 변수를 받아서 배열에 저장하면서, 홀수 및 짝수의 개수와 그 수를 판별하는 프로그램이다.
j는 배열 i의 인덱스이고, z는 랜덤한 변수를 선언해주게 되며, 그 z를 i[j] 배열의 데이터로 사용하게 하였다.
그리고 z의 수를 판별하는데, 여기서 코드를 줄이게 되면
import java.util.Random;
public class ex04 {
public static void main(String[] args) {
Random ran = new Random();
int zzak = 0;
int hol = 0;
int[] i = new int[10];
int i_hol = 0;
System.out.printf("Array에 들어있는 홀수는 ");
for (int j = 0; j < i.length; j++) {
i[j] = ran.nextInt(10);
if (i[j] % 2 == 0) {
zzak = zzak + 1;
} else if (i[j] % 2 == 1) {
hol = hol + 1;
i_hol = i[j];
}
System.out.printf("%d", i_hol);
}
System.out.println("이며, \n" + hol + "개 입니다.");
}
}
변수 z를 없애 i[j] 가 직접 랜덤 값을 받게 하였다. 하지만 홀수를 구분하는 프로그램에서 짝수를 따로 판단할 필요는
없기 때문에
import java.util.Random;
public class ex04 {
public static void main(String[] args) {
Random ran = new Random();
int zzak = 0;
int hol = 0;
int[] i = new int[10];
int i_hol = 0;
System.out.printf("Array에 들어있는 홀수는 ");
for (int j = 0; j < i.length; j++) {
i[j] = ran.nextInt(10);
if (i[j] % 2 == 1) {
hol = hol + 1;
i_hol = i[j];
}
System.out.printf("%d", i_hol);
}
System.out.println("이며, \n" + hol + "개 입니다.");
}
}
다음과 같이 짝수에 관련된 if문 또한 제거하였다.
import java.util.Random;
public class ex05 {
public static void main(String[] args) {
Random ran = new Random();
int z = 0;
int[] i = new int[5];
for (int j = 0; j < i.length; j++) {
i[j] = ran.nextInt(9);
System.out.printf("%d", i[j]);
if (i[j] > z) {
z = i[j];
}
}
System.out.println("\n 가장 큰 값은 " + z + "입니다.");
}
}
1차원 배열을 선언해, 배열의 순차적으로 랜덤한 정수를 넣고
그 중 가장 큰 값을 찾아 출력하는 프로그램.
z에 해당 배열의 값을 저장하여, 그 z보다 크지 않은 경우 if문이 실행되지 않게 함으로서
최종적으로 가장 큰 값 z를 출력하게 하였다.
import java.util.Arrays;
import java.util.Scanner;
public class ex06 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] i = new int[5];
int z = 0;
int c = 0;
int b = 100;
int d = 0;
for (int j = 0; j < i.length; j++) {
System.out.printf("%d번째 입력>>", j + 1);
i[j] = sc.nextInt();
if (i[j] > z) {
d = d + i[j];
c = i[j];
z = i[j];
// System.out.printf("%d", i[j]);
}
if (b > z) {
d = d + i[j];
b = z;
// System.out.printf("%d", i[j]);
}
}
System.out.printf("입력된 점수:%s", Arrays.toString(i)); // 출려갛고 싶은 배열의 변수이름을 넣어 배열을 출력
System.out.printf("\n최고 점수: %d", c);
System.out.printf("\n최저 점수: %d", b);
System.out.printf("\n총합: %d", d);
System.out.printf("\n평균: %d", d / i.length);
// 입력 5개, 입력된 점수 출력, 최고점수 및 최저 점수 출력, 총합 평균 출력
// shift + home = 한줄 전체 선택
}
}
다섯 점수를 입력받고 각각 입력된 점수를 tostring으로 나열하고
나머지 최고 점수, 최저 점수, 총합과 평균을 나타내는 것.
'Language > Java 기본' 카테고리의 다른 글
객체 지향프로그래밍 (Object Oriented Programming) (0) | 2021.01.07 |
---|---|
메서드 (0) | 2021.01.07 |
do ~ While 문 (0) | 2021.01.04 |
for문의 응용 (0) | 2021.01.04 |
다중 for 문의 사용 (0) | 2020.12.31 |