KB IT’s Your Life 4기 - Java 2일차


배열

package day_02;

public class ArrayExam {

	public static void main(String[] args) {
		int[] arr; //선언 
		//int arr[]와 같음
		arr = new int[3]; //대입 > 빈 배열을 만듦
		arr[0] = 100;
		arr[1] = 200;
		arr[2] = 300;
		System.out.println(arr); //[I@3d012ddd => [ 배열, I int, @ 구분자, 3d012ddd 참조값
		
		/**배열 바로 초기화하기*/
		//변수 선언할 때, 배열 대입 *** static 공간에 배열을 만듦
		int arr2[] = {100, 200, 300}; //선언, 대입 한번에 
		//arr2 = {100, 200, 300}; 오류가 남. 초기화하는 코드 내에서만 배열 대입 가능
		System.out.println(arr2[2]);
		
		//변수 대입할 때, 배열 대입 *** heap 공간에 배열을 만듦. => Stack에 arr3에서 heap에 배열을 가리킨다.
		//이 방법이 메모리 공간을 효율적으로 관리하는 데 있어서 도움이 된다.
		int arr3[] = new int[]{100, 200, 300}; //선언, 대입 한번에
		arr3 = new int[] {100,400,300}; //가능. 상단의 배열은 Garbage값이 된다.
		//CPU가 놀고 있을 때(사용자 입력을 기다리는 상황), 가비지 컬렉션을 검사할 수 있다.(무조건은 X VM이 알아서 메모리 관리)
		System.out.println(arr3[1]);
		
	}

}

String 메모리 공간

package day_02;

public class StringExam {

	public static void main(String[] args) {
		/**문자열 생성*/
		// new 연산자 없이 만들어지는 경우, Method 영역에 만들어진다.
		String s = "Kim";
		//new 연산자를 통한 생성자들은 모두 heap공간에 만들어진다.
		String s2 = new String("Kim2");
		
		//***기본 데이터 타입 변수 값은 stack영역 안에 값이 들어간다.heap영역을 따로 잡아서 가리키지 않음.
		int i = 50;
		
		System.out.println(s2);
		
	}

}

다차원 배열

image

배열 복사

package day_02;

public class ArrayExam3 {
	public static void main(String[] args) {
		int[] oldArr = { 10, 20, 30 };
		int[] newArr = new int[5];
		//oldArr에 0번째부터, newArr에 0번째부터 3개를 복사함
		System.arraycopy(oldArr, 0, newArr, 0, 3);
		
		//foreach로 배열의 내부값 담음.
		for (int i : newArr) {			
			System.out.println(i);
		}
	}
}

Scanner

package day_02;
//다음동작까지 무한히 대기 - BLOKING
import java.util.Scanner;

public class ScannerExam {

	public static void main(String[] args) {
		//하나만 만들어야한다. System이 키보드를 가리키기 때문. 
		Scanner scanner = new Scanner(System.in);
		//next? 공백문자(space,enter,tab)를 기준으로 분리, 입력을 의미한다. Blocking method 
		int a = scanner.nextInt();
		scanner.nextBigDecimal(); //bigDecimal이란? long은 900경을 표현할 수 있다. long형보다 큰 정수형 데이터 타입을 처리한다.
		
		String b = scanner.next(); //글자 한개 단어씩 추출
		String c = scanner.nextLine(); //한줄씩 추축
		
		System.out.println(a + b + c);
	}

}

코테


import java.util.Scanner;
import java.util.StringTokenizer;

/**
 * 
1부터 10까지의 정수를 입력받다가 입력된 정수가 범위를 벗어나면 그 때까지 1번 이상 입력된 각 숫자의 개수를 작은 수부터 출력하는 프로그램을 작성하시오.

 : 줄바꿈,  : 공백
예제
5 6 10 9 3 5 3 5 0
3 : 2개
5 : 3개
6 : 1개
9 : 1개
10 : 1개
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //문자열 나누기 기능: StringTokenizer
        String line = sc.nextLine();//한줄읽기
        //숫자갯수 알아내기. StringTokenizer
        StringTokenizer st = new StringTokenizer(line);
//        System.out.println(st.countTokens());
        //추출할 토큰이 존재하는동안 반복
        while(st.hasMoreTokens()) {
            String s = st.nextToken();//토큰 추출
            //String -> int변환
            int i = Integer.parseInt(s);
            System.out.println( i );
        }//end while
    }
}