'자바'에 해당되는 글 28건

  1. 2009.03.24 배열 선언, 복사
  2. 2009.03.16 클래스 기초
  3. 2009.03.16 데이터 타입
  4. 2009.03.12 병합정렬 (Merge Sort)
  5. 2009.03.12 삽입정렬 (Insertion Sort)
  6. 2009.03.05 키보드 입력 - 문자열, 숫자
  7. 2009.03.05 소수점 표시
  8. 2009.03.05 배열 선언
Programming/JAVA2009.03.24 15:35

 자바에서의 배열 선언은 C와는 조금 다르다. C에서는

int num[10];
int num2[]={1,2,3};


이런식으로 하였다면 자바는

int[] num = new int[10];
int[] num2 = new int[]{1,2,3};
int[] num3 = {1,2,3};


이렇게 3가지 방법이 있다. 2,3 번째는 초기화를 같이 해주는 것이다.

자바와 C의 배열의 다른점은 자바에서는 배열을 만들고 메모리를 할당해 줘야 한다는건데
int, float등 기본 데이터형은 자동으로 메모리가 할당되지만 객체인 경우는 그렇지 않다. 그래서 직접 할당을 해줘야 한다. 안그러면 NULL값이 있게 된다.

Person[] yoon = new Peson[10];

이렇게 한다고 배열에 메모리가 할당되지 않는다. 값을 출력해보면 NULL 값이 나올것이다.

yoon[0] = new Person();
yoon[1] = new Person("26");
yoon[2] = new Person("초보프로그래머","26");


이런식의 새로운 메모리 할당이 필요하다. 그럼 배열의 각값이 객체가 되는것이다. 중요한것은 기본데이터형은 이렇게 따로 해줄 필요가 없다는것이다. 기본데이터형은 선언하고 그냥 쓰면된다.

배열을 복사하는 방법에는 2가지가 있다. arraycopy()와 clone()메소드를 사용하는 것이다.

  • public static void arraycopy(Object src, int src_position, Object dst, int dst_position, int length)
    src : 원본 배열
    src_position : 원본 배열의 시작 위치
    dst :  복사할 배열
    dst_position :  복사할 배열의 시작 위치
    length : 복사할 개수
  • int[] target = (int[])num.clone();
    clone()는 array객체의 메소드이다.
    clone()는 object를 리턴하므로 꼭 다운캐스팅을 해줘야한다. (int[])를 해주므로써 원래 데이터형으로 들어가게 한다.

이게 배열 선언, 복사에 관한 짧은 내용입니다.


Posted by 초프(초보 프로그래머)
Programming/JAVA2009.03.16 21:33

 클래스 = 구조체 + 함수

클래스를 간단하게 말하자면 저렇게도 말할수있지 않을까 한다. 클래스는 객체이고 객체지향이며 생성자, 소멸자를 포함하고 있으...... 물론 그렇지만 간단하게 얘기하자면 저렇다는 것이다.

클래스에는 구조체처럼 여러타입의 여러개의 변수를 클래스라는 범위안에 넣을수 있다. 그리고 그안에 있는 변수를 자유롭게 접근할수 있는 클래스안의 함수를 매소드(method)라고 한다.

public class Dog{
     public int age;

     public int getAge(){
          return age;
     }
}


위는 아주 간단한 클래스이다. Dog 라는 이름의 클래스이며 int형의 age라는 변수가 있으며 getAge() 라는 메소드가 포함되어있다. getAge는 단순히 age를 리턴하는 메소드이다. 

저 Dog클래스를 사용하기 위해서 다음과 같이 해야한다.
Dog abc = new Dog();

Dog abc는 Dog라는 데이터형의 abc라는 변수를 만든것 뿐이다. 이상태로는 사용할수 없다. 메모리를 생성해줘야 한다.
new Dog()는 Dog를 사용할수있는 메모리를 만들어준다. 이렇게 생성된것을 인스턴스라고 한다.

abc.age = 10;

이와 같이 해주면 age가 10으로 설정된다. 이것은 구조체와 같은 형식이다.
메소드 호출도 위와 비슷하다.

System.out.println(abc.getAge());

이렇게 하면 10 이 콘솔에 출력된다. abc안의 getAge()를 호출하는것이다. getAge()는 같은 클래스에 있는 age변수를 마음대로 사용할수가 있다.

너무 간단하게 이상한 설명만 한것 같지만 이게 알아야할 기본인것 같다. 접근제어, 생성자, 소멸자, 상속, 인터페이스등의 개념이 있지만 이건 기본이라고 보기 힘들지 않을까 -_-;

Posted by 초프(초보 프로그래머)
Programming/JAVA2009.03.16 20:42
※ 기본 데이터 타입
   정수형  실수형  불형
 1 byte  byte    boolean
 2 byte  short, char    
 4 byte  int  float  
 8 byte  long  double  

※ 애매할수 있는 데이터를 표현하는 방법
  • 10 : int
  • 10L, 10l : long
  • 3.14 : double
  • 3.14F, 3.14f : float
  • 3.14D, 3.14d : double
  • 'A' : char
  • "ABC" : String
  • 0xA : 16진수 (앞에 0x 를 붙인다)
  • 0123 : 8진수 (앞에 0을 붙인다)

 

Posted by 초프(초보 프로그래머)
Programming2009.03.12 20:10


테스트 파일은 삽입정렬과 같지만 인스턴스생성해주는 부분만 바뀌었습니다.

두 조각으로 계속 나누다가 마지막에 하나가 남으면 다시 위로 병합하면서 정렬하는 병합정렬

이번에는 삽입정렬과는 다르게 생성자를 따로 만들지 않았다.
정렬할때 매개변수로 바로 입력값을 넣게 하였다.
실제로 사용자가 쓸수 있는 메소드는 단 하나 sort 메소드



테스트는 수업시간에 나온 예제 숫자입니다. 삽입정렬과 같은 숫자네;;

9 1 3 2 7 5 4 8  <-- 입력값
1 2 3 4 5 7 8 9  <-- 정렬후

Posted by 초프(초보 프로그래머)
Programming2009.03.12 19:35

 


오늘 배운 삽입정렬이다.

InsertionSort.class 가 삽입정렬 클래스 입니다.
sort_test.class 는 정렬 테스트를 위한 메인함수가 있는 클래스 입니다.

다른 정렬도 배우는 대로 추가할까 합니다.

멤버변수 data는 배열인데... 오타네요;; int data[] 이게 맞아요;

생성자와 정렬메소드를 제외하고는 외부에서 쓸필요가 없으므로 private로 접근제한 하였습니다.
생성자 함수로 정렬할 배열값을 입력하고 sort() 메소드를 호출하므로써 모든 과정이 끝납니다. sort() 는 정렬된 배열을 리턴합니다.


수업시간에 예제로 나온 숫자들로 테스트 하였습니다. 다른 숫자는 테스트안해봐서... 정확성을 뭐라 말할 수가 없네요;;

9 1 3 2 7 5 4 8  <--- 입력값 
1 2 3 4 5 7 8 9  <--- 정렬후

Posted by 초프(초보 프로그래머)
Programming/JAVA2009.03.05 02:14
키보드로 입력받는 방법이다.

System.in.read(); 이걸로 가능할줄 알았다.. 이건 한문자 밖에 안되더라;;;;

이걸 프로그램 다 완성하고 알았다...;;

그래서 찾은것이 다음과 같이 버퍼, 스트림 객체를 사용하는것이다.

String data = null;
BufferedReader inBuff = new BufferedReader(new InputStreamReader(System.in));
data = inBuff.readLine();


이렇게 읽으면 결과가 data안에 문자열로 저장된다.

문자열로 쓰고싶으면 그대로 쓰면되고...

숫자로 쓰고싶으면

data = Integer.parseInt(inBuff.readLine());

이렇게 바꿔주면 된다.

어떻게 동작되는지도 모르고 막 썼다 -_-;

자세한건 다음에.... ㅋㅋㅋ
Posted by 초프(초보 프로그래머)
Programming/JAVA2009.03.05 02:08

float형에서 System.out.print 로 출력할 경우 소수점아래가 꽤 많이 나온다.

이걸 줄이는 방법이 다음과 같다.

import java.text.NumberFormat;

이건 c의 include랑 비슷한것임

실행코드는 아래와 같음

NumberFormat nf = NumberFormat.getInstance();   // 객체 인스턴스생성
nf.setMaximumFractionDigits(1);    // 최대 소수점 자리수
nf.setMinimumFractionDigits(1);     // 최소 소수점 자리수
System.out.print(nf.format(std[0].getAverage()));      // 위에 설정한 소수점 포맷으로 적용해서 출력


처음에 이걸 검색해서 찾았는데도.. 잘못썼었다.

nf.setMinimumFractionDigits(std[0].getAverage());

이렇게 하면 소수점 포맷이 바뀔줄 알았던것이다 -_-;;

Posted by 초프(초보 프로그래머)
Programming/JAVA2009.03.05 02:02
오늘 처음으로 자바로 뭔가를 만들어 봤음;;

만들다가 조금 힘들었던 부분중 하나가 배열 ㅋㅋ

int[] a = new int[10];

a라는 이름으로 크기가 10인 배열을 선언하는 문장이다.

다른 타입도 똑같이 해주면 된다.

이건 금방 찾아서 했는데... 문제는 객체 배열이었다..

객체도 위와 같은 방법으로

student[] std = new student[10];

이렇게 하면 컴파일시 아무 문제도 없다.

하지만... 사용할때 std[1].name = "ABC"; 이렇게 할경우에도 컴파일시 아무 문제가 없다.

실행하면... 오류가 뜬다.. NULL 어쩌고 저쩌고 하는건데...

이것 때문에 엄청 헤맸다;; 결론은 std에 student 공간만 10개 만들었지.. 메모리(?)가 할당안된거 같다

해결방법은 사용전에

for(i=0;i<10;i++)
{
     std[i] = new student();
}


이렇게 하나씩 다 해줘야 한다;
Posted by 초프(초보 프로그래머)