[Java] 배열(Array), Scanner__개발공부 4일차-4
배열(Array)
ㄱ. 배열 정의?
[동일한 자료형]을 메모리 상에 [연속적]으로 놓이게 하는것.
ㄴ. 배열 선언 형식
자료형[ ] 배열명 = new 자료형[배열크기];
[갯수]
변수명
참조형 변수 (주소를 참조해 오기 때문이다.)
예) int[ ] kors = new int[3];
new에 의해 실제 메모리 heap(힙) 동적 메모리 영역에 할당됨. int * 3
ㄷ. 배열 선언
int [] kors = new int[5];
ㄹ. 배열의 초기화
kors[0] = 90;
kors[1] = 89;
kors[2] = 78;
kors[3] = 56;
kors[4] = 88;
-----------------------------------------------------------------------------------------------------------------------------------
배열 초기화
*****중요*****
ㄷ+ㄹ 을 합쳐서 진행할 수있다.
//int [] kors = new int [] {90, 89, 78, 56, 88};
int [] kors = {90, 89, 78, 56, 88};
System.out.println( kors.length ); //5
System.out.println(kors[kors.length - 1]); //마지막 인덱스 값
cf)각 배열의 요소를 초기화 하지 않았는데도...syso로 출력해도Err 발생하지 않고 int[ ] 각 요소에 0으로 자동으로 초기화 되어져 있음
자료형의 기본값으로 초기화됨
-----------------------------------------------------------------------------------------------------------------------------------

실제 메모리 영역에 할당된 곳의 주소만 참조해서 오는 것이기 때문에 참조형 변수라고도 불리는것이다.
String[ ]args --------> 문자열 배열 args라고 읽는다.
[ ]인덱스(index)연산자
*****중요*****
1. 한 학생의 국어 점수를 저장할 변수를 선언하세요.
int kor;
2. 5000만명 학생의 국어 점수를 저장할 변수를 선언하세요.
int kor00001;
int kor00001;
: --------->시간이 너무 오래 걸리고, 공간도 많이 잡아 먹는다.
: ==>그래서 '배열'을 사용하는 것이다.
int kor49999;
int kor50000;
int [ ] kors = new int[3]; 배열명[인덱스값]
첨자값
kors[0] = 98;
kors[1] = 88;
kors[2] = 50;
System.out.println( kors[0] ); //98
System.out.println( kors[1] ); //88
System.out.println( kors[2] ); //50
split 메서드
split
1.기능 : 매개변수를 기준으로 문자열을 잘라준다.
2.매개변수 ","
3.리턴값, 리턴자료형 : String [ ]
String[ ] dataArray = data.split(",");

위의 예제를 홍길동, 90, 88, 75 과 같이 공백과 함께 입력하면 Err가 발생한다.

trim 메서드
trim
1.기능 : 문자열 앞뒤에 있는 공백 제거해준다.
2.매개변수
3.리턴값, 리턴자료형
name = dataArray[0].trim();

위의 예제를 trim을 사용하면
홍길동, 90, 88, 75 과 같이 공백과 함께 입력가능하다.
Scanner
Scanner sc = new Scanner(System.in);
으로 키보드 입력 받는다.


Scanner
sc.next()
sc.nextInt() 로 입력 받으면 로 변수값 할당하면 앞에서 부터 공백기준으로
sc.nextBoolean() 한개씩 할당된다.
sc.nextDouble()

useDelimiter를 활용하여 콤마 구분자를 설정도 가능하다.
String pattern = ",";
sc.useDelimiter(Pattern);
Scannaer의 객체는 자원을 반드시 돌려주기 위해서 close 해야한다.(닫아줘야 한다.)
sc.close();
효율적인 연산
AND 연산자에서 둘다 모두 참이어야 하므로 앞에가 거짓이면 뒤에가 참이던 거짓이던 상관이 없다.
컴퓨터가 앞에서 거짓이면
바로 다음 계산으로 넘어가는 걸 효율적인 연산이라고 한다.
OR 연산자에서 둘중 하나만 참이면 참이므로 앞에가 참이면 뒤에가 참이던 거짓이던 상관이 없다.
컴퓨터가 앞에서 참이면
바로 다음 계산으로 넘어가는 걸 효율적인 연산이라고 한다.

알파벳 숫자
char a = 'a', z = 'z';
char A = 'A', Z = 'Z';
System.out.printf("%c[%d]\n",a,(int)a); //-------> 정수계열이니까 casting 연산자로 형변환 가능
System.out.printf("%c[%d]\n",z,(int)z);
System.out.printf("%c[%d]\n",A,(int)A);
System.out.printf("%c[%d]\n",Z,(int)Z);
a[97]
z[122]
A[65]
Z[90]
대문자를 소문자로 변환
소문자를 대문자로 변환
소 - 대 = 32
97 - 63 = 32
대문자 A -소문자 a 문자코드값의 차를 확인
System.out.println( a-A ); // a - A 32 문자에서 문자를 빼는건데도 오류가나지 않음
System.out.println( 'a'-'A' ); // 'a' - 'A' 32 내부적으로 정수계열이라서 알아서 빼줌
char ch = 'x' - 32;
System.out.println(ch); // 'X' 출력