배열 생성
배열은 자바에서 객체로 취급하기 때문에 new 연산자로 배열 객체를 생성한다. 배열의 크기는 한 번 지정하면 변경할 수 없다.
배열 객체가 생성된 후의 메모리 구조
배열 객체를 생성하면 Stack 영역에는 배열 객체를 가리키는 레퍼런스 값(주소)이 저장된다. 그리고 Heap영역에는 실제 배열 객체가 생성된다.
<배열의 크기 지정>
public class ArrayTest1 {
public static void main(String[] args) {
//배열 선언
int ages[];
String names[];
//배열 객체 생성
ages = new int[3];
names = new String[3];
//초기화
ages[0] = 1;
ages[1] = 2;
ages[2] = 3;
names[0] = "홍길동";
names[1] = "전우치";
names[2] = "김태리";
//값출력
for(int i=0; i<=2; i++) {
System.out.println("ages["+i+"] = " + ages[i]);
System.out.println("names["+i+"] = " + names[i]);
}
}
}
기본 형식이다
<배열의 크기를 지정하지 않고 바로 배열에 값을 초기화>
public class ArrayTest3 {
public static void main(String[] args) {
String cities[] = {"서울", "대구", "춘천", "울산", "광주", "천안"};
String nations[] = new String[] {"대한민국", "미국", "영국", "일본", "프랑스"};
//배열값 출력
for(int i=0; i<cities.length; i++) {
System.out.println("cities ["+i+"] = " + cities[i]);
}
System.out.println();
for(int i=0; i<nations.length; i++) {
System.out.println("nations["+i+"] = " + nations[i]);
}
}
}
현역에서는 잘 사용하지 않지만 이런 방법도 있다는 걸 알아둔다.
for(int i=0; i<cities.length; i++) {
System.out.println("cities ["+i+"] = " + cities[i]);
}
여기서 가장 중요한 부분은 length 메소드이다.
cities.length
이것은 자바스크립트에서도 나왔던 것으로.. cities의 개수 만큼 이라는 뜻이다. 하지만 배열은 0부터 시작하니까 '<=' 이 부호가 아니라 '<' 이 부호를 사용해야 한다.
이름을 입력시 배열에 입력된 이름과 비교해서 출력을 하고, 몇 번째 인덱스에 있는지도 알려줌
import java.util.Scanner;
public class ArrayTest4 {
public static void main(String[] args) {
String names[] = new String[] {"예지", "지수", "류진", "채령", "유나", "ITZY"};
Scanner sc = new Scanner(System.in);
int index = -1;
do {
System.out.println("검색할 이름을 입력하세요");
System.out.print("이름 : ");
String name = sc.next();
for(int i=0; i<names.length; i++) {
if(name.equals(names[i])) {
index = i;
}
}
if(index != -1) {
System.out.println(name+"은(는) 배열의 " + index +"인덱스 방에서 찾았습니다.");
break;
}
System.out.println("해당하는 이름이 존재하지 않습니다.");
}
while(true);
}
}
검색할 이름을 입력하세요 이름 : 예지 예지은(는) 배열의 0인덱스 방에서 찾았습니다. |
초록색은 내가 입력한 값이다.
heap
예지, 지수, 류진, 채령, 유나, ITZY가 자동으로 들어간다.
stack
heap의 주소가 들어간다.
여기서 int index = -1;을 설정한 이유는 사용자가 입력한 값이 배열에 존재한다면 인덱스 번호가 자연수로 매겨져야 하니까 -1을 설정해줬다. -2를 하든지 -3을 하든지는 상관 없음!
do-while문 없이 이용하는 것도 가능함!!
import java.util.Scanner;
public class NameFind {
public static void main(String[] args) {
String names[] = new String[] {"김수연", "박성현", "최수지", "안소희"};
Scanner sc = new Scanner(System.in);
int index = -1; //-1을 하는 이유는 존재 한다면 인덱스 번호가 자연수이기 때문에 없을 만한 수로 정했다.
System.out.print("이름을 입력하세요 : ");
String name = sc.next();
for(int i=0; i<names.length; i++) {
if(name.equals(names[i])) { //문자열 비교는 equals()
index = i;
}
}
if( index != -1 ) {
System.out.println(name +"이(가)"+ index + "번째에 있습니다.");
}else {
System.out.println(name + "은(는) 없습니다.");
}
}
}
JAVA 5.0 이상 버전에서 돌아가는 코드
public class ArrayTest5 {
public static void main(String[] args) {
String names[] = new String[] {"ITZY", "예지", "리아", "류진", "채령", "유나"};
for(String name : names) {
System.out.print(name+" ");
}
}
}
ITZY 예지 리아 류진 채령 유나 |
String name : names
배열을 리턴해주는 함수로 처음부터 끝까지 인쇄해준다.
'개발일지 > Java + Spring' 카테고리의 다른 글
[Java] 함수 설명 + 만드는 방법 (1) | 2021.09.17 |
---|---|
[Java] File 함수로 파일 탐색 + try-catch 예외처리 (0) | 2021.09.17 |
[java] float, double 계산 후 소수점까지 출력 (0) | 2021.09.17 |
[java] 0916 정리 및 예제 (0) | 2021.09.16 |
[java] 문자열 비교 메소드 3가지(대소문자 구별?) (0) | 2021.09.16 |