짱짱해커가 되고 싶은 나

Ch3. Fundamental programming structures in Java (2) 본문

programming/java

Ch3. Fundamental programming structures in Java (2)

동로시 2019. 10. 8. 21:07

3.6 String & substring

character encoding system에서 code point/code position은 code space를 구성하는 숫자 값이다.

 

Unicode encoding은 1, 114, 112 cod points를 갖고 있다. 0x0~ 0x10FFFF

Unicode code space는 17개의 code planes로 나뉘고, 각 플랜은 65,536개의 code points를 지닌다.

-> Unicode의 total size = 17 * 65,536 = 1,114,112이다.

+) 특정 code space는 다른 인코딩 체계로 인코딩 가능.

    ex) UTF-8, UTF-16, UTF-32

 

a) U+0000 ~ U+007F (128)

- UTF-8(8bit), UTF-16(16bit), UTF-32(32bit)

b) U+0080 ~ U+07FF (1,9200)

- UTF-8(16bit), UTF-16(16bit), UTF-24(32bit)

 

codePointCount(a,b) : code point의 수 반환

ex) String greeting = "Hello";

     int cpCount = greeting.codePointCount(0,greeting.length());

 

charAt() : string의 특정 위치의 code unit을 반환

ex) char first = greeting.charAt(0); // first = "H"

     char last = greeting.charAt(greeting.length()-1); //last = "o"

 

offsetByCodePoints(a,b) : a에서 b만큼 이동한 위치인 code point 리턴.

codePointAt(a) : a의의 code point 리턴.

codePoints().toArray() : code point 전체 반환

ex) int index = greeting.offsetByCodePoints(0,i);

     int cp = greeting.codePointAt(index);

     int codePoints = greeting.codePoints().toArray();

 

String class에는 50개 이상의 함수가 포함되어 있다. 

java.lang.String : 매번 새로 생성

java.lang.StringBuffer : 문자열 추가/변경 할 때 사용. memory에 append. 클래스 직접 생성 X

java.lang.StringBuilder : 변경가능한 문자열, synchronization 적용X

 

3.7 Console Input and Console Ouput in Java

output - System.out.println()

input - java.util.Scanner 클래스에 standard input stream oject를 파라미터로 사용.

ex) import java.util.Scanner;

     Scanner in = new Sanner(System.in);

     System.out.print("What is your name?");

     String name = in.nextLine(); //한 줄 읽기

     String name = in.next(); //한 단어 읽기

     nextInt(), nextDouble() . . .

 

System.out.printf(x) : 총 8자 = 앞 공백 + 7자(.도 포함)

System.out.printf("%8.2f",x) : 총 8자 = 소수점 아래 2자리 포함

System.out.printf(String.foramt("%s %s", "korea", "japan")) : korea japan

System.out.printf(String.format("%10s%10s","korea","japan")) :      korea     japan

Systme.out.printf(String.foramt("%2$10s%1$10s","korea","japan")) :      japan     korea

System.out.printf(String.foramt("%-10d%-10d", 12345, 67890)) : 12345     67890     

 

File input & Output

import java.io;

import java.nio.path;

파일 읽기 = scanner 객체 생성 -> scanner class의 함수 이용해 읽기

파일 쓰기 = printwriter 객체 생성 -> printwriter class의 함수 이용해 쓰기

 

3.8 Control Flow

조건문과 반복문 지원.

다음은 C언어와 유사하다.

block scope and nested block(블록 범위, 중첩 범위)

conditional statements

loops

determinate loops

multiple selectoin - switch

statements that break control flow

 

3.9 Big Numbers

int 및 float type의 정밀도(precision)를 높이려면 java.math 패키지의 BigInteger 및 BigDecimal 클래스 사용.

: + - * / % 등의 연산자 사용 불가, 대신 add(), substract() 등의 함수 이용

 

3.10 Arrays

한 배열 내에는 같은 type의 많은 요소들이 저장되어 있는 data structure이다.

syntax : <data type><[ ]> <name>;

ex) int[] a; //실제 배열은 생성되지 않음

     int[] a = new int[100]; //new operater : heap area에 실제 배열 생성

     int[] smallPrimes = {2,3,5,6,11,13}; //new operator 없이 초기화

 

Traditional for Loop and Enhanced for Loop

ex1 : Traditoinal Loop

for(int i=0; i< a.length; i++)

     System.out.println(a[i]);

ex2 : Enhanced Loop

for(int element : a) //syntax : <변수 선언> : <배열/배열을 리턴하는 함수>

     System.out.println(element)

 

new 변수를 만들지 않고 기존배열을 re-initialize 하기 위한 방법

case1) int[] smallPrimes = {2,3,5,7,11,13};

         smallPrimes = new int[] {17,19,23,29,311,37};

case2) int[] smallPrimes = {2,3,5,7,11,13};

         int[] LuckyNumbers = {17,19,23,29,311,37};

         smallPrimes = LuckyNumbers;

 

Shall copy(call by reference) : 배열 변수를 복사하면 동일한 힙 영역의 배열 객체에 대한 두 개 참조가 스택에 생성.

ex) int[] luckyNumbers = smallPrimes;

Deep copy(call by value) : java.util.Arrays 클래스의 copyOf함수 이용, 힙 영역의 새로운 복사본 객체 생성.

ex) int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length);

 

Array Sorting

java.util.Arrays 클래스의 sort() 함수 사용.

- static void sort(type[] a);

- static int binarySearch(type[] a, type v);

- static void fill(type[] a, type v);

- static Boolean equals(type[] a, type[] b);

- static type[] copyOf(type[] a, int length);

 

Multidimensional Arrays

배열의 배열처럼 보이지만 실제로는 하나의 배열만을 갖고 있다.

balances[i][j]가 있다고 했을 때, balances[i]는 original array의 i번째 subarray다.

balances[i][j]는 i번째 subarray의 j번째 요소를 나타낸다.

 

int[][] magicSquare = {{1,3,4,5},{2,4,2,1},{3,4,6,8}.{4,5,7,6}};

int[][] magicSquare = new int[Rows][Columns];

for(int[] row : magicSquare){

    for(int element : row){

    }

}

 

Ragged arrays : row마다 다른 길이를 갖고 있는 배열

ex) int[][] odds = new int[7][];

     for(int n=0; n<7; n++)

         odds[n] = new int[n+1];

'programming > java' 카테고리의 다른 글

Ch.4 Objects and classes (2)  (0) 2019.10.09
Ch4. Objects and Classes (1)  (0) 2019.10.09
Ch3. Fundamental programming structures in Java (1)  (0) 2019.10.08
Ch2. Java programming environment  (0) 2019.10.07
ch.1 introduction to java  (0) 2019.10.07
Comments