public class Ex03_class{

	public static void main(String[] args) {
    	// 일반변수 (지역변수)
        int x;
        x=10;
        System.out.println(x);
    
    	// 클래스 변수 - 객체가 생성되지 않아도 언제나 접근가능.
        // 클래스 변수는 객체생성과 상관없이 하나의 메모리만 할당 받고, 
        // 클래스가 메모리에서 사라질 때 메모리가 해제된다.
        // "클래스명.클래스변수" 형식으로 접근
        System.out.println(Test3.c);
        
        // System.out.println(Test3.a); 는 컴파일 오류이다 a가 메모리 할당을 받지 않았기 때문이다.
        
        // 인스턴스 변수는 객체가 메모리 할당이 된 이 후에 접근 가능하다.
        // "객체명.인스턴스변수" 형식으로 접근
        Test3 0b = new Test3();
        System.out.println(ob.a);
        // System.out.println(ob.b); 컴파일오류.
        // private 필드는 외부 클래스에서 접근불가능하고 해당 클래스에서만 접근가능하다.
        ob.write();
        // 인스턴스 메소드 실행
        
    }

}
class Test3{
	// 필드-인스턴스 변수 : 객체를 생성해야 접근할 수 있는 변수
    int a;
    // 디폴트 : 동일한 패키지에서는 접근할 수 있다.
    private int b=10;
    // private : 해당 클래스에서만 접근할 수 있다.
    
    // 필드 - 클래스변수 : 객체 생성과 상관없이 접근할 수 있다.
    // 클래스가 메모리에 로딩되는 순간 메모리 할당
    public static int c=20;
    // public : 어디에서나 접근 할 수 있다. 
    // static이 붙으면 클래스변수
    
    public void write(){
    	System.out.println(a+" : "+b+ " : " +c);
    }
}

 

public class Ex02_class{
	
    public static void main(String[] args){
		int x; // 일반변수, 초기화하지 않으면 연산이 불가하다.
        x = 50;
        System.out.println(x);
        
        Test2 t1; // 객체선언(레퍼런스 변수 선언)
        // t1.a=100; 컴파일 오류. 메모리가 할당되지 않았기 때문이다.
		
        t1 = new Test2(); // 메모리 할당. 객체를 생성함.
        	// new 생성자();
            
        t1.name = "김자바";
        t1.a=50;
        t1.write(); // 메소드 호출. 
        
        Test t2 = new Test2(); // 객체 생성과 메모리 할당.
        t2.write();

	}

}
// 클래스 : 필드(데이터를 저장한 저장공간)+ 메소드(어떤 일을 하는 것)
class Test2 {
	// 필드 선언(인스턴스 변수)
	// 필드는 초기화하지 않으면 객체가 생성되는 시점에 객체는 null, 숫자 변수는 0으로 초기화 된다.
    String name;
    // 객체가 생성될 때 null로 초기화 된다.
    int a;
    // 객체가 생성될 때 0으로 초기화 된다.
    int b=10;
    // 객체가 생성될 때 10으로 초기화 된다.
    
    // 메소드 (인스턴스 메소드)
    public void write() {
    	System.out.println(name+" : "+ a + " : " + b);
    }
    

}

public class Ex01_class{

	public static void main(String[] args) {
    	// Bank 클래스의 객체 생성
    	Bank ob; // 객체 선언
        ob = new Bank(); // 메모리 할당
        		//Bank() : 생성자. 객체의 초기화를 담당한다.
                
        // 객체 선언 및 메모리 할당        
        Bank ob2 = new Bank();
        
        ob.name = "홍길동"; // 객체의 필드 접근 
        ob.money = 1000;
        
        System.out.println(ob.name+ " : " +ob.money);
        System.out.println(ob2.name+ " : " +ob2.money);   
    
    }

}
	// 클래스 : 데이터(필드) + 행위(메소드)
public class Bank {
	// 필드 (인스턴스 변수)
    String name;
    int money;
    
    // 메소드(인스턴스 메소드)
    // 인출
    public int draw(int m) {
    	if(money<m) {
        	return -1;
        }
        
        money-=m;
        
        return m;
    }
    
    // 입금
    public void saving(int m) {
    	money+=m;
    }
}

 

 

public class Ex03_array {

	public static void main(String[] args){
    	int [][]a = {{10,20,30},{100,200,300}};
        int [][]b = new int[a.length][a[0].length];
        
        // 4번째 줄의 경우, a 배열 선언 및 메모리 할당, 값 입력까지 한 것
        // 5번째 줄의 경우, b 배열 선언 및 메모리 할당까지 한 것
        
        /* 1차원 배열의 경우 배열 복사
        System.arraycopy(a, 0, b, 0, a.length);         
        */
        
        // 2차원 배열의 값 복사
        // 10, 20, 30을 채우고 그 다음 행에 100, 200, 300을 채우는 것
        for(int i=0; i<a.length; i++){
        	System.arraycopy(a[i], 0, b[i], 0, a[i].length);
        }
        
        b[1][1] = 70;
        System.out.println(a[1][1]+ " : " +b[1][1]);
    
    }

}

public class Ex02_array {

	public static void main(String[] args){
    	int []a = new int[] {10,20,30};
        int []b = new int[a.length];
        
        System.arraycopy(a, 0, b, 0, a.length);
        // a의 배열의 0부터 길이까지 b배열에 복사
        
        System.out.println(a == b);
        // a배열과 b배열의 주소 비교 -> false
        
        System.out.println("a배열");
        for(int n: a)
        	System.out.print(n+"  ");
        System.out.println();
        
        System.out.println("b배열");
        for(int n: b)
        	System.out.print(n+"  ");
        System.out.println();
    
    	b[1] = 200;
        System.out.println(a[1]+" : "+b[1]);
    }

}

public class Ex01_array {

	public static void main(String[] args) {
    	int []a = new int[] {10,20,30};
        
        for(int i=0; i<a.length; i++){
        	System.out.print(a[i]+"  ");
        }
        System.out.println();
        
        int []b = new int[5];
        System.arraycopy(a, 0, b, 0, a.length);
        // arraycopy(원본배열, 본사시킬 원본 배열 시작위치, 대상배열, 복사시킬 위치, 복사할개수)
        
        for(int i=0; i<b.length; i++){
        	System.out.print(b[i]+"  ");
        }
        System.out.println();
        
        a = b;
        // b 배열의 주소를 a에게 할당.
        // 원래 a의 주소는 사라지게 된다. 
        
        for(int i=0; i<a.length; i++) {
        	System.out.print(a[i]+"  ");
        }
        
        System.out.println();    
    
    }

}

배열은 참조형 데이터타입이다.

배열은 초기화하지 않으면 0으로 초기화된다. 

b의 주소값을 a에게 옮겼기 때문에 원래 a가 가지고 있던 3개의 값을 저장한 주소는 찾을 수 없게 되므로 garbage collector의 회수 대상이 되어 사라진다.

import java.util.Arrays;

public class Ex05_bubble {

	public static void main(String[] args) {
		// Bubble sort
		int []num = new int[] {25,15,10,5,12,9,17,23,13,19};
		int t;
		
		System.out.print("Source data : ");
		for(int i=0; i<num.length; i++) {
			System.out.printf("%5d", num[i]);
		}
		System.out.println();
		
		// 정렬
		// 1회전 : (0:1)(1:2)(2:3)...(8:9)
		// 2회전 : (0:1)(1:2)(2:3)...(7:8)
		// 3회전 : (0:1)(1:2)(2:3)...(6:7)
		//		:
		// 9회전 : (0:1)
		
		for(int i=1; i<num.length; i++) { // i=0; i<9; i++ 9회전
			for(int j=0; j<num.length-i; j++) {
				if(num[j] > num[j+1]) { 
					t = num[j];
					num[j] = num[j+1];
					num[j+1] = t;
				}
			}
			System.out.println(i+"회전 : " + Arrays.toString(num));
			
		}
		
		System.out.print("Sort data : ");
		for(int i=0; i<num.length; i++) {
			System.out.printf("%5d", num[i]);
		}

	}

}

 

https://www.toptal.com/developers/sorting-algorithms

 

Sorting Algorithms Animations

Animation, code, analysis, and discussion of 8 sorting algorithms on 4 initial conditions.

www.toptal.com

public class Ex04_selection {

	public static void main(String[] args) {
		// Selection Sort
		int []num = new int[] {25,15,10,5,12,9,17,23,13,19};
		int t;
		
		System.out.print("Source data : ");
		for(int n: num) {
			System.out.printf("%5d", n);
		}
		System.out.println();
		
		// 정렬
		for(int i=0; i<num.length-1; i++) { // i=0; i<9; i++ 9회전
			for(int j=i+1; j<num.length; j++) {
				if(num[i] > num[j]) { // 부등호에 따라 오름차순, 내림차순
					t = num[i];
					num[i] = num[j];
					num[j] = t;
				}
			}
		}
		
		System.out.print("Sort data : ");
		for(int n: num) {
			System.out.printf("%5d", n);
		}
		System.out.println();
	}

}

Selection 정렬 : 가장 앞에 가장 작은 값을 놓는다.


50 25 60 35 40
1회전 : (1번째:2번째)(1번째:3번째)(1번째:4번째)(1번째:5번째)
25 : 50 / 25 : 60 /  25: 35 / 25 : 40
결과 : 25 50 60 35 40 
총 비교 횟수 n(n-1)/2
가장 쉬운 정렬 방식

 

+ Recent posts