반응형

package com.access.array;


/*

 *  오브젝트와 클래스의 차이점

 *  Object

 *  1) 클래스의 인스턴스이다.

 *  2) 현실 존이다(펜, 렙탑, 모바일 등등)

 *  3) 물리적 존재이다

 *  4) 오브젝트는 new 키워드로 만들어진다.

 *  5) 매번 요구시 만들어진다.

 *  6) 오브젝트는 만들어질때 메모리에 할당된다.

 *  7) new 키워드,newInstance() method 등등 다양한 방법으로 오브젝트를 만들 수 있다.

 *  

 *  

 *  Class

 *  1) 오브젝트를 만들때 참조하는 도안 혹은 청사진이다.

 *  2) 유사한 객체의 그룹이다.

 *  3) 논리적 존재이다.

 *  4) class 키워드로 선언된다.

 *  5) 한번 선언된다.

 *  6) 클래스는 만들어질때 메모리에 할당되지않는다.

 *  7) class키워드로만 클래스를 정의할 수 있다.

 */

public class object {


}



반응형
by 발전소장 에르 :) 2017. 9. 25. 23:44
반응형

package com.command;


/*

 *  Java Command Line Argument

 *  자바프로그램을 실행할 때, 커맨드 라인에 인수를 넣어주는 것을 의미한다.

 *  콘솔에서 입력되어 프로그램에 전달되는데 입력으로 사용될 수 있다.

 *  그래서 프로그램이 작동할 때 다양한 값을 넣어 어떻게 반응하는지 테스트할때 편리하게 사용될 수 있고

 *  명렁창에서 n개의 인수를 줄 수 있다.

 *  

 *  

 *  예제를 보자. 

 */

public class CommandLineExample {

public static void main(String[] args) {

System.out.println("First argument is " + args[0]);

// 필자는 Run Configuraion에서 argument로 java 라고 줬다.

}


}

result = First argument is java



반응형
by 발전소장 에르 :) 2017. 9. 25. 17:49
반응형

package com.strict;


/*

 * 우리가 부동 소수점 변수를 연산 수행하였을 떄, 

 * 어떠한 플렛폼에서든 동일한 결과를 얻을수있도 지켜주는 고마운 키워드가

 * 바로, 이번 시간에 다뤄볼  Java Strictfp Keyword이다.!

 * 

 * (구)플렛폼에서 (신)플렛폼으로 옴겨서 실행할 경우 정확성이 차이가날 수 가 있다.

 *  그 말인 즉슨, 큰 값을 계산할수록 오차범위가 커진다는것이다.

 *  게다가 오차범위가 크다는것은 혼란과 재앙을 야기하는데 충분한 요소인데 특히 

 *  건축, 의료 분야에서는 진짜로 Catastrophe!가 될 수가 있고 이는 

 *  충분히 인명사고로 이어질 수 있으며 금융에서는 인플레, 디플레, 등등 인류에게 영향을 

 *  미칠 수도 있다.( 물론 그럴일은 없겠지만)

 *  그래서 자바는 strictfp키워드를 지원함으로서 플렛폼마다 차이가 날 수 있는 오차범위를

 *  잡고자 꾀했다. 부동소수점의 고질적 문제가 해결된것이다.

 *  

 */

public class strict {


public strictfp class A { // 클래스에 사용가능하고,

private strictfp void A_Method() {

}// 메소드에 사용이가능하며,

}


protected strictfp interface B { // 인터페이스에도 사용할 수 있다.

}


}


class B {

// strictfp abstract void m(){ } 추상메소드에 사용이 불가하며,

// strictfp int da = 10; 변수에 붙을 수 없고

// strictfp B(){} 생성자에 붙을 수 읍당.


}



반응형
by 발전소장 에르 :) 2017. 9. 25. 17:40
반응형

package com.example.recursive;

/*

 * 재귀(귀납) - Recursive

 * 메소드가 자기 스스로를 끊임없이 호출하는 과정을 의미한다.

 * 그것을 재귀메소드라 칭한다.

 * 

 * syntax

 * 

 * returntype methodname(){

 * methodname();

 *  

 */


public class RecursiveExample {

static void p() {

System.out.println("P has called");

p();

}


public static void main(String[] args) {

p();

}

}  

몇번돌다가 에러를 뱉을겁니다.. 재귀하면 떠오르는 StackOverFlow!!

///////////////////////////////////////////////////////////////


package com.example.recursive;



public class RecursiveExample2 {


static int factorial(int n) {

// static method

if (n == 1)

return 1;

else

return (n * factorial(n - 1));

// 2이상의 값이 들어올 경우 위 구문이 진행된다./

//그리고 n-1한 값을 다시 factorial에 넣고 돌린다.

// 그러다 n이 1이 되면 1을 리턴합니다.

// 원리는 아래와 같습니다.

// factorial(5) 

                       factorial(4) 

                             factorial(3) 

                                 factorial(2) 

                                        factorial(1) 

                                               return 1 

                                    return 2*1 = 2 

                             return 3*2 = 6 

                             return 4*6 = 24 

                       return 5*24 = 120

//return안에서 factorial메소드가 파라미터가 1이 될때까지

//돌고난 후 return을 통해 값이 출력되는데 태엽을 상상하시면 이해가

// 쉬울것같습니다.

}


public static void main(String[] args) {

System.out.println("Factorial of 5 is: " + factorial(5));


}

}

//////////////////////////////////////////////////////////////////

public class RecursiveExample3 {


static int count = 0;


static void p() {

count++;

if (count <= 9) {

System.out.println("hello " + count);

p();

}

}


public static void main(String[] args) {

p();

}

}

result = 

hello 1

hello 2

hello 3

hello 4

hello 5

hello 6

hello 7

hello 8

hello 9


//////////////////////////////////////////////////////////////////

// 파보나치 수열!

public class RecursiveExample4 {

static int n1 = 0, n2 = 1, n3 = 0;


static void printFibo(int count) {

if (count > 0) {

n3 = n1 + n2;

n1 = n2;

n2 = n3;

System.out.print(" " + n3);

printFibo(count - 1);

}

}


public static void main(String[] args) {

int count = 15;

System.out.print(n1 + " " + n2);// printing 0 and 1

printFibo(count - 2);// n-2 because 2 numbers are already printed

}

}

result = 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377




반응형
by 발전소장 에르 :) 2017. 9. 25. 17:37
반응형

package com.access.array;


/*

 * 일반적으로 배열은 연속된 메모리 위치를 가진 비슷한 타입을 가진 요소의 집합(Collection)을 의미한다.

 * 자바에서의 배열은 유사한 데이터타입의 요소를 가지고있는 객체라 얘기한다.

 * 배열을 초기화할때 정해진 범위를 늘이거나 줄일 수 없다.

 * 한마디로 한번 생성되면 고정된 크기를 가진다.

 * 

 * 배열은 인덱스를 기초로 0번부터 시작한다. 물론 갯수를 셀 떄는 1번부터 시작한다.

 * 

 * 배열의 이점:

 * -코드의 간소화, 어떤 인덱스 위치에 있는 어떤 데이타든 접근이 가능하다.

 * 

 * 배열의 단점:

 * - 제한된 크기: 위에서도 언급했다싶이 한번 초기화할때 정해진 크기를 가지며 수정은 불가하다.

 * 이 문제를 해결하기위해서 Collection FrameWork가 사용되었다.

 *

 *  -1차원 배열, 다차원 배열으로 2가지 타입의 배열이있다.

 *  

 *  1차원 배열의 구문은 이렇다.

 *  dataType[] arr; (or)  

 *  dataType []arr; (or)  

 *  dataType arr[];  

 *  

 *  초기화는 이렇게한다.

 *  arrayRefVar=new datatype[size];  

 * 

 */

public class TestArray {

public static void main(String args[]) {


int a[] = new int[5];// 배열 선억식.

a[0] = 10;// 각 인덱스에 번호를 직접 지정하여 값을 넣을 수 있다.

a[1] = 20;

a[2] = 70;

a[3] = 40;

a[4] = 50;


// 그럼 이렇게 만든 배열을 출력해보자.

for (int i = 0; i < a.length; i++)// a.lenght는 배열의 길이를 나타낸다 (중요 많이사용함)

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


int[] b = { 1, 2, 3 };

int c[] = { 3, 2, 1 };

// 하지만 간편하게 이렇게 선언할수도있다.


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

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

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

}

}

}

//////////////////////////////////////////

package com.access.array;


public class TestArray2 {


static void min(int arr[]) {

// 파리미터로 int타입 배열을 가지고있고,무엇보다 static이다.

int min = arr[0];

// 다른값들과 비교할 값이 필요함으로

// 입력으로 들어올 배열의 0번째 인덱스를 int min값에 집어넣는다.


for (int i = 1; i < arr.length; i++)

if (min > arr[i])

// 만약 min이 arr[1]보다 크면 min을 대신하고 배열의 길이만큼 반복한다.

min = arr[i];// 최종적으로 비교되 제일 낮은값이 min에 저장되게된다.

System.out.println(min);

// 프린트로 찍는다!.

}


public static void main(String args[]) {


int a[] = { 33, 3, 4, 5 };

min(a);// 이 부분 때문에 static을 선언한거라고 볼 수 있는데

// static은 최상위 우위로 로딩되기때문에 메인에서도 접근할 수가 있다.

// int a 배열을 min메소드의 파라미터로 넣는다.

// 그럼 그 값을 5번 라인으로 넘긴다.


}

}

//////////////////////////////////////////

package com.access.array;


/*  다차원 배열.

 * 매트릭스 형태로 컬럼과 로우로 구성된 배열을 일컫는다.

 * 구문은 아래와 같이 사용하여 정의할 수 있다.

 * 

 *  dataType[][] arrayRefVar; (or)  

dataType [][]arrayRefVar; (or)  

dataType arrayRefVar[][]; (or)  

dataType []arrayRefVar[];   

 *  

 *  3개의 로우와 3개의 컬럼을 가진 다차원 배열을 예로 만들어보자

 */

public class TestArray3 {


public static void main(String[] args) {


int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 },{10,11,12}};

for (int i = 0; i < 4; i++) { //칼럼의 갯수만큼 돌려주고,

for (int j = 0; j < 3; j++) { // 로우의 갯수만큼 돌려주

System.out.print(arr[i][j]+" ");

} //arr

System.out.println();

}

}


}

//////////////////////////////////////////

package com.access.array;

/*

 * java array의 클래스 이름은 무엇인가요?

 * 

 * 자바에서 배열은 객체입니다.

 * 

 */

public class TestArray4 {

public static void main(String args[]) {


int arr[] = { 4, 4, 5 };

// 배열을 하나 생성해주고,


Class c = arr.getClass();

// 클래스 타입 변수 c에 .getClass()메소드를 이용해서 리턴값인 클래스를 넣어주고, 

String name = c.getName(); 

// c의 이름을 가져와 스트링 변수에 담아서 출력하면,

System.out.println(arr); 

// 그냥 arr을 찍으면 저장된 주소값이 출력됩니다.

System.out.println(c);

System.out.println(name);

// int arr[]의 클래스이름을 알아낼수있답니다.

}

}

//////////////////////////////////////////

package com.access.array;


/*

 * 배열복사하기.

 * System class의 arraycopy 메소드를 이용해서, 배열을 복사할수있다.!

 * arraycopy메소드의 구문은 아래와 같은데, 

 * 

 * public static void arraycopy(  

Object src, int srcPos,Object dest, int destPos, int length  

)   

꼭 메소드를 통해서만 복사가 가능한걸까?

 */

public class TestArrayCopyDemo {

public static void main(String[] args) {

char[] copyForm = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'd' };

// 문자열 타입 배열을 만들고 안에 값을 집어넣느다.

char[] copyTo = new char[7];

// 그리고 복제가 될 배열 하나를 만든다.


System.arraycopy(copyForm, 2, copyTo, 0, 7);

// System의 메소드인 arraycopy를 타이핑 후 적절히 파라미터를 준다.

/*

* @param src 소스를 줄 배열

* 

* @param srcPos 소스 배열에서 복제하기 시작할 인덱스 번호

* 

* @param dest 소스를 받게 될 배

* 

* @param destPos 몇번인덱스에서부터 소스를 받을 것인가.

* 

* @param length destPos에서부터 얼마만큼 길이의 데이터를 받을 것인가.

* 

*/

System.out.println(copyTo);


int[] a = { 1, 2, 3 };

int[] b = a;

char[] c = { 'a', 'b', 'c' };

char[] d = c;


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

System.out.print(a[e]);

System.out.print(b[e]);

}

System.out.println();

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

System.out.print(c[e]);

System.out.print(d[e]);

}

}

}

//////////////////////////////////////////

package com.access.array;


/*

 *  다른 두 배열을 더할 수도 있을까?

 *  복제를 보아하니, 왠지 가능할거같다. 

 *  

 */

class TestArray5 {

public static void main(String args[]) {

// 일단 재료가 될 두 행렬을 생성해주자.

int a[][] = { { 1, 3, 4 }, { 3, 4, 5 } };

int b[][] = { { 1, 3, 4 }, { 3, 4, 5 } };

// 2, 6, 8 6, 8, 10이 되어야한다.


// 두 배열의 합을 저장할 배열을 만들어주자.

int c[][] = new int[2][3];


// 그리고는 반복문을 통해 두 배열을 c로 집어넣어주자.

for (int i = 0; i < 2; i++) {

for (int j = 0; j < 3; j++) {

c[i][j] = a[i][j] + b[i][j];

System.out.print(c[i][j] + " ");

}

System.out.println();// new line

// 딱히 설명할게 없다.

}

}

}




반응형
by 발전소장 에르 :) 2017. 9. 25. 00:30
| 1 |