import java.util.Scanner;
public class Exam_01 {
public static void main(String args[]) {
int a=10;
//int[] arr; //arr이라는 변수만 만들어진 것, 정확히는 Stack에다가 "배열의 주소를 저장한 참조변수"를 만든 것임. 배열의 본체는 Heap에 있다. 주소값을 Stack에 만들어진 변수 arr이 갖고 있는 것.
//Heap에다가 뭔가 새로 만들겠습니다, Heap을 이용하겠습니다 할때의 용법은 new
//new int[5]; //int형 변수 5개를 Heap에 만들겠다는 의미
//int b = new int[5]; // 에러가 남. 자료형이 안맞음.
//String b = new int[5]; //에러가 남. 마찬가지로 자료형이 안맞음.
/*
int[] arr = new int[5];
//int[]가 배열참조변수를 생성함. """int형 배열의 주소를 저장하는 참조변수 arr""" 배열을 만든 것이 아님!!!
//new int[5] -> int형 배열 5개를 heap에 만들었다.
//배열참조변수는 배열과 자료형이 동일해야한다. int형이면 int[], String형이면 String[]에 담아야 한다.
arr[0]=10;
//배열의 첫번째칸은 0번이다.
//5칸짜리 배열의첫번째칸(0번)에 10을 넣겠다는 의미
arr[1]=20;
arr[2]=30;
arr[3]=40;
arr[4]=50;
//arr[5]=60; //생성한 배열의 범위(Index)를 벗어나면 예외가 발생한다.
// [] : index 첨자
//for문(반복문)을 이용해 배열에 데이터를 넣거나, 이후에 네트워크,데이터베이스를 통해 데이터를 넣기도 함(이후에~)
//배열의 인덱스 숫자 = 오프셋(Offset)
//오프셋이란 ? 기준점으로부터 얼만큼 떨어졌는가 라는 표현
//오프셋2 = 기준점으로부터 2만큼 떨어져있다
//오프셋5 = 기준점으로부터 5만큼 떨어져있다
//기준점 arr[0] = 1000번지
//arr[1] =1000번지에서 1만큼 떨어져있다 (1byte=4bit) ==> 1004번지
//앞서 배웠던 변수들과 사용방법은 같음
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
System.out.println(arr[0]+arr[1]);
int index=0;
System.out.println(arr[index]); // int변수 index에 0이 저장되어 있으므로, arr[0]과 같음
System.out.println(arr[5-3]);//배열참조함수의 index에는 연산식을 넣을 수도 있다. arr[2]
System.out.println(arr[(int)(Math.random()*3)]); //난수도 넣을 수 있다.
//결과적으로 index에 숫자만 들어가면 다 ok임.
Scanner sc = new Scanner(System.in);
System.out.println(arr[Integer.parseInt(sc.nextLine())]);
//스캐너로 숫자값을 입력받아 index에 넣을 수도 있다.
*/
//int[] arr = new int[5] {10,20,30,40,50} 이렇게 입력하는 경우 에러가 난다. 한번에 입력하는 경우 자동으로 배열을 생성하기 때문에 생성하려는 배열크기를 입력할 필요가 없다?
int[] arr = new int[] {10,20,30,40,50,60};
//for(int i=0;i<6;i++) {
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
//반복문을 이용해 간단하게 출력코드가 가능해짐
//배열의 크기만 늘어나면 for문의 범위의 숫자도 계속 바꿔줘야하는 번거로움이 있다
//So 번거롭지 않게 동적으로 계속 변화하기 하기 위해 arr.length를 이용한다.
}
}
Comment