간단 용어 정리.. Java 2011. 12. 19. 19:32

1. 인터페이스와 추상클래스

- 인터페이스
객체생성x
추상 메소드 만을 가짐 : 선언o 정의x
다중상속 지원(,구분)
개발시간 단축, 표준화 가능, 관계 없는 클래스들의 중개, 독립적 프로그래밍

- 추상클래스
객체생성x
구현된 메소드와 멤버변수 : 선언o 정의x
클래스와 메소드에서만 사용 가능
추상 클래스를 상속 받은 하위 클래스는 추상 메소드를 오버라이딩


2. MVC1 / MVC2

MVC : Graphical User Interface를 사용할 때, Model 계층과 View 계층 사이에 Control 계층을 만들어서 사용하는 것

- MVC1
개발시간 단축되나 html, javascript, jsp 로직이 한페이지에 쓰여 유지보수 어려움
디자이너와 개발자간의 충돌 야기

- MVC2
로직과 프리젠테이션의 분리로 유지보수와 확장 용이, 디자이너와 개발자간의 책임소재 명확
MVC구조에 대한 개발자의 이해 필요, 개발기간 증가


3. 프레임워크

어플리케이션 작성을 위한 '틀'
재사용 가능, 유지보수 용이한 프로그램 제작,
하위클래스/어플리케이션에 의해 직접 호출되어 상호 작용하는 클래스들의 집합


4. request / response

- request : 클라이언트의 요청 Parameter 읽어오기

- response : 응답 결과 클라이언트에게 전송하기


5. 서블릿의 라이프 사이클

- init() : 로딩(객체생성)시 단 한번 호출

- service() : 요청시마다 반복적으로 호출

- destroy() : 더이상 서비스를 하지 않을 때 메모리에서 제거(GC)



6. JDK 1.4, 5.0, 6.0의 차이점

- 향상된 for() 문 : 기존의 for문에서 for(String str : data) 식의 형식 가능

- Generics 기능 추가 : 컬렉션클래스에 형을 지정함으로 실행시 캐스팅 불필요

- AutoBoxing : 기본자료형(int, double..)에서 그 기본형의 랩퍼 클래스로의 변환 용이



7. Set, Map, List에 대하여 설명

- Set 인터페이스 : 중복이 없는 집합 객체 (Collection)

- List 인터페이스
순서가 있는 집합 객체, 중복허용, 상송받는 클래스중 가장 많이 사용하는 것은 Vector (Collection)

- Map 인터페이스 : 중복이 없는 하나의 키값에 대응하는 하나의 값을 갖는 자료구조


'Java' 카테고리의 다른 글

간단 용어 정리..  (0) 2011.12.19
문제...자바..  (0) 2011.11.06
Java_09  (0) 2011.11.03
Java_08  (0) 2011.11.02
Java_07  (0) 2011.11.01
Java_06  (0) 2011.10.31
문제...자바.. Java 2011. 11. 6. 19:46

뭐가 뭔지..ㅋㅋ

'Java' 카테고리의 다른 글

간단 용어 정리..  (0) 2011.12.19
문제...자바..  (0) 2011.11.06
Java_09  (0) 2011.11.03
Java_08  (0) 2011.11.02
Java_07  (0) 2011.11.01
Java_06  (0) 2011.10.31
Java_09 Java 2011. 11. 3. 17:19

* 상속

- 이미 작성되어진 클래스를 그대로 물려받고 필요부분을 수정해서 새로운 클래스로 만드는 것

 



- 클래스에서는 다중 상속이 지원 안된다
  · 두개이상은 안된다. 반드시 1개만 상속 가능하다
  · C언어는 된다 ;ㅅ;



* 접근제어자
  · private : 클래스내에서만 접근가능 (하위클래스도 접근불가)
  · protected : 동일패키지, 하위클래스에서 접근가능(하위클래스는 패키지가 달라도 접근가능)
  · public : 어디에서나 접근 가능
  · default (명시하지 않는 경우, friendly) : 동일 패키지만 접근가능(하위 클래스도 동일패키지가 아니면 접근 불가능)
  · 접근우선순위 : public > protected > default > private


* Override 

주석은 컴파일 하면 사라지지만 컴파일해도 사라지지 않는 메타정보
재정의를 뜻하며 이런 것을 다형성이라 한다.
부모 클래스 메소드를 사용하되 기존의 메소드에 수정사항이 필요하여 다시 정의 한다 보면 된다.
오버라이딩(Overriding)에는 반드시 상속관계가 있고, 접근제어는 크기가 같아야 하며 메소드원형, 이름,
인수는 같아야 한다.
@Override로 표기하며 생략해도 되지만 재정의라는 것을 알리기 위함으로 표시 된다.

ex)
class A_class {
         :
public void print() { }
}
class B_class extends A_class {
         :
public void print() { } // 재 정의(Overriding) : 상위 클래스의 메소드를 재정의
public int print(int a){ } // 중복 정의(상위 클래스의 메소드와는 무관)
public int print() { } // 오류
}


- 개념정리 *-(파일첨부)
 

[중간 소스 생략 Demo:super / Exam:sub]
class Exam extends Demo{.....
[중간 소스 생략]
Exam ob1=new Exam();  // 하위 클래스(Exam)안에 변수에 메모리를 할당하고 ob1에 대입

ob1.write();  // 부모클래스와 하위클래스 모두 갖고 있는 메소드: 하위클래스 값 우선
ob1.print();  // 부모클래스에만 있는 메소드: 부모클래스 값 우선
ob1.output();  // 하위클래스에만 있는 메소드: 하위클래스 값 우선
// 하위클래스에서 하위클래스 값만 호출할 때 변수를 부모클래스의 값으로 대입하여 부모클래스의 값을
// 넣을 수도 있다. ex) System.out.printf("sub output : %d %d %d %d\n", a,b,c,super.b);

System.out.print("ob1.b:"+ob1.b);  // 변수 접근
// b의 값은 부모에도 있는 값 : 하위클래스에도 초기화된 값이 있다면 하위클래스 값 우선

ob1.a=50;  // 자식은 부모의 protected값에 접근 가능 : a를 가리키고 있던 값은 부모클래스 뿐이었으므로
// 방은 1개 → a의 값 자체를 바꾸지만 주소값은 같다.
ob1.write();  // 위와 같이 하위클래스 값 우선이나 a의 값만 50으로 초기화 된 값 출력
ob1.print();  // 상동
ob1.output();  // 상동


- 개념정리 *-업캐스팅 : 부모클래스의 객체는 자식클래스의 객체를 가리킬 수 있다.
메소드 주소값만 가져오고 사용은 부모속성
업 캐스팅 시 캐스팅 소스 생략 가능

Demo ob2=ob1;  // Demo ob2=(Demo)ob1;
// ob1(하위클래스 Exam)의 값을 부모클래스인 Demo가 가리키며 ob2에 그 값을 저장
ob2.write();  // 둘다 있는 메소드: 자식의 메소드를 호출하지만 위에서 a의 값을 바꿨고 자식클래스에
// 가보니 b값도 200으로 초기화 되어 있고 c값은 자식 또한 부모의 값을 쓰고 있으므로 c의 값은 자신의 값
ob2.print();  // 부모클래스만 있는 메소드 : 위에서 바꾼 a값만 따르고 나머지는 부모자신의 값
// ob2.output(); // 자식만 있는 메소드 : 컴파일오류(상위클래스에서는 하위클래스의 멤버 접근불가)
System.out.println("ob2.b:"+ob2.b);  // 변수 접근
// 메소드와 다르게 super클래스의 멤버 접근. 하위클래스 멤버 접근이 불가여서...?


- 개념정리 *-다운캐스팅 : 업클래스 후 다시 원래의 값으로 돌아올 때 사용
반드시 캐스팅 소스를 붙여야 한다.

Exam ob3=(Exam)ob2; // 업캐스팅에서 (형)을 생략 가능했던 것과는 상반
// 자식클래스가 부모클래스를 가리키고 있는 ob2의 형변환을 한고 그것을 ob3에 대입
ob3.write(); // 둘다 있는 메소드 : 부모의 메소드ob2를 호출하지만 ob2는 ob1을 가리키고 있으므로
// 원래의 값인 자식클래스의 값이 되지만 a의 값은 위에서 재 초기화한 값50이 들어가고 b값도
// 재 초기화한 값200이 들어간다
ob3.print();  // 부모만 있는 메소드 : 위처럼 본래의 값으로..
ob3.output(); // 자식만 있는 메소드 : 상동
System.out.println("ob3.b:"+ob3.b);
// 원래의 b값 출력


- 개념정리 *-런타임 오류, 부모가 있다 해서 꼭 자식이 있는 법은 아니다. 메모리 할당 문제...

Demo dd=new Demo();
Exam ee=(Exam)dd;
  // 이부분은 아직도 좀 이해가 안감 @_ @a


* 인스턴스 변수(&메소드)와 클래스 변수(&메소드)의 접근(==호출?)

- 인스턴스 변수 호출 → 호출예가 뭐가 있을까요......ㅡ.ㅡa
  · 객체를 생성해야 접근가능 → ex) Test ob=new Test
  · heap메모리 할당
ex) public int a=10;

- 클래스 변수 호출 → System.out.println("b:"+Ex.b);
  · 언제든지 접근 가능
  · static메모리 할당(정점영역)
  · 클래스가 로딩되는 순간 메소드 영역에 메모리 확보(한번만)
  · 객체를 생성하지 않고 바로 접근하여 사용 가능
  · static이 들어간건 클래스변수
ex) public static int b=20;

- 인스턴스 메소드 호출 → ob=new Ex();  ob.write();
  · 객체를 생성해야 접근 가능
ex) public void write(){ }

- 클래스 메소드 호출 → Ex.print();
  · 객체를 생성하지 않아도 접근 가능
public static void print(){ }


* 용어 정리
- final
  · 메소드에 final이 붙으면 override(재정의)를 할 수 없다.
    ex) public final int a=10;  public final b;  public static final int c=20;

- final : 프로퍼티에서 final을 붙이면 단한번만 초기화가 가능하며 초기화 이후에는 값을 변경할 수 없다.

- super() : 부모클래스 생성자 호출, 실행문보다 먼저 위치해야 한다.
   인자가 있는 생성자 호출시 괄호안에 인자를 넣어주고 없을시 생략가능하다.

- extends : 부모클래스와의 상속을 맺는 키워드(하위클래스에서 사용)
   class 클래스이름 extends 상위클래스이름

- equals
  · Object equals 메소드는 주소 비교 : 이 메소드를 재정의 하여 사용할 수 있다.
                                               :
- instanceof 관계연산자
추후 내용 추가.. 현재 머리에 없음..

- static
추후 내용 추가.. 현재 머리에 없음..

- Singleton
추후 내용 추가.. 현재 머리에 없음..

- Object 클래스
이것도...= _ =

- GC 가비지컬렉터.. 

- 초기화 블럭..

- 비정형인자..

'Java' 카테고리의 다른 글

간단 용어 정리..  (0) 2011.12.19
문제...자바..  (0) 2011.11.06
Java_09  (0) 2011.11.03
Java_08  (0) 2011.11.02
Java_07  (0) 2011.11.01
Java_06  (0) 2011.10.31
Java_08 Java 2011. 11. 2. 23:46
달력만들기와 로또 번호 생성기..

달력만들기는 다른분들 것 보고 참고하여 완성(?) 하였으나
로또 번호 생성기는 보고 하려 해도 뭔가 굉장히 복잡하네요 -.-a

일단 업로드(..........)

아직 개념자체가 덜 잡힌듯 ㅠ_ㅠ

Ex1Cal.java : 달력 메인
Calendarrrr.java : 달력 클래스
Ex2Lot.java : 로또 메인
Lotto.java : 로또 클래스


 



아아.. (끄덕끄덕)
자 그럼 해보세요
...............멍

어서 탈출해야 할텐데 말이죠;;
 

'Java' 카테고리의 다른 글

문제...자바..  (0) 2011.11.06
Java_09  (0) 2011.11.03
Java_08  (0) 2011.11.02
Java_07  (0) 2011.11.01
Java_06  (0) 2011.10.31
Java_05  (0) 2011.10.29
Java_07 Java 2011. 11. 1. 17:19

* class (클래스) - 개념 잡기


① : Ex클래스내에 인스턴스 변수의 num1,num2값을 e1이 가르키도록 주소값을 담아 메모리를 할당한다(e2에도 동일)

② : *A의 set()이라는 메소드를 호출하여 10과 5를 전달

*A : ②에서 받은 10,5의 값을 num1, num2에 대입하고 값을 반환 하지 않고 내부의 *B의 변수에 저장

③ : e1(Ex클래스)내에 add()라는 메소드를 호출하여 정수형 변수 a1에 대입한다

*C : ③의 호출을 받고 명령문을 실행하려 보니 ②로 인해 생성된 num1과 num2의 값(10,5)을 갖게 되어 정수형 a변수의 값은 15가 되고
return a; 그 값을 호출한 곳으로 반환한다.

④ : ③의 *C에서 반환된 15라는 값을 출력

⑤ : (②와 같음) *A의 set()이라는 메소드를 호출하여 20과 30을 전달

*A : ⑤에서 받은 20,30의 값을 num1, num2에 대입하고 값을 반환 하지 않고 내부의 *B의 변수에 저장      

⑥ : (③과 같음) e2(Ex클래스)내에 add()라는 메소드를 호출하여 정수형 변수 a2에 대입한다.

*C : ⑥의 호출을 받고 명령문을 실행하려 보니 ⑤로 인해 생성된 num1과 num2의 값(20, 30)을 갖게 되어 정수형 a변수의 값은 50이 되고 return a; 그 값을 호출한 곳으로 반환한다.

⑦ : (④와 같음) ⑥의 *C에서 반환된 50이라는 값을 출력



'Java' 카테고리의 다른 글

Java_09  (0) 2011.11.03
Java_08  (0) 2011.11.02
Java_07  (0) 2011.11.01
Java_06  (0) 2011.10.31
Java_05  (0) 2011.10.29
Java_04  (0) 2011.10.27
Java_06 Java 2011. 10. 31. 22:50

                                        >> 자바 테스트 <<

※ 주의 : 프로그램 실행 결과가 오류가 발생할 경우 컴파일 오류인지, 런 타임 오류인지를 기술할 것

이름 :

1. 자바의 기본 자료 형(primitive Type) 8가지와 각 자료형의 byte 수를 쓰시오.

  boolean(1byte) : true값과 false값만 출력
  byte(1byte) 
  char(2byte) : 유니코드 문자 한글자당 2byte
  short(2byte)
  int(4byte) : 정수형
  long(8byte) : 정수형
  float(4byte) : 실수형
  double(8byte) : 실수형

2. 다음중 식별자(Identifier)로 사용 할 수 있는 것을 모두 고르시오.
   name, #name, _tel, 주소, float, $age, ~age

name : O 첫글자 유니코드자바레터(알파벳,_,$)
#name : X 특수문자 불가능
_tel : O 언더바 가능
주소 : O 각국 언어 가능
float : O 실수형태의 기본자료형
$age : O 첫글자 유니코드자바레터(알파벳,_,$)
~age : X 특수문자 불가능

3. 다음 프로그램은 하나의 문자를 입력 받아 ASCII 코드를 출력 하는 프로그램이다.
잘못된 부분을 수정하시오.
public class Test {
 public static void main(String[] args) throws java.io.IOException {
  char ch;

  System.out.print("한문자 ? ");
  ch = System.in.read();

  System.out.println("%c : %d\n", ch, ch);
 }
}

public class Test {
 public static void main(String[] args) throws java.io.IOException {
  int ch; // 정수형태로 입력받으므로 int형 변수 선언

  System.out.print("한문자 ? ");
  ch = System.in.read(); // 한문자를 입력받아 아스키코드(정수)로 입력받으므로..

  System.out.printf("%c : %d\n", ch, ch);
  // %c, %d 같은 서식문자를 출력하기 위해 printf로 변경
 }
}

4. 다음 프로그램의 실행 결과는 ?
public class Test {
 public static void main(String[] args) {
     byte a=10, b=5, c;

     c=a+b;
     System.out.println(c);
 }
}

byte형으로 정수 선언시 overflow(값이 넘침)를 미리 감지하여
컴파일 error

아래와 같이 int형으로 변수 선언시 정상 출력되어 값은 15 가 출력됨

public class Test {
 public static void main(String[] args) {
     int a=10, b=5, c;

     c=a+b;
     System.out.println(c);
 }
}

5. 다음 코드의 출력 결과는 ?
 int []x= {1, 2, 3, 4, 5};
 int y[] =x;
 System.out.println(y[2]);

결과는 3이다.
배열은 첫번째 인자가 0부터 시작되므로 y[2]는 3번째 값을 가르킨다.

6.  다음 실행 결과는 ?
String str="420";
str+=42;
System.out.println(str);

"420"은 Stirng으로 문자열으로 입력되었고
str+=42는 str에 저장된 값에 정수 42를 더한 것이므로 둘은 그냥 이어져 붙을 뿐
연산이 이루어 지지 않는다. 결과는 42042 이다.

7. 다음 실행 결과는 ?
public class Test {
   public static void main(String[] args) {
     for (int i=0; i<=10; i++){
        if( i>6) break;
     }
     System.out.println(i);
   }
}
컴파일 에러 : for문 안에서 선언된 변수는 외부에서 사용 불가하다.
i값이 6보다 클 때 for문을 빠져나와 i값은 사용할 수 없는 변수가 된다.

8. 다음 실행 결과는 ?
int a=0, s=0;
while(a++ <= 9) {
    s+=a;
}
System.out.println("a:"+a+", s:"+s);

결과는 a:11, s:55 이다.
a++ <= 9 일때 관계연산자보다 증감연산자가 우선순위가 높아
a가 반복문에 의해 1씩 증가되어 돌아올 때 a가 9일때 비교하고 참이므로
10이 되어 내려가서 그 값을 s에 누적하고 다시 올라와서 증가되어 11이 되고
비교하면 거짓이므로 while반복문을 빠져나와 a는 11을 출력하게 되고
b는 1부터 a가 10일 때까지의 값을 합하여 누적하고 a가 11일 땐 이미 a가
반복문을 빠져나간 뒤 이므로 55가 된다.

9. 다음의 실행 결과는 ?
System.out.printf("%.2f\n", 123.236);

답은 : 123.24
%.2f 실수형태의 서식문자 이며 소수점 둘째짜리까지만 표시하고 그 뒷자리는
반올림

10. 다음은 이름, 국어, 영어 점수를 입력 받아 총점을 구하는 프로그램입니다.
[   ]를 채우세요.
import java.io.*;

public class BufferedReaderTest {
    public static void main(String[] args) throws IOException {
        String name;
        int kor, eng, tot;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("이름 ? ");
        name = br.readLine(); // 엔터치기 전까지 한줄 입력받기

        System.out.print("국어 ? ");
        kor = Integer.parseInt(br.readLine()); // parseInt:문자열을 정수형태로 변환
        System.out.print("영어 ? ");
        eng = Integer.parseInt(br.readLine());
        tot = kor + eng;

        System.out.printf("이름: %s, 총점: %d\n", name, tot);
    }
}

11. 다음의 실행 결과는 ?
int a = 12 & 6;
System.out.println(a);

12는 2진수로 1100 이고 6은 0110 이다.
논리곱은 값이 서로 참(1)일 때만 참..
1100
0110    → 0100 으로 결과는 4


12. 다음의 실행 결과는 ?
int a = 12 ^ 6;
System.out.println(a);

XOR : ^ 는 각 항의 값이 0과 1일 때 (즉 서로 다른 값일 때 참)
1100
0110    → 1010 으로 결과는 10

13. 다음의 실행 결과는 ?
int a = 32 >> 3;
System.out.println(a);

>> 는 오른쪽으로 이동하고 남은 자리는 부호로 채우므로
32 = 2진수로 100000 이고 오른쪽으로 3칸 이동하고 양수 이므로
부호는 0이고 000100 이 된다. 이것을 10진수로 바꾸면 4 다. 

14. 1~100까지의 3의 배수의 합를 구하는 프로그램입니다. [   ]를 채우세요.
int s=0, n=0; // 변수 선언 및 초기화
for(n=0; n<100; n+=3) { // 1~100까지 n은 3씩 증가하고
   s+=n;  // 그 증가값을 s에 누적
}
System.out.println("결과 : " + s);

15. 1~100까지의 홀수의 합를 구하는 프로그램을 작성 하시오.

 public class Test {
  public static void main(String[] args) {
   
 int s=0, n=0;
 for(n=1; n<100; n+=2) { // 1에서 2씩 증가하므로 1,3,5,7...
    s+=n;  // 그 증가값을 s에 누적
 }
 System.out.println("결과 : " + s);
  }
 }

16. 다음 실행 결과는 ?
int x =5;
boolean b1 = true;
boolean b2 = false;

if((x==4) && !b2) // false의 값이므로
  System.out.print("1 "); //1은 출력하지 않고 if문을 빠져나와
System.out.print("2 "); // 2를 출력하고
if ((b2 = true) && b1) // b2값을 무조건 참이 되도록 만들고 b1값도 참이므로
  System.out.print("3 "); // 3을 출력한다.

답은 2 3

17. 다음 실행 결과는 ?
int x = 0;
int y = 10;
do {  // 무조건 한번은 반복하므로
   y--;  // y값은 9가 되고 (후위 감소)
   ++x;  // x값은 1이 되고 (전위 증가)
}while(x < 5); // x가 5보다 작을 때까지 반복이니 총 4회 반복하고 5회때 반복문을 빠져나온다. 
System.out.print(x + "," + y); // y값은 4회 반복으로 5가 되고 x값은 전위 증가로 5가 되고
// 5가 된 값이 5보다 작다는 말은 거짓이므로 반복문을 빠져나와
x=5, y=5 가 되어 결과는 5,5

18. 다음 실행 결과는 ?
int x=12;
while (x < 10) { // 조건이 false 이므로 반복문을 빠져나와
    x--;
}
System.out.print(x); // 초기값인 12를 출력한다.
답은 12

19. 다음의 출력 결과를 출력 하는 프로그램을 작성하시오.
       *
     ***
   *****
 *******
public class Test{
public static void main(String[] args){
int i,j;
for(i=1; i<=4; i++){ // 4행 출력
    for(j=1; j<=4-i; j++){ // 공백 출력 3,2,1,0
        System.out.print(" "); // 공백 한칸 
    }
    for(j=1; j<=i*2-1; j++){ // j<=i 일때 오른쪽이 직선, *이 삼각형 모양으로 되기 위해
        // 1, 3, 5, 7, 9.. 식으로 가려면 i값은 1,2,3,4,5.. 식이므로 1,3,5,7,9..가 되기 위한
        // 조건식을 찾으라는 말, 1*2-1=1, 2*2-1=3....
       System.out.print("*");
    }
    System.out.println();
}
}
}

20. 콘솔창에서 Test.java 파일을 컴파일하고 실행하는 방법은 ?
컴파일 : cmd> javac Test.java
실행 : cmd> java Test

설명은 아마도, 필요 없을듯?! 

------------------------------------------------------------------------------

* 객체 지향이란??

현실 세계는 객체(존재하는 모든 것)들의 집합이며 그 모든 것은 상태와 행동의
객체로 표현된다.

그 객체들을 인간이 이해하는 방식으로 프로그래밍화 시켜 시스템에 적용시키고자
하는 것을 객체 지향이라 한다.

객체(object)/클래스(class)/메시지(message)를 기본모형으로 하며
하나의 대상에 대해 일반적인 구성, 상태, 동작 등에 대해 기술하는 작업을 추상화
하는 그 대상을 객체라고 하고 객체라는 개념은 그 객체의 성질이나 특징을 나타내는
데이터로 이루어진 부분과 동작, 행동을 나타내는 부분으로 기술되어 진 것이다.

클래스란??
객체라는 개념을 일반화 시킨 것.
비슷한 부류의 객체를 분류한 것
그런 객체 부류의 추상화된 관념

클래스를 왜 쓰나?
재사용성이 가장 큰 이유?

클래스는 어떻게 작성하는가?
1. 추상화
   상태
   행동
2. 클래스 작성
3. 객체 생성 및 호출

......도통 무슨 말인지 이해가 가지 않지만 일단 정리해두고 추후 수정..;;

'Java' 카테고리의 다른 글

Java_08  (0) 2011.11.02
Java_07  (0) 2011.11.01
Java_06  (0) 2011.10.31
Java_05  (0) 2011.10.29
Java_04  (0) 2011.10.27
Java_03  (0) 2011.10.26
Java_05 Java 2011. 10. 29. 16:09

* 배열 : 동일한 자료형의 다수의 데이터를 저장하고 처리하는 경우 유용하게 사용된다.

- 초기에 방의 갯수를 설정 후 변경할 수 없다. (변경하려면 프로그램을 재작성해야 함)

- 형식
  int month[5]={1, 2, 3, 4, 5};
  정수형으로 5개의 방(length=5)을 가지고 있는 month라는 변수명의 배열을 선언하고 각각의 방의 데이터의 값에
  접근하기 위해서는 해당 값의 인덱스값을 알아야 하는데 다음과 같다.
  month[0], month[1], month[2], month[3], month[4] 으로 0부터 4까지의 5개의 위치정보를 명시하는
  인덱스값이 있다.
  month[]={1, 2, 3, 4, 5}; 식으로 배열의 길이를 표시하지 않아도 자동으로 그 길이를 인식한다.

- 예제: 만년 달력 만들기
  2월의 날수 29일 조건 : 년도가 4의 배수이고 100의 배수가 아니거나 400의 배수
  · 1월:31,  2월:28,  3월:31,  4월:30,  5월:31,  6월:30,  7월:31,  8월:31,  9월:30, 10월:31, 11월:30, 12월:31
    y%4==0&&y%100!=0||y%400==0   



- Selection Sort

배열의 값 중 가장 작은 값을 찾아 i[0] 번째의 값과 위치를 바꾸고
i[0]번째의 값을 제외한 나머지 값들 중 가장 작은 값을 찾아 i[1]번째 값과 위치를 바꾸고..
i[0]번째와 i[1]번째 값을 제외한 나머지 값들 중 가장 작은 값을 찾아 i[2]번째 값과 위치를 바꾸고..
반복하여 오름차순 정렬이 되록 i[n]일때 n개의 값에 각각 n-1번 비교 한다.

→왼쪽부터 오름차순으로 정렬

 


예제)

  1. public class Test3{
  2.     public static void main(String[] agrs){
  3.         int a[]{56,85,75,10,52};
  4.  
  5.         System.out.print("Source Date : ");
  6.         for(int i=0; i<a.length; i++)
  7.             System.out.print(a[i]+" ");
  8.         System.out.println();
  9.  
  10.         // Selection Sort
  11.         int temp;
  12.         for (int i=0; i<a.length-1; i++){
  13.             for (int j=i+1; j<a.length; j++){
  14.                 if(a[i]>a[j]){ // 오름차순(swap): 부등호만 바꾸면 내림차순
  15.                     temp=a[i];
  16.                     a[i]=a[j];
  17.                     a[j]=temp;
  18.                 }
  19.             }
  20.         }
  21.         System.out.print("Sort Data : ");
  22.         // 향상된 for문
  23.         for (int n : a){ // for(자료형 접근변수: 배열이나 컬렉션 변수)
  24.             System.out.print(n + " ");
  25.         }
  26.         System.out.println();
  27.     }
  28. }


- Bubble Sort
인접한 두 값을 비교하여 정렬


→오른쪽부터 오름차순 정렬

△ 이미지 출처: http://en.wikipedia.org/wiki/Bubble_sort


예제)
  1. public class Test4{
  2.     public static void main(String[] args){
  3.    
  4.     int a[]={56, 85, 75, 18, 52};
  5.     System.out.print("Source Data : ");
  6.     for(int n : a){
  7.         System.out.print(n+" ");
  8.     }
  9.     System.out.println();
  10.  
  11.     java.util.Arrays.sort(a); // sort 한줄;;
  12.  
  13.     System.out.print("Sort Data : ");
  14.     for(int n : a){
  15.         System.out.print(n+" ");
  16.     }
  17.     // Bubble sort 시작
  18.     boolean flag;
  19.     int pass=1, temp;
  20.  
  21.     do{
  22.         flag=false;
  23.         for (int i=0; i<a.length-pass; i++){
  24.             if(a[i]>a[i+1]){
  25.                 temp=a[i];
  26.                 a[i]=a[i+1];
  27.                 a[i+1]=temp;
  28.                 flag=true;
  29.             }
  30.         }
  31.         pass++;
  32.     }while (flag);
  33.     // Bubble sort 끝
  34.     System.out.print(" Sort Data : ");
  35.     for(int n : a){
  36.         System.out.print(n + " ");
  37.     }
  38.     System.out.println();
  39.     }
  40. }


- 2차원 배열
1차원 배열과 의미는 같으나 i[행][열] 형태로 열의 방만 있는 것이 아닌 행도 존재 한다.

- 행열의 합 구하기



위의 형태를 소스로 풀어보면.... class 선언 생략)

int a[][] = {{5,4,1},{6,3,3},{5,2,4}};
int b[][] = {{8,4,3},{7,7,8},{5,7,2}};
int c[][] = new int[3][3];

// 2차원 행렬의 합 구하기
for(int i=0; i<a.length; i++){ // 행의 수 a.length
    for(int j=0; j<a[i].length;j++){ // 열의 수 a[i].length
        c[i][j]=a[i][j]+b[i][j];
    }
}
// 출력a
System.out.println("a 행렬..");
for(int i=0; i<a.length; i++){
    for(int j=0; j<a[i].length; j++){
        System.out.printf("%4d", a[i][j]);
    }
    System.out.println();
}
// 출력b
System.out.println("b 행렬..");
for(int i=0; i<b.length; i++){
    for(int j=0; j<b[i].length; j++){
        System.out.printf("%4d", b[i][j]);
    }
    System.out.println();
}
// 출력c
System.out.println("c행렬합..");
for(int i=0; i<c.length; i++){
    for(int j=0; j<c[i].length; j++){
        System.out.printf("%4d", c[i][j]);
    }
    System.out.println();


- 행렬의 곱 구하기


위의 형태를 소스로 풀어보면.... class 선언 생략)

int a[][] = {{5,4,1},{6,3,3},{5,2,4}};
int b[][] = {{8,4,3},{7,7,8},{5,7,2}};
int c[][] = new int[3][3];

// 행렬의 곱구하기
int d[][]=new int[3][3];
    for(int i=0; i<3; i++) {
        for(int j=0; j<3; j++) {
            for(int k=0; k<3; k++) {
                d[i][j] += a[i][k]*b[k][j];
            }
        }
    }   
// 행렬의 곱
System.out.println("행렬곱..");
for(int i=0; i<d.length; i++){
    for(int n : d[i]){
        System.out.printf("%4d",n);
    }
    System.out.println();


- 결과



* 향상된 for문
상단에 sort(정렬)관련 예제에 소스는 적혀 있지만 잘 이해가 안가서 밑에서 다시 정리

int a[] = {56,85,75,10,52}; 이라는 배열을 선언하고 반복문을 돌리자 하면

for (int i=0; i<a.length; i++){
    int n = a[i];
}System.out.print (n + " ");

위와 같이 작성해야 하겠지만
아래처럼 간단? 하게 작성 가능하다는 것 같은데

for (int n : a){
    System.out.print (n + " "); 
}

위의 소스를 풀어보면
int n은 배열에 들어있는 한개의 값을 저장해 둘 수 있는 정수형 변수를 선언한 것이고
for문이 반복될 때마다 n에 a라는 배열안의 데이터가 모두 소진 될때까지 반복된다? 라는 것 같다.
참고로 int n 의 변수 선언은 for문의 바깥으로 빠질 수 없다.
: 은 오른쪽 배열의 데이터가 왼쪽 변수에 대입된다라는 것이고
a 는 위에서 설명했듯 배열의 이름이다... 아! 정리해보니 쉽네? =ㅅ=;;


* Array.sort()
Bubble sort의 소스를 풀어놓은 상단의 예제의 11번 줄에 
java.util.Arrays.sort(a) 라는 아주 간단하다 싶은 한줄의 소스로
boolean 어쩌구 do while안에 얽혀 있는 for와 if의 만찬을 엎어버린 꼴이다 싶다.

Arrays는 자동으로 정렬을 도와주는 API라고 불리우는 라이브러리 같은 존재라 하는데
깊은 이해도로써의 정리를 하고 싶어 구글링을 해봤지만 도통 아직은(?) 이해할 수 없는 말들 뿐;;
그저 자동으로 정렬을 도와주는 아주 고마운 친구라는 것 정도로 정리하고 말아야하나...


* 명령행 인수
명령프롬포트 창에서 java Test8 AA BB CC 라고 입력시 입력된 문자열이
args[0] = AA 
args[1] = BB
args[2] = CC 
이렇게 저장이 된다는 것 같은데 왜 필요한건지 어떻게 쓰이는지에 대해선
솔직히 잘 모르겠다..-.-a





문제1) 년, 월, 일을 입력 받아 요일 구하기
(솔직히 위에 만년달력 문제부터 잘 이해가 안감..)


문제2) 다음과 같이 출력하는 프로그램 작성
A B C D E
J  I  H H F
K L M N O
T S R Q P
U V W X Y
(아스키코드를 for문을 이용하여 지그재그 형태로 반복되도록...이라지만
보고 또봐도 다시 해보려하면 안되니 그냥 외워야 하나)













'Java' 카테고리의 다른 글

Java_07  (0) 2011.11.01
Java_06  (0) 2011.10.31
Java_05  (0) 2011.10.29
Java_04  (0) 2011.10.27
Java_03  (0) 2011.10.26
Java_02  (0) 2011.10.25
Java_04 Java 2011. 10. 27. 18:20

* 전일 연산자 복습 : 관계연산자 유의할 부분 (자주 사용될만한 문구인진 모르겠지만..)
while (n++<10){
s+=n;
}System.out.printf(n+", "+s);
에서 n값을 10과 비교를 먼저 하고 값을 1증가한다.
n값이 10이 되어도 비교하고 값 1증가 후 빠져나와 n의 출력값은 11이 된다.
- 반복횟수가 명확하지 않을 땐 while문이 일반적이다.

* switch ~ case 문
- switch문으로 작성하는 모든 것은 if로 구현이 가능하다.
- 다중선택문 이라고도 하며 switch(수식)의 수식값에 따라 case의 상수값에 해당되는
  문장을 실행한다.
- break; 로 멈춰주지 않으면 switch문의 case가 끝날 때 까지 계속 실행 된다.
- case에 swith문의 수식을 만족하는 값이 없을 경우 default 내의 문장을 실행한다.
  (default값은 불필요시 빼도 관계 없고 위치 또한 각 문장끝 break; 가 기재되어 있다면 위치도 상관 없다)
- switch(n) : n에는 수식과 숫자, 문자 입력 가능
- case n : n에는 숫자, 문자 입력 가능(문자열은 입력할 수 없다)


- 예제: break문의 활용

  1. public class Test1
  2. {   public static void main(String[] args){
  3.     int a=3;
  4.     a=5;
  5.     switch(a){
  6.         case 3 : System.out.print("***");
  7.         break;
  8.         //break가 없을 때 break가 나오거나 switch문이 끝날 때 까지 계속 실행됨.
  9.         default:System.out.print("1~3이외의 수"); //default 위치는 어디에 있건 상관 없다.
  10.         break;   
  11.         case 2 : System.out.print("**");
  12.         break;
  13.         case 1 : System.out.print("*");
  14.         break;
  15.  
  16.     }System.out.println();

- 결과





- 예제 : 점수를 입력받아 학점 출력하기

  1. import java.io.IOException;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4.  
  5. public class Test2{
  6.     public static void main(String[] args)throws
  7.         IOException{
  8.             BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  9.         int score;
  10.         char pan;
  11.  
  12.         System.out.print("점수? ");
  13.         score=Integer.parseInt(br.readLine());
  14.  
  15.         if (score>=0 && score<=100){ // 점수 범위 설정하려 한것..
  16.             switch(score/10){ // 점수를 10으로 나눈 몫, switch(조건식)가능
  17.             //조건식 없이 그냥 score쓰고 100,99,98.. 하려 했다니.. 잠이 덜깼나..
  18.                 case 10:
  19.                 case 9: pan='A'; break;
  20.                 case 8: pan='B'; break;
  21.                 case 7: pan='C'; break;
  22.                 case 6: pan='D'; break;
  23.                 default: pan='F';        
  24.             }
  25.             System.out.printf("%d : %c ",score,pan);
  26.         }
  27.     }
  28. }

- 결과






* do while 문
- 형식
: do{}안의 실행문을 선실행 1회 후 while(조건식)의 조건식을 나중에 비교하여 반복여부를 결정
do {
       // 실행문;
} while(조건식);

- 예제 : 1~10까지의 합 구하기 / while문의 실행순서 / do while문의 실행순서

  1. public class Test3
  2. {   public static void main(String[] args){
  3.         int s=0, n=0;
  4.        
  5.         do{
  6.         n++;
  7.         s+=n;
  8.         }while (n<10);
  9.         System.out.println("결과 : "+s);
  10.        
  11.         n=10;
  12.         while (n<10){ // 조건을 만족하지 않으면 한번도 실행되지 않는다.
  13.             n++;
  14.         }
  15.         System.out.println("while n: "+n);
  16.  
  17.         n=10;
  18.         do { // 적어도 한번은 실행한다.
  19.             n++;
  20.         }while(n<10);
  21.         System.out.println("do~while n: "+n);
  22. }   
  23. }

- 결과






- 예제 : 한 수를 입력하여 1부터 그 수까지의 합을 구하라는연예인

  1. import java.io.IOException;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4.  
  5. public class Test4
  6. {   public static void main(String[] args)throws
  7.  
  8.         int num, s, n;
  9.         // 수 입력 받기
  10.         do
  11.         {System.out.print("수? ");
  12.         num=Integer.parseInt(br.readLine());
  13.         }
  14.         while (num<1 || num>100); // 범위를 벗어났을 때 → do{@_@}의 @_@ 실행
  15.         // 반복횟수가 명확하지 않을땐 while을, 명확할땐 for문을 주로 쓴다.
  16.    
  17.         // 합 구하기
  18.         s=0; n=0;
  19.         while(n<num){
  20.             n++;
  21.             s+=n;
  22.         }
  23.         System.out.printf("1~%d까지의 합 %d ", num,s);
  24.     }
  25. }

- 결과






* for 문

- 반복횟수가 정해진 반복문일 경우 유용하게 사용된다.(수학적 계산에 유리)

- 형식
for (n=1; n<=100; n++){
       s+=n;
     }
for (초기값; 조건값; 증감값)

- 예제 : 초기값과 증감값에는 콤마(,)로 구분하여 두개의 값이 입력이 가능하나 일반적이지 않다.

  1. int n,s;
  2. // 아래의 형식이 아닌경우 for다음에 ;이 붙으면 결과가 나오지
  3. // 않으므로 주의해야 함
  4. for (n=1,s=0; n<10; s+=n,n++); // 조건식에만 ,이 들어가지 못한다
  5. System.out.println("합 : "+s); // 이형식은 권장하지 않음..그냥 알아두라고



- 예제 : for문 안에서 선언된 변수는 외부에서 사용불가하다.

  1. int s=0;
  2. for(int n=1; n<=100; n++){ // for문 안에서도 초기값으로 변수값 형선언 가능
  3.     s+=n;
  4. }
  5. // System.out.println("n:"+n+",합 : "+s); // 오류
  6. // for에서 선언된 변수는 외부에서 사용불가!!
  7. // for 안에서만 사용 가능
  8. System.out.println("합 : "+s);


- 예제 : for문 안에서 선언된 변수의 초기값이 반복문의 조건에 항상 참일 때 무한루프에 빠진다. 

  1. int i,j;
  2. for(i=1; i<=5; i++){
  3.     // i=3; // 무한루프∞에 빠짐
  4.     for(j=1; j<=4; j++){
  5.         System.out.println("*");
  6.     }
  7. }
  8. System.out.println(i);


- 예제 : * 로 삼각형 모양 만들기.

  1. int i,j;
  2. for(i=1; i<=5; i++){
  3.     for(j=1; j<=5-i; j++){
  4.         System.out.print(" ");
  5.     }
  6.     for(j=1; j<=i*2-1; j++){ // j<=i 일때 오른쪽이 직선, *이 삼각형 모양으로 되기 위해
  7.         // 1, 3, 5, 7, 9.. 식으로 가려면 i값은 1,2,3,4,5.. 식이므로 1,3,5,7,9..가 되기 위한
  8.         // 조건식을 찾으라는 말, 1*2-1=1, 2*2-1=3....
  9.         System.out.print("*");
  10.     }
  11.     System.out.println();
  12. }

- 결과



- 예제 : 역삼각형 만들기

  1. int i,j;
  2. for(i=5; i>=1; i--){
  3.     for(j=1; j<=5-i; j++){
  4.         System.out.print(" ");
  5.         }
  6.     for(j=1; j<=i*2-1; j++){ //
  7.         System.out.print("*");
  8.     }
  9.     System.out.println();   
  10. }


- 예제 : while문 for문 if문 활용

  1. import java.io.*;
  2.  
  3. public class Test7{
  4.     public static void main(String[] args)throws
  5.  
  6.         int num, s;
  7.         char ch;
  8.  
  9.         while(true){ // 무한루프
  10.             do{
  11.                 System.out.print("원하는 수? ");
  12.                 num=Integer.parseInt(br.readLine());
  13.             }while(num<1 || num>1000);
  14.            
  15.             // 1에서 입력받은 수까지의 합을 구한다.
  16.             s=0;
  17.             for(int i=1; i<=num; i++)
  18.                 s+=i;
  19.             System.out.printf("1~%d 합 : %d ",num,s);
  20.  
  21.             // 합을 계속 구할지 물어본다.
  22.             System.out.print("계속 하시겠습니까?[Y/N] ");
  23.             ch=(char)System.in.read();
  24.             System.in.skip(2); // 엔터를 버림
  25.  
  26.             if(ch!='y' && ch!='Y')
  27.                 break; // while(true) 문을 빠져나간다.
  28.         }
  29.     }
  30. }

- 결과






* break : 속해있는 brace(중괄호)의 while, do~while, for, switch 문을 빠져나감

* continue : 속해있는 brace의 while, do~while, for 문을 빠져나감

* 네이블

  1. int a=0,b=0;
  2.  
  3.     jump: // 네이블이름은 엿장수 마음대로
  4.     while(true){
  5.         a++;
  6.         b=0;
  7.         while(b<3){
  8.             if(a>3)
  9.                 break jump; // 네이블 밑에 있는 문장을 빠져나가라
  10.             b++;
  11.             System.out.println(b);
  12.         }
  13.     } // while(ture)_end



* 문제1) : 1*2*3*....*10의 결과 구하기

  1. public class Test9{
  2.     public static void main(String[] args){
  3.    
  4.     int i=0,n=1,a=0;
  5.  
  6.     for (i=1; i<=10; i++)
  7.     {
  8.         n*=i;   
  9.     }
  10.     System.out.print(n);
  11.     }
  12. }


(소스 보고 공부하기..)

* 문제2) : 어떤 수를 입력받아 그 수가 소수인지 판별하기
소수 : 자기자신으로만 나누어지는 수(단, 1은 소수가 아님)

(소스 보고 공부하기..)

* 문제3) : 두 수를 입력 받은 후 작은수에서 큰수까지의 합 구하기

(소스 보고 공부하기..)

* 문제4) : 정수를 입력받아 입력받은 정수의 자릿수 구하기

(소스 보고..)

* 문제 5) 1~100까지 수중 3,6,9가 들어있는 수는 *를 출력하고
그렇지 않으면 수를 출력한다. 단 한줄에 10개씩 출력

(소스 보고..)

* 문제 6) 구구단을 다음과 같이 출력한다.
2*1=2 3*1=3 4*1=4 5*1=5
2*2=4 3*2=6 4*2=8 5*2=10
    :
2*9=18 3*9=27 4*9=36 5*9=45

6*1=6 7*1=7 8*1=8 9*1=9
  :

(소스 보고..)


* 과제) 자판기 만들기

(공부)

 

 

 

 

 

 

 


 

'Java' 카테고리의 다른 글

Java_06  (0) 2011.10.31
Java_05  (0) 2011.10.29
Java_04  (0) 2011.10.27
Java_03  (0) 2011.10.26
Java_02  (0) 2011.10.25
Java_01  (0) 2011.10.24
Java_03 Java 2011. 10. 26. 20:47

* 연산자 : 변수나 상수에 연산을 위해 사용

- 단항 연산자 : 피연산자가 하나인 연산자

- 이항 연산자 : 연산을 위해 두개의 항이 필요한 연산자

- C는 안되지만 double형과 float형에서는 %연산이 가능하다.

- 산술연산 : 최소가 int형이고 short에서는 안된다.

- 부호연산자 : 단항연산자이며 + - 같은 부호를 뜻한다.

- 증감연산자 : 변수의 값을 1증가 혹은 1감소 시킨 후 그 값을 다시 변수에 저장

증감연산자 예제)

  1. public class Test2{
  2.     public static void main(String[] args){
  3.         int a=10, b=0;
  4.  
  5.          b=a++; // → b=a; a=a+1 : 후위 증가 연산자
  6.         // b=++a; → a=a+1; b=a : 전위 증가 연산자
  7.        
  8.         // ++a; → 전위 증가 연산자
  9.         // a++; → 후위 증가 연산자
  10.  
  11.         //    11    12    13(14) 13
  12.         // b= ++a + ++a + a++ + ++a;
  13.         // 49.. C에서는 52(13*4)가 나온다..
  14.         // 언어에 따라 다르다. ++수식을 남용하지 말라.
  15.         // 일단 머리 아프니까. ∴b=몰라도 된다
  16.         // 단일로는 많이 쓴다.
  17.  
  18.         System.out.println("a:"+a);
  19.         System.out.println("b:"+b);  
  20.     }
  21. }

증감연산자 예제의 결과)
a:10
b:11

- 관계연산자 : true / false값 반환

- 동등연산자 : = 한번은 대입연산 / == 두번은 같다는 의미
관계연산자/동등연산자 예제)
  1. public class Test2{
  2.     public static void main(String[] args){
  3.  
  4.         int a=10, b=10, c=20;
  5.         System.out.printf("a:%d,b:%d,C:%d ",a,b,c);
  6.  
  7.         System.out.println("a>c:"+(a>c));
  8.         System.out.println("a<c:"+(a<c));
  9.         System.out.println("a==b:"+(a==b));
  10.         System.out.println("a!=b:"+(a!=b));
  11.         System.out.println("a>=b:"+(a>=b));
  12.         System.out.println("a==c:"+(a==c));
  13.     }
  14. }
관계연산자/동등연산자 예제의 결과)
a:10,b:10,C:20
a>c:false
a<c:true
a==b:true
a!=b:false
a>=b:true
a==c:false

- 논리연산자
  · && : 논리곱, 둘다 만족시 true, 하나만 만족하거나 둘다 만족하지 않을 시 false
  · || : 논리합, 둘중 하나라도 만족시 true, 둘다 만족하지 않을 시 false

- 논리부정연산
  · ! : 논리부정, NOT

- 조건 연산자 : 조건식이 true일 때 '값1'을 변수에 대입하고 false일 때 '값2'를 대입한다.
  · 변수 = 조건식? 값1 : 값2
  · 주로 삼항연산자라고 불리우며 자주쓰인다.
삼항연산자 예제1)
  1. import java.io.IOException;
  2.  
  3. public class Test3 {
  4.     public static void main(String[] args)throws
  5.     IOException{
  6.     // 문자를 입력 받아 대문자이면 소문자로 변환하고
  7.     // 그렇지 않으면 그대로 출력하는 프로그램
  8.  
  9.     char ch, conv;
  10.  
  11.     System.out.print("한문자?");
  12.     ch=(char)System.in.read();
  13.  
  14. //  conv=ch>='A'&&ch<='Z'? (char)(ch+32) : ch;
  15. // 대문자A:65, 소문자a:97 - 32차이
  16.  
  17.     // 대→소, 소→대, 기타 그냥 출력
  18.     conv=ch>='A'&&ch<='Z'? (char)(ch+32) :
  19.     (ch>='a'&&ch<='z'?(char)(ch-32):ch);
  20.  
  21.     System.out.printf("%c → %c ", ch, conv);
  22.     }
  23. }
삼항연산자 예제1의 결과)
한문자?a
a → A
한문자?A
A → a

삼항연산자 예제2)
  1. // 정수를 입력받아 짝수인지 홀수인지 판별
  2.  
  3. import java.io.IOException;
  4. import java.io.BufferedReader;
  5. import java.io.InputStreamReader;
  6.  
  7. public class Test4{
  8.     public static void main(String[] args)throws
  9.     IOException{
  10.         BufferedReader br=new BufferedReader(
  11.         new InputStreamReader(System.in));
  12.         int n;
  13.         String s; // 문자열
  14.  
  15.         System.out.print("정수? ");
  16.         n=Integer.parseInt(br.readLine());
  17.  
  18.         s=n%2==0? "짝수" : "홀수";
  19.  
  20.         System.out.printf("%d → %s ",n,s); //%s문자열
  21.     }
  22.  
  23.        
  24. }
삼항연산자 예제2의 결과)
정수? 11
11 → 홀수

삼항연산자 예제3)
  1. // 정수를 입력받아 짝수인지 홀수인지 판별
  2.  
  3. import java.io.IOException;
  4. import java.io.BufferedReader;
  5. import java.io.InputStreamReader;
  6.  
  7. public class Test4{
  8.     public static void main(String[] args)throws
  9.     IOException{
  10.         BufferedReader br=new BufferedReader(
  11.         new InputStreamReader(System.in));
  12.         int n;
  13.         String s; // 문자열
  14.  
  15.         System.out.print("정수? ");
  16.         n=Integer.parseInt(br.readLine());
  17.  
  18.         s=n%2==0? "짝수" : "홀수";
  19.  
  20.         System.out.printf("%d → %s ",n,s); //%s문자열
  21.     }
  22.  
  23.        
  24. }
삼항연산자 예제3의 결과)
년도? 2012
2012 년도 → 윤년

- 비트 단위 연산자
  · 비트 단위 : 2진수로 풀어서 연산해서 비트단위라는 말이 나옴
  · ~ : 해당 비트단위를 반전
  · 쉬운예로 a=12 일때 b=~a 라면 b=-13

- 비트 단위 논리연산자 : 정수형 자료의 내부 2진수 값을 대상으로 논리연산 수행 (이항연산자)
  · AND : &  마스크연산 이라고도 하며 각 항의 값이 0과 1일 때 곱셈의 결과가 1일때 참
             값을 없앨 때 사용한다 해서 마스크 라는 말이 붙었는지도..?
  · OR : |  각 항의 값이 0과 1일 때 덧셈의 결과가 1일 때 참
  · XOR : ^  각 항의 값이 0과 1일 때 서로 다른 값일 때 참
             기초연산 → a=13; 
                              a=a^27;  
                              a=a^27;
                              a=13;
XOR ^ 예제)
  1. /*
  2. 세 수를 입력받아 크기 순으로 나열하기(적은수-큰수 순)
  3. 첫번째수? 10
  4. 두번째수? 5
  5. 세번째수? 7
  6. 5 7 10
  7. */
  8.  
  9. import java.io.IOException;
  10. import java.io.BufferedReader;
  11. import java.io.InputStreamReader;
  12.  
  13. public class Test10{
  14.     public static void main(String[] args)throws
  15.     IOException{
  16.         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  17.  
  18.         int a,b,c,temp;
  19.  
  20.         System.out.print("첫번째수? ");
  21.         a=Integer.parseInt(br.readLine());
  22.         System.out.print("두번째수? ");
  23.         b=Integer.parseInt(br.readLine());
  24.         System.out.print("세번째수? ");
  25.         c=Integer.parseInt(br.readLine());
  26.  
  27.         if (a>b)
  28.         { temp=a;
  29.         a=b;
  30.         b=temp; // 빈컵에 a를 담고 a컵에 b를 담고 b컵에 빈컵에 들어있는 a값을 넣는다.
  31.         /*
  32.         a=a^b;
  33.         b=b^a;
  34.         a=a^b;
  35.         */   
  36.         }
  37.         if (a>c)
  38.         { temp=a;
  39.         a=c;
  40.         c=temp;
  41.         }
  42.         if (b>c)
  43.         { temp=b;
  44.         b=c;
  45.         c=temp;
  46.         }
  47.  
  48.         System.out.printf("%d %d %d ", a,b,c);
  49.     }
  50.  
  51. }
XOR ^ 예제의 결과)
첫번째수? 18
두번째수? 17
세번째수? 16
16 17 18

- shift 연산자 : 비트값을 알아낼 목적
  · a=32>>3 → 32÷23 나눗셈 응용, 이동으로 생긴 왼쪽 자리는 부호로 채움
  · a=32<<3 → 32×23 곱셈 응용, 이동으로 생긴 오른쪽 자리는 0으로 채움
  · >>> → 우측으로 이동하고 이동으로 생긴 왼쪽 자리는 0으로 채움

- 대입연산자 : = 의 우측의 값을 좌측에 대입한다는 의미로 쓰인다.
  · =, +=, -=, *=, /=, %= 등이 있다.

- 형변환 : 캐스팅
  · 묵시적 형변환 : a=3.14d + 3.14d
  · 명시적 형변환
    float a;
    int r;
    a = (float)r * r * 3.14f;





문제 1. (첨부파일 휠클릭하여 새탭으로)
1/2 + 2/3 + 3/4 ~ 9/10 의 합 출력


문제 2. (첨부파일 휠클릭하여 새탭으로)
어떤수를 입력받아 입력 받은 수까지의 정수합
원하는수? 20
20까지의합 : 210

문제 3. (첨부파일 휠클릭하여 새탭으로)
1~100 까지의 합을 구하되 수가 10의 배수가 될때마다 합출력
1~10 : 55
1~20 : 210
  :
1~100 : 5050

문제4. (첨부파일 휠클릭하여 새탭으로)
1+(1+2)+(1+2+3)+....+(1+2+3..+10) 의 합 출력

문제5. (첨부파일 휠클릭하여 새탭으로)
어떤수를 입력 받아 입력 받은 수까지의 3의 배수의 개수는?
어떤수? 10
3의배수의 개수 : 3

추가문제6. - 본문 예제
while문과 증감연산자를 이용한 반복문


추가문제7.
사람의 성향을 거의 정확하게 판단할 수 있는 프로그램
(문자열을 입력받아 출력)


문제8.
...
문제9.
...
문제10.
...

'Java' 카테고리의 다른 글

Java_06  (0) 2011.10.31
Java_05  (0) 2011.10.29
Java_04  (0) 2011.10.27
Java_03  (0) 2011.10.26
Java_02  (0) 2011.10.25
Java_01  (0) 2011.10.24
Java_02 Java 2011. 10. 25. 19:15

1. 프로그램 구성 요소

  • 키워드(keyword) : 예약어라고도 한다. Java자체에 미리 정의된 단어들. 다른목적으로 사용 불가
  • 식별자 : 변수명, 메소드, 클래스명. 사용자에 의해 정의된다. 언더바는 영어로 구분되고 대문자와
    소문자는 다른 변수로 구분되고 첫 글자로는 유니코드자바레터(알파벳,_,$)와 각국언어로 가능하나
    영어로 시작함이 일반적이다. 시작 글자로 괄호나 하이폰(-)은 금지.
  • 리터럴 : 고정되어 있는 값. 쉽게 말해 상수
  • 외에 연산자, 주석, 컴마, 괄호, dot, 배열, 세미콜론(문장과 문장사이 구분, 스페이스/탭) 등이 있다.


2. 자바의 기본 자료형

  • 논리형
    • boolean : C언어를 예로 참과 거짓을 1과 0으로 표현하지 않고 true 와 false의 값만 갖는다
      (1Byte)


  • 정수형
    • byte : 1Byte=8bit, 2진수로 보면 7칸의 숫자와 1칸의 부호를 의미하는 값을 가지고 있다.
      부호를 의미하는 첫번째 숫자를 부호와 절대치 라고 한다는 것 같다.

      ■ □ □ □ □ □ □ □ → ■ 이 양수의 값을 취할때 0 / 음수의 값을 취할때 1
      7  6  5  4  3  2  1  0 → 2의 제곱 표시 : 최대값은 27-1 이므로 0 1 1 1 1 1 1 1 = 127 이며
      음의 최대값은 1 0 0 0 0 0 0 0 = -128 으로
      표현범위는 -128 ~ 127 이 된다. 나머지도 이런식
    • char : C언어를 또 예로 들자면 char형은 1byte이다. 하지만 Java에서는 유니코드로
      char형의 값을 표현하기에 유니코드 문자 한글자당 2byte로 char형 또한 2byte가 된다
      부호없는 정수, 0부터 표현 하는 값 대입
    • short : 2byte, 범위는 -32,768 ~ 32,767
    • int : 4byte, 범위는 -2,147,483,648 ~ 2,147,483,647 (대략 21억정도)
    • long : 8byte, -263 ~ -263-1 엄청 큼......;;

 

3. 기본 입출력 스트림

  • 스트림
    • 먼저 입력된 data가 먼저 출력되는 자료구조
    • 뜻은 흐르는 물이라는 뜻, 단방향으로 수도파이프 구조, FIFO구조라고도 함
    • 지연될 수 있음


  • 바이트 스트림
    • InputStream, OutputStream 클래스와 하위 클래스로 구현
    • 8비트 크기를 갖는 바이트들의 스트림


  • 문자 스트림 
    • 입력되는 모든 data는 문자 이며 숫자로 식별되는 것도 변환시킬뿐 사실은 문자
    • Reader, Writer 클래스와 하위 클래스로 구현
    • 16비트 유니코드 문자들의 스트림


  • System.out : 표준 출력 스트림
  • System.in : 표준 입력 스트림
  • System.out.println() : 출력 후 새로운 라인 생성(엔터)
  • System.out.print() : 괄호안의 해당값 출력
  • System.out.printf() : 서식문자와 전달인자가 포함되어 괄호안의 따옴표내에 서식문자의 값이 출력



문제1) 가로와 세로를 입력 받아 사각형 넓이와 둘레 구하기


문제2) 반지름을 입력 받아 원의 넓이와 둘레 구하기. 단, 반지름은 정수로 입력받고 넓이와 둘레는 실수

 





 

금일 실습 예제





  1. public class Test1{ 
  2.     public static void main(String[] args){
  3.        
  4.         int a,b,c; // 정수형 변수를 선언
  5.         // int a;      int b;  int c; // 따로따로 변수 선언
  6.         // int a=20, b=10, c; // 변수선언과 동시에 초기화
  7.  
  8.         a=10;
  9.         b=20;
  10.         c=a+b;
  11.  
  12.         // System.out : 표준 출력(모니터)
  13.  
  14.         System.out.print("결과 : ");
  15.         System.out.print(c);
  16.         System.out.print(" ");
  17.        
  18.         // System.out.println("결과 : " + c);
  19.         // println : 한줄 출력후 엔터
  20.  
  21.         // 한줄 주석
  22.         /*
  23.            여러줄 주석
  24.            여러줄 주석
  25.            여러줄 주석
  26.         */
  27.     }
  28. }




  1. public class Test2 {
  2.     public static void main(String[] args){
  3.         /*
  4.         byte a=10, b=5, c;
  5.         // byte d=128; // error : overflow(값이 넘침)
  6.         // c=a+b; // error : overflow 미리 감지...?
  7.         c=(byte)(a+b); // (byte) : 형변환, 연산결과를 byte형으로 변환한다.
  8.         // byte형은 산술형(연산)의 용도라기 보다 이럴때 뭐하고 저럴때 뭐하고...
  9.         // 비교하는..blah blah
  10.  
  11.         System.out.println("결과 : "+ c);
  12.         */
  13.        
  14.         /*
  15.         int a=017, b=010; // 0이 붙으면 8진수로 인식 : a=15, b=8
  16.         int c=a+b;
  17.         System.out.println("a : "+a);
  18.         System.out.println("b : "+b);
  19.         System.out.println("결과 : "+c);
  20.         */
  21.  
  22.         /*
  23.         int a=0x17, b=0xa10; // 16진수 : x는 소문자이건 대문자이건 관계 없다
  24.         int c=a+b;       // 초기화 시킬때 많이 쓴다. 0x
  25.         System.out.println("a : "+a);
  26.         System.out.println("b: "+b);
  27.         System.out.println("결과 : "+c);
  28.         */
  29.  
  30.        
  31.         long a=10000000000L, b=10// 100억, 정수의 형태인 21억이상이 되어 L붙여줌
  32.                                     // 소/대문자 관계없다
  33.         long c=a+b;   
  34.         System.out.println("a : "+a);
  35.         System.out.println("b: "+b);
  36.         System.out.println("결과 : "+c);
  37.        
  38.     }
  39.  
  40. }





  1. public class Test3{
  2.     public static void main(String[] args){
  3. /*  float a=0;
  4.     double b=0;
  5.  
  6.     for(int i=1; i<=100000; i++){
  7.         a+=100000;
  8.         b+=100000;
  9.     }
  10.     a=a/100000;
  11.     b=b/100000;
  12.     System.out.println("a: "+a);
  13.     System.out.println("b: "+b);  */
  14.  
  15.     /*// ▽ 반지름이 10인 원의 둘레와 넓이
  16.     int a=10;
  17.     float b,c;
  18.     b=a*a*3.14f; // 3.14는 아무것도 안붙이면 배정도형실수 
  19.     c=a*2*3.14f; // float형 b,c 변수 선언으로 3.14도 단정도형으로 변환위해 f를 붙여줌
  20.     System.out.println("넓이 : "+b);
  21.     System.out.println("둘레 : "+c); */
  22.  
  23.     // 정수 연산자 정수 → 정수
  24.     // 정수 연산자 실수 → 실수
  25.     // 실수 연산자 실수 → 실수
  26.    
  27.     double a=1/2+1/2;
  28.     double b=1./2+1/2; // 1. 은 1.0 실수
  29.     double c=2/3*5+1./2; // 연산우선순위 파악 ①:/* ②:/ ③:①+②
  30.     System.out.println("a: "+a);
  31.     System.out.println("b: "+b);
  32.     System.out.println("c: "+c);
  33.    
  34.  
  35.     }
  36. }





  1. public class Test4{
  2.     public static void main(String[] args){
  3.         char a='a', b='z';
  4.         char c='A', d='Z';
  5.        
  6.         // 아스키코드 (기본암기)
  7.         // a~z: 97 ~ 122
  8.         // A~Z: 65 ~ 90
  9.         // Enter: 13(10), Esc: 27
  10.         // Alt+13(오른쪽키패드)=엔터, Alt+65=A
  11.         // 0: 48
  12.        
  13. /*
  14.         System.out.println(
  15.             a+":"+b+":"+c+":"+d);
  16.  
  17.         a=(char)(a+3); // 형변환(캐스팅)
  18.         System.out.println("a:"+a);
  19.  
  20.         System.out.println((int)a); // 코드값 출력을 위해
  21.         System.out.println((int)b); // int형으로 형변환
  22.         System.out.println((int)c);
  23.         System.out.println((int)d); */
  24. /*
  25.         System.out.print("java");
  26.         System.out.print(" "); // newline, Enter
  27.             // System.out.println("java"); // 위와 같다.
  28.         System.out.print("java "); // 위 두줄과 같다.
  29.  
  30.         System.out.print("java Framework Servlet"); // 는 Tab
  31.         System.out.println(" abcdefgxyz"); // 는 backspace */
  32.  
  33.         // 사용기피 클래스..
  34.         String s1="seoul";
  35.         String s2="korea";
  36.         String s3=s1+s2; // + : 문자열결합
  37.         // 문자열 + 정수 → 문자열
  38.         String s4=s3+40;
  39.         System.out.println(s1+" "+s2+" "+s3+" "+s4);
  40.     }
  41. }





  1. public class Test5
  2. {   public static void main(String[] args){
  3.         /*
  4.         int a=10, b=200;
  5.  
  6.         System.out.println("012345678901234567890123456789");
  7.  
  8.         // System.out.print("서식" + 값);
  9.         System.out.printf("a=%d b=%d%n",a,b); // %n은 printf에서만 사용하며 과 같다
  10.         // System.out.printf("a=%d b=%d ",a,b);
  11.         System.out.printf("%10d%10d%n",a,b); // 자리수 맞출때 쓴다. 일단위 기준
  12.         */
  13.  
  14.  
  15.         // 5page PrintStream클래스의 printf메소드 사용예
  16.         System.out.printf("%d %% %d = %d%n", 10,4,10%4);
  17.         System.out.printf("%10d%n", 123);
  18.         System.out.printf("%010d%n", 123);
  19.        
  20.         System.out.printf("%2$s %1$s %2$s ", "seoul","korea");
  21.         // 1$는 첫번째 값, 2$는 두번째 값
  22.  
  23.         System.out.printf("%1$tF %1$tT %1$tA ", java.util.Calendar.getInstance());
  24.         // 오늘 날짜 시간
  25. }
  26. }





  1. import java.io.IOException; // 예외
  2. public class Test6
  3. {   public static void main(String[] args) throws
  4.     IOException {
  5.         int ch;
  6.         System.out.print("한문자? ");
  7.  
  8.         ch=System.in.read(); // read(): 한문자를 입력받아 ASCII 코드를 반환
  9.  
  10.         System.out.println("ch : "+ch);
  11.         System.out.println("ch : "+(char)ch);
  12. }
  13. }





  1. import java.io.*; // 실무에선 * 절대 안쓴다고 함.. io 안에 있는 클래스 다 가져오란 소리
  2. // 무조건 외우장... 다
  3. public class Test7{
  4.     public static void main(String[] args)throws
  5.     IOException {
  6.         // new : 메모리 할당
  7.  
  8.         String name;
  9.         int kor, eng, tot, ave;
  10.  
  11.         System.out.print("이름?");
  12.         name=br.readLine(); // 엔터치기 전까지 한줄 입력 받는다.
  13.         System.out.print("국어?");
  14.         kor=Integer.parseInt(br.readLine()); // parseInt : 문자열을 숫자로 변환
  15.         System.out.print("영어?");
  16.         eng=Integer.parseInt(br.readLine());
  17.  
  18.         tot=kor+eng;
  19.         ave=tot/2;
  20.         System.out.printf("이름 : %s, 총점 : %d, 평균 : %d", name, tot, ave);
  21.     }
  22.  
  23. }


 




  1. // 문제 - 사칙연산 : +,-,*,/
  2. // 두 수를 입력받아 사칙연산을 하세요.
  3. // 실행 예)
  4. // 첫번째 수? 10
  5. // 두번째 수? 5
  6. // 10+5=15      10-5=5
  7. // 10*5=50      10/5=2
  8.  
  9. /*
  10. import java.io.*;
  11. public class Test8{
  12.     public static void main(String[] args)throws
  13.     IOException {
  14.         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  15.  
  16.        
  17.         int num1, num2, add, mi, gop;
  18.         double na;
  19.  
  20.         System.out.print("첫번째 수? ");
  21.         num1=Integer.parseInt(br.readLine());
  22.         System.out.print("두번째 수? ");
  23.         num2=Integer.parseInt(br.readLine());
  24.        
  25.  
  26.         add=num1+num2;
  27.         mi=num1-num2;
  28.         gop=num1*num2;
  29.         na=(double)num1/(double)num2; // 실수로 형변환
  30.        
  31.  
  32.         System.out.printf("%d + %d = %d ", num1, num2, add);
  33.         System.out.printf("%d - %d = %d ", num1, num2, mi);
  34.         System.out.printf("%d * %d = %d ", num1, num2, gop);
  35.         System.out.printf("%d / %d = %.1f ", num1, num2, na); // 값이 실수이므로 %f
  36.     }
  37. } */
  38.  
  39. import java.io.*;
  40. public class Test8
  41. {   public static void main(String[] args)throws
  42.     IOException {
  43.  
  44.         int a, b;
  45.  
  46.         System.out.print("첫번째수? ");
  47.         a=Integer.parseInt(br.readLine()); // 여기서 멈추는이유는 br.readLine()
  48.         System.out.print("두번째수? ");
  49.         b=Integer.parseInt(br.readLine());
  50.  
  51.         System.out.printf("%d+%d=%d ", a,b,(a+b));
  52.         System.out.printf("%d-%d=%d ", a,b,(a-b));
  53.         System.out.printf("%d*%d=%d ", a,b,(a*b));
  54.         System.out.printf("%d/%d=%d ", a,b,(a/b));
  55.         // System.out.printf("%d/%d=%f ", a,b,(double)a/b);
  56.         // 값이 실수로 나오게 하고 싶다면 △
  57.     }
  58. }




※ 종일 궁금했던 parseInt에 관한 확실한 정의(? 구글링)




....해보라고-_-

외워야 할 것들 ↗

'Java' 카테고리의 다른 글

Java_06  (0) 2011.10.31
Java_05  (0) 2011.10.29
Java_04  (0) 2011.10.27
Java_03  (0) 2011.10.26
Java_02  (0) 2011.10.25
Java_01  (0) 2011.10.24