'개발연습'에 해당되는 글 11건

  1. 2013.10.14 Thread
  2. 2013.10.10 인터페이스
  3. 2013.10.10 추상 클래스
  4. 2013.09.24 Day9
  5. 2013.09.23 Day8
  6. 2013.09.17 Day 7
  7. 2013.09.16 Day6
  8. 2013.09.12 3일차 수업
  9. 2013.09.11 2일째 수업
  10. 2013.09.10 2013.09.10 첫 수업
2013.10.14 15:27


java.lang.Tread 클래스


java.lang.Runnable 인터페이스


Thread 클래스를 상속 받는 경우

class 클래스명 extends Thread{

...

}


Runnable 인터페이스를 상속받는 경우 - 다른 클래스를 상속하여, Tread 클래스르를  상속받지 못하는 경우

class 클래스명 extends 수퍼클래스 implements Runnable{

...

}


Thread 클래스를 상속받아 스레드를 만드는 과정


1. Thread 클래스를 상속 받은 클래스를 선언

2. Thread 클래스의 추상 메소드인 run() 메소드를 재정의

class Threadtest extends Thread{ // Thread 클래스 상속

....;

public void run(){

....; // run 메소드의 재정의

}

}


3. main() 메소드에서 Thread 클래스를 상속 받은 클래스 객체를 생성

4. 생성된 객체를 사용해 start() 메소드 호출


public static void main(String[] args){

Threadtest obj = new Threadtest(); // 객체 생성

obj.start(); // start 메소드 호출

}


: 중요 메소드

public void start() :     스레드를 시작

public void run() :     스레드가 실행될 부분을 기술하는 메소드

Thread 클래스에 있는 run() 메소드에는 아무런 내용이 구현되어 있지 않고 상속 받은 클래스에서 재정의 해야 함


run() 대신 start()를 호출하는 이유

프로세스나 스레드가 실행된다는 의미는 CPU를 사용해 작업을 수행하는 것을 뜻한다. 그런데 한가지 작업만 처리하는 것이 아니고 동시에 2개 이상의 작업을 처리하는 멀티 프로세싱을 위해서는 CPU 스케쥴링이 필요하다. 운영체제는 CPU를 보다 호율적으로 사용하기 위해 작업의 우선 순위를 정해 처리한다. 결국 CPU의 사용권한을 정하는 것은 프로그램이 아니고 운영체제의 몫이다. start() 메소드는 스레드를 실행 가능한 상태, 즉 스레드가 CPU를 사용할 수 있는 준비 상태로 만드는 역할을 한다. 그리고 CPU 스케쥴링에 따라 run() 메소드를 호출해CPU를 사용하는 상태로 변한다.


Runnable 인터페이스

이미 다른 클래스를 상속 받아서 Thread 클래서를 상속 받을 수 없을 때 사용한다.


1. Runnable 인터페이스를 implements 하는 클래스 정의

2. Runnable 인터페이스의 run() 메소드를 재정의

3. main() 메소드에서 Runnable 인터페이스를 구현한 클래스 객체를 생성

4. Thread 클래스의 객체를 생성하면서, 3에서 만든 객체를 매개변수로 전달

5. 4.에서 생성한 Thread 클래스의 객체를 사용해서 start() 메소드를 호출


public static void main(String[] args){

RunnableTest obj = new RunnableTest();

Thread obj_t = new Thread(obj);

obj_t.start();

}


Thread의 우선순위 지정

여러 개의 스레드 중에 어떤 스레드가 CPU를 사용할지는 스레드 스케쥴러가 결정해서 처리하기 때문에 자바의 스레드의 정확한 동작은 예측하기 어렵다. 하지만 setPriority() 메소드를 이용해 우선순위를 부여할 수 있다.

대부분의 컴퓨터는 한 개의 CPU 만을 가지고 있기 때문에, 여러 스레드 중 하나의 스레드 만을 수행한다.

스레드가 작동하는 방식은 하나의 스레드가 종료될 때 까지 CPU를 독점하는 것이 아닌, 여러개의 스레드를 번갈아 가면서 처리하는 방식이다. 이처럼 여러 개의 스레드를 교차하면서 처리하는 것을 Scheduling 이라고 한다.

Posted by saudades

댓글을 달아 주세요

2013.10.10 14:50

인터페이스


인터페이스는 추상 메소드와 상수 정의로 이루어진 단위이다. 즉, 오로지 상수와 추상 메소드만 정의할 수 있다.


다음과 같은 특징이 있다.

- 다중 상속이 가능

- 모든 메소드가 추상 메소드로 이루어져 있음

- interface 키워드를 사용하여 정의

- implements 키워드를 사용하여 상속

- 인터페이스 내부의 추상 메소드 앞에는 abstract를 사용하지 않음


인터페이스를 만드는 이유

- 다중 상속이 가능하므로, 단일 상속의 한계를 보완

- 클래스 명세표를 만듬


형식

public interface 인터페이스명 extends 인터페이스명,인터페이스명...{ // extends 이하는 다중 상속을 의미

//상수선언

//메소드선언

}


예제 1. 인터페이스의 다중 상속


package java_1010;


interface Speed {

public int INIT_SPEED = 60;


public void speedUp(int inc);


public void speedDown(int dec);

}


interface Direction {

public void turn(boolean b);

}


class Car2 implements Speed, Direction {

int speed = INIT_SPEED;


@Override

public void speedUp(int inc) {

// TODO Auto-generated method stub

speed += inc;


}


@Override

public void speedDown(int dec) {

// TODO Auto-generated method stub

speed -= dec;


}


public void display() {

System.out.println("현재 속도는  " + speed + "입니다.");

}


@Override

public void turn(boolean b) {

// TODO Auto-generated method stub

if (b == true) {

System.out.println("현재 방향은  왼쪽입니다.");

} else {

System.out.println("현재 방향은 오른쪽입니다.");

}

}

}


public class CarExe {

public static void main(String[] args) {

Car2 obj = new Car2();

obj.speedUp(20);

obj.turn(true);

obj.display();


obj.speedDown(15);

obj.turn(false);

obj.display();


obj.speedDown(10);

obj.turn(false);

obj.display();

}


}



예제 2. 인터페이스의 구현


package java_1010;


interface Bird{

public long speed =80l;

public void fly();

}

interface Horse{

public void run();

}

interface Fish{

public void swim();

}

interface ChangeSpeed{

public void speedUp(int a);

public void speedDown(int a);

}


class ClassPaga implements Bird, Horse, Fish, ChangeSpeed{

long currentSpeed = speed;


@Override

public void run() {

// TODO Auto-generated method stub

System.out.println(currentSpeed + "Km/h의 속도로 커다란 평원을 달립니다.");

}


@Override

public void fly() {

// TODO Auto-generated method stub

System.out.println(currentSpeed+ "Km/h의 속도로 하늘을 날아다닙니다.");

}


@Override

public void swim() {

// TODO Auto-generated method stub

System.out.println(currentSpeed+ "Km/h의 속도로 바다를 헤엄칩니다.");

}


@Override

public void speedUp(int a) {

// TODO Auto-generated method stub

currentSpeed += a;

}


@Override

public void speedDown(int a) {

// TODO Auto-generated method stub

currentSpeed -= a;

}

}


public class Pagasus {


public static void main(String[] args) {

// TODO Auto-generated method stub

ClassPaga obj = new ClassPaga();

obj.speedUp(10);

obj.fly();

obj.speedDown(20);

obj.run();

obj.speedDown(10);

obj.swim();


}


}



Posted by saudades

댓글을 달아 주세요

2013.10.10 12:19

1. 추상 클래스


abstract 예약어를 사용한 클래스를 추상 클래스라고 한다.(추상 메소드를 포함할 수 있고, 포함하지 않을 수도 있다.)

객체화 할 수 없으며, 반드시 상속을 통해 구현하여 사용한다.


- 추상 메소드 : 구현부{}가 없는 메소드를 추상 메소드라고 한다.


형식 : 

abstract class{

abstract 리턴타입 메소드명();

}


예 :

abstract class{

int i = 5;

abstract void move();

}



예제 1. 추상클래스의 객채화를 시도하는 예제


package java_1010;


abstract class King{

int i = 25;

abstract void draw();

}


public class Abstract_1 {

public static void main(String[] args) {

King obj = new King(); // 이 부분에서 에러 발생. 추상 클래스는 객채화 할 수 없다.

System.out.println("King 클래스의 i의 값은 = "+obj.i); // obj.i를 사용할 수 없다.

}

}


예제 2. 올바른 추상클래스의 상속 및 구현


package java_1010;


abstract class 도형{ // 추상클래스

int i = 77;

abstract void draw(); // 추상메소드

}


class 사각형 extends 도형{ // 추상클래스의 상속

void draw(){ // 추상메소드의 구현

System.out.println("사각형을 그린다.");

}

}


public class Abstract_2 {

public static void main(String[] args) {

사각형 obj = new 사각형();

System.out.println("사각형 클래스 i의 값은  = "+obj.i);

obj.draw();

}

}


예제 3. 추상클래스의 업캐스팅

package java_1010;

abstract class Style{
int i = 99;
abstract void draw();
}

class Square extends Style{
@Override
void draw(){
System.out.println("사각형을 그립니다.");
}
}

class Circle extends Style{
void draw(){
System.out.println("둥근 원을 그립니다.");
}
}

class Triangle extends Style{
void draw(){
System.out.println("삼각형을 그립니다.");
}
}

public class Abstract_3 {
public static void main(String[] args) {
Square obj1 = new Square();
Circle obj2 = new Circle();
Triangle obj3 = new Triangle();
obj1.draw();
obj2.draw();
obj3.draw();
System.out.println("=========================");
Style obj = new Square(); // 추상 클래스의 업캐스팅
// (메소드는 Square 클래스의 메소드, 변수는 Style의 변수)
obj.draw();
obj = new Circle();
obj.draw();
obj = new Triangle();
obj.draw();
}

}



2. final 예약어


final의 3가지 용법

- 클래스에 사용 : 더 이상 상속 받을 수 없는 클래스

- 메소드에 사용 : 상속 관계에서 Overriding 될 수 없다.

- 변수에 사용 : 변수의 값을 변경할 수 없다(상수화).


- 클래스에 사용(final class)


더 이상 상속이 불가능한 클래스로 final 예약어를 사용하여 정의한다.


형식 :

final class 클래스명{


}


예제 1

package java_1010;


final class WordProcess{

void input(){}

void edit(){}

void print(){}

void about(){

System.out.println("King 개발 회사");

}

}


class NewWordProcess extends WordProcess{ // final 클래스는 상속할 수 없다

void about(){

System.out.println("Queen 개발회사");

}

}


public class Final_1 {

public static void main(String[] args) {

NewWordProcess obj = new NewWordProcess();

obj.about();

}

}


- 메소드에 사용(final method)


더 이상 overriding이 불가한 메소드를 정의하고자 할때 사용한다.


예제 1.

package java_1010;


class Final_2_A{

final void display(){

System.out.println("Overriding 불가한 메소드");

}

void message(){

System.out.println("Overriding 가능한 메소드");

}

}


class Final_2_B extends Final_2_A{

/*void display(){

System.out.println("Final_2_A의 display() 메소드 재정의");

}*/

void message(){

System.out.println("Overriding 한 메소드");

}

}


public class Final_2 {


}



Posted by saudades

댓글을 달아 주세요

2013.09.24 12:37

자바의 식별자(Identifier)


: 자바에서 식별자는 클래스, 인터페이트, 변수, 메소드, 배열, 문자열 등을 구분할 수 있는 이름이다.

  이름은 다른 것과 구분해야 하기 때문에 서로 중복되지 않는 것을 사용해야 한다.

  식별자는 길이의 제한이 없고, 유니코드 문자를 사용하기 때문에 한글을 사용할 수 있따.

  대,소문자를 구분하여 사용하며, 식별자를 만드는 관례가 있다.


.식별자의 작성 규칙

 .유니 코드 문자를 사용한다.

 .공백이 없는 한 개의 단어로 구성되어야 한다

 .문자, 숫자, '_', '$'만 사용가능 하다.

 .문자와 '_', '$'로 시작해야 한다.

 .길이의 제한이 없다.

 .대-소문자를 구분한다

 .키워드는 사용할 수 없다.


변수

: 자바에서 일반적인 값을 처리하기 위해 기본형 변수와 

  객체와 배열과 같은 참조형을 처리하기 위한 참조형 변수가 있다.


  변수를 사용하기 위해서는 먼저 변수 선언을 해야 한다.

  변수 선언은 자바 가상 머신(Java Virtual Machine : JVM)에게 

  데이터를 저장하기 위한 메모리를 할당해 달라고 요청하는 것이다.


  형식


  자료형 변수이름;

  int a; // 정수형 변수 a를 위해 필요한 공간을 메모리에 확보하고, 그 기억 공간을 a라고 명명한다.

  a = 25;  // 변수에 값을 초기화 시킨다.


  Stack 메모리 공간을 사용한다.


변수의 종류

: 자료형은 자바의 특성을 그대로 반영한다. 

  자바는 객체 지향 프로그래밍 언어이기 때문에 클래스 처리를 위한 자료형과 

  문자, 정수, 실수, 논리값을 처리할 수 있는 자료형을 제공한다.


  자바에서 사용할 수 있는 자료형은 기본형과 참조형으로 구분할 수 있다.

  기본형 변수는 문자, 논리값, 정수, 실수와 같은 자료형이 있고,

  참조형은 클래스, 인터페이스, 배열 등이 있습니다.


  기본형 문자형 char

정수형 byte, short, int, long

실수형 float(소수점 이하 6자리), double(소수점 이하 15자리) (정밀도의 차이)

논리형 boolean


  참조형 클래스

인터페이스

배열


자료형 키워드 의미     표현범위 크기 기본 초기값

문자형 char         2byte 유니코드     \u0000~\ufff 2byte '\u0000'

논리형 boolean true, fault     true, fault 1byte false

정수형 byte         1byte 정수를 처리    -128~127 1byte 0

정수형 short         2byte 정수를 처리    -32768~32767 2byte 0

정수형       int         4byte 정수를 처리    -2(15)~2(15)- 4byte 0

정수형 long         8byte 정수를 처리    -2(31)~2(31)- 8byte 0l

실수형 float         4byte 실수를 처리 4byte 0.0f

실수형 double 8byte 실수를 처리 8byte 0.0




Posted by saudades

댓글을 달아 주세요

2013.09.23 11:49

사람 > OS > 컴퓨터

     (해석)


컴퓨터에서 인식하는 코드는 ASCii, 컬러코드


컴퓨터는 ascii코드를 인식하고, 2진수로 표시


A > 65

a > 97

48 > 0

13 > return(엔터)

10 > new line


인터프리터 방식 <-> 컴파일러

한줄씩 해석하여 실행 <-> 소스의 에러를 검출하고 실행 파일로 만들어 실행


자바는 두 방식 모두 지원 (인터프리터는 JVM을 통해 지원)


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


2013-09-23  오전 10:40    <DIR>          .

2013-09-23  오전 10:40    <DIR>          ..


. 은 현재 디렉토리

.. 은 상위 디렉토리


웹 상에서는 상대 디렉토리를 표현하기 위해 '..'을 사용한다.

클래스 패스 설정 시 '.'을 사용하는데, 자기 자신의 위치 부터 검색한다는 뜻


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


c:\kbs>copy con abcd.txt

abcd

abcd

abcd

abcd

abcd

^Z

글자수를 20개만 입력했는데, 30byte로 표시되는 이유는

엔터키를 누를 때마다, ascii 13(carriage return)과 10(New line)이 함께 들어가기 때문


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


파일의 확장자 > 의미를 준다.

(*임의적으로 지정하지 않는 것이 좋다)


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

----from---to---

copy con fff.txt  console로부터 fff.txt로 복사 > 파일로 입력


copy fff.txt con  fff.txt로부터 console로 복사 > 모니터로 출력


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


C:\kbs>abc

'abc'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는

배치 파일이 아닙니다.


내부 명령어

외부 명령어

실행할 수 있는 프로그램

배치 파일 > 내부 명령어 외부 명령어 프로그램을 배치 시킨 파일.


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

File 목록을 모두 보는 4가지 방법

dir

dir *.*

dir ????????.???

dir .


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

외부명령어는 

외부명령어가 포함되어 있는 디렉터리에 있거나,

PATH에 포함되어 있어야 실행가능


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


상대경로와 절대경로


..\..\..\


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


바탕화면/폴더명,파일명을 한글로 하지 말것


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


자바에서의 고비

클래스

생성자


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

Posted by saudades

댓글을 달아 주세요

2013.09.17 11:07

Day 7

 


배열(Array) : 변수를 모아 놓은 것

변수 : 1개의 값을 저장

배열 : 여러개의 값을 순서대로 저장

 


사용 예) int []a = {1,2,3,4,5,6,7,8,9,10} // 배열의 초기치 설정

int : 데이터형

[] : 배열

a : 배열이름

a[n] : a라는 배열의 n번째

 


※객체도 배열에 저장이 가능하다.

 


정렬(sort) : 차례대로 나열

오름차순(asending) - 작은 수부터 차례대로, default

내림차순(desending) - 큰 수부터 차례대로

 


선택정렬

버블정렬

삽입정렬

Heap정렬

 


삽입정렬

 


횟수 |기준(i)|비교(j)

1 |0 |1,2,3,4

2 |1 |2,3,4

3 |2 |3,4

4 |3 |4

 


=========================================================================

//홀수의 합을 구하는 과정

 

 

 

public class Sample {

 


public static void main(String[] args){


//int []a=new int [5]; // a[0]~a[4]까지 기억장소 확보

int []a={1,2,3,4,5}; // 배열의 초기화

int sum=0; // 사용할 변수의 초기화

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

if(a[i]%2==1){ // 2로 나눈 나머지 값이 1, 즉 홀수

sum = sum + a[i]; // 합을 구하는 과정

System.out.println(a[i]); // a[i] 값을 화면에 출력

}else{


}

}

System.out.println(sum); // 화면에 출력

}

}

 


실행결과

 


1

3

5

9

 

 

 

=========================================================================

//배열의 최대값과 최소값을 입력

 


public class Sample {

 


public static void main(String[] args){


//int []a=new int [5]; // a[0]~a[4]까지 기억장소 확보

int []a={1,2,3,6,99,4,5,0}; // 배열의 초기화

int max=a[0]; // 사용할 변수의 초기화

int min=a[0];

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

if(max < a[i]){ // a[i]가 max보다 큰가?

max = a[i]; // a[i]가 max보다 크면, a[i]를 max에 입력

}

if(min > a[i]){ // min가 a[i]값보다 큰가?

min = a[i]; // min이 a[i]보다 크면, a[i]를 min에 입력

}

}

System.out.println(max); // max를 화면에 출력

System.out.println(min); // min을 화면에 출력

}

}

 


실행결과

 


99

0

 


=========================================================================

// 정렬의 개념

public class Sample {

 


public static void main(String[] args){

 

 

 

int a=10, b=30;

int c=0;


c=a;

a=b;

b=c;


System.out.println(a);

System.out.println(b);

 


}

}

=========================================================================

// 삽입 정렬 예제

public class Sample {

 


public static void main(String[] args){

 


int a[] =  {6,9,3,5,1,10,4,99,40};

int c=a[0]; // 임시저장소


for(int i=0;i<(a.length-1); i++){// 기준점

for(int j=i+1;j<a.length;j++){ // 비교점

if(a[i]>a[j]){ // 기준점이 비교점보다 큰가?

c = a[j]; // 1.임시저장소에 a[j]값을 저장

a[j]=a[i]; // 2.a[j]에 a[i]값을 입력

a[i]=c; // 3.a[i]에  저장된 a[j]값을 입력 1~3 과정을 거치면서 값이 교체됨

}else{


}

}

}

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

System.out.print(a[i]+"|");

}

}

}

 


=========================================================================

// ~로 시작하는 문자열, ~로 끝나는 문자열, ~를 포함하는 문자열 찾기

public class Sample {

 


public static void main(String[] args){


String add[] = {"서울시 강남구 역삼동", "경기도 안양시 목감동", "서울시 동대문구", "서울시 은평구 녹번동", "강원도 원주시", "서울시 서초구 서초동", "인천시 남동구 논현동"}; // 배열의 초기치

String cmp = new String();

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

if(add[i].endsWith("동")){//startsWith(String n)//n으로 시작하는, contains(String s)//s를 포함하는

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

}


}

 


}

}

 


=========================================================================

// 석차구하는 예제

public class Sample {

 


public static void main(String[] args){

//5명의 점수 입력!! 5명의 석차를 구하시오.

int a[]={50,80,70,60,90,34,56,67,87,23,45};

int b[]= new int[a.length];

// 처리 => 석차를 구하는 과정

int c;

int r;

for(int i=0;i<a.length; i++){// 기준점

r=1;

for(int j=0;j<a.length;j++){ // 비교점


if(a[i]<a[j]){

r++;

}else{


}

}

b[i]=r;

}


// 출력

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

System.out.println(a[i]+"=="+b[i]);

}

}

}

=========================================================================

// 난수 생성

import java.util.Random;

public class Sample {

 


public static void main(String[] args){


Random rr = new Random();

int b[] = new int[6];

for(int i=1;i<=60000;i++){

int a = 1+rr.nextInt(6);

System.out.println(a);

b[a-1]++;//배열의 포인트

}


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

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

}

 

 


}

}

 


=========================================================================

public class Sample {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int hap, i, j, k=0;
  int ar[][] = new int[5][5];
  for(hap=0;hap<=8;hap++){
   for(i=0;i<=4;i++){
    for(j=0;j<=4;j++){
     if(i+j==hap){
      k++;
      ar[i][j]=k;
     }else{
      
     }
    }
   }
  }
  for(i=0;i<=4;i++){
   for(j=0; j<=4;j++){
    System.out.print(ar[i][j]+"\t");
   }
   System.out.println();
  }
  
 }
}

결과

1 2 4 7 11 
3 5 8 12 16 
6 9 13 17 20 
10 14 18 21 23 
15 19 22 24 25 


=========================================================================
위의 예제를 좀더 효율적으로 바꾼 예
for문 1개가 삭제됨


public class Sample {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int hap, i, j, k=0;
  int ar[][] = new int[5][5];
  for(hap=0;hap<=8;hap++){
   for(i=0;i<=4;i++){
     j = hap - i;
     if(j<0){
      break;
     }else if(j>4){
      
     }
     else{
      k++;
      ar[i][j]=k;
    }
   }
  }
  for(i=0;i<=4;i++){
   for(j=0; j<=4;j++){
    System.out.print(ar[i][j]+"\t");
   }
   System.out.println();
  }
  
 }
}

 


=========================================================================
위 예제의 좀더 효율적인 예


public class Sample {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int hap, i, j, k=0;
  int ar[][] = new int[5][5];
  for(hap=0;hap<=8;hap++){
   for(i=0;i<=4;i++){
     if(i>hap){
      break;
     }else{
      j=hap-i;
      if(j>4){
       
      }else{
       k++;
       ar[i][j]=k;       
      } 
     }
    }
   }
  for(i=0;i<=4;i++){
   for(j=0; j<=4;j++){
    System.out.print(ar[i][j]+"\t");
   }
   System.out.println();
  }
  
 }
}

=========================================================================
마방진 예제


public class Sample {

 public static void main(String[] args) {
  // 마방진 예제 ; 가로합 = 세로합 = 대각선합; 마방진은 반드시 홀수
  int i, j, r=0, c=2; // i,j는 반복횟수 ,r행 ,c열
  int ar[][] = new int[5][5];
  for(i=1;i<=25;i++){
   ar[r][c]=i; // 최초로 a[0][2]=1을 기억
   if(i%5==0){
    r++;
   }else{
    r--;
    if(r<0){
     r=4;
    }
    c++;
    if(c>4){
     c=0;
    }
   }
   
  }
  
  for(i=0;i<=4;i++){
   for(j=0; j<=4;j++){
    System.out.print(ar[i][j]+"\t");
   }
   System.out.println();
  }
  
 }
}

=========================================================================
1. 1의 행과 열을 파악
2. 3행 3열이면 데이터 1-9 3의 배수
5행 5열이면 1-25 5의 배수
7행 7열이면 1-49 7의 배수
3. 2의 조건에 만족하면 분석
조건이 예--- 행이 증가 또는 열이 감소
노 -- 행이 증가 또는 감소
행이 마지막 행보다 크면 0
행이 0미만이면 마지막 행으로 초기화

다음과 같은 마방진이 되도록 하시오


9 2 25 18 11 
3 21 19 12 10 
22 20 13 6 4 
16 14 7 5 23 
15 8 1 24 17 

 


public class Sample {

 public static void main(String[] args) {
  // 마방진 예제 ; 가로합 = 세로합 = 대각선합; 마방진은 반드시 홀수
  int i, j, r=4, c=2; // i,j는 반복횟수 ,r행 ,c열
  int ar[][] = new int[5][5];
  for(i=1;i<=25;i++){
   ar[r][c]=i;
   if(ar[r][c]%5==0){
    r--;
    if(r<0){
     r=4;
    }
   }else{
    r++;
    c--;
    if(c<0){
     c=4;
    }
    if(r>4){
     r=0;
    }
   }  
   
   
  }
  for(i=0;i<=4;i++){
   for(j=0; j<=4;j++){
    System.out.print(ar[i][j]+"\t");
   }
   System.out.println();
  } 
 }
}


=========================================================================

// 급여를 각 화폐 단위의 매수를 구하는 예제

import java.util.Scanner;


public class Sample {

 public static void main(String[] args) {
  // 급여를 각 화폐 단위의 매수를 구하는 예제
  System.out.println("급여를 입력하세요: ");
  Scanner sc = new Scanner(System.in);
  int don = sc.nextInt();
  int m[]={50000,10000,5000,1000,500,100,50,10,5,1};
  int p=0;
  
  for(int i=0;i<m.length;i++){
   p=don/m[i];
   don = don - (p*m[i]);
   System.out.println(m[i]+"원 : "+p+"장");
  }
  
 }
}


=========================================================================

Posted by saudades

댓글을 달아 주세요

2013.09.16 17:54

클래스 = 변수 + 함수

변수의 종류 : 정수(int), 실수(double), 문자열(String), 논리형(boolean), 문자(char)

정수 1byte(byte), 2 byte(short), 4byte(int), 8byte(long)

실수 4byte(float), 8byte(double)

문자열 String



형변환

정수형 <> 문자형 (int) or (char)

정수형 <> 실수형 (int) or (double)


조건 비교문

if(){

}else if(){

}else{

}


예외처리


=====================================================================================

import java.util.Scanner;


public class Sample {


public static void main(String[] args) {

// 입력 받은 문자가 대문자이면 소문자로, 소문자이면 대분자로 변환

// 대문자이면 65~90, 소문자이면 95~120

Scanner sc = new Scanner(System.in);

String ss = "KOrea";

// 1. 문자열의 자료를 1문자씩 5번 반복 charAt();

// 2. 자른 1개의 문자값이 65~90이면, 대문자 + 32

// 3.3 자른1개의 문자값이 97~122이면, 소문자 - 32

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

char c=ss.charAt(i);

if(c>=65 && c<=90){

c = (char)(c+32);

System.out.print(c);

}else{

c = (char)(c-32);

System.out.print(c);

}

}

}

}

=====================================================================================

import java.util.Scanner;


public class Sample {


public static void main(String[] args) {

// 입력 받은 문자가 대문자이면 소문자로, 소문자이면 대분자로 변환

// 대문자이면 65~90, 소문자이면 95~120

Scanner sc = new Scanner(System.in);

String ss = "KOrea";

// 1. 문자열의 자료를 1문자씩 5번 반복 charAt();

// 2. 자른 1개의 문자값이 65~90이면, 대문자 + 32

// 3.3 자른1개의 문자값이 97~122이면, 소문자 - 32

for(int i=0;i<ss.length();i++){ // ss.length() 스트링 객체의 길이를 나타냄

char c=ss.charAt(i);

if(c>=65 && c<=90){

c = (char)(c+32);

System.out.print(c);

}else{

c = (char)(c-32);

System.out.print(c);

}

}

}

}

=====================================================================================

import java.util.Scanner;


public class Sample {


public static void main(String[] args) {

// 입력 받은 문자가 대문자이면 소문자로, 소문자이면 대분자로 변환

// 대문자이면 65~90, 소문자이면 95~120

Scanner sc = new Scanner(System.in);

System.out.println("변환할 영문자를 입력하세요 : ");

String ss = sc.nextLine();

// 1. 문자열의 자료를 1문자씩 5번 반복 charAt();

// 2. 자른 1개의 문자값이 65~90이면, 대문자 + 32

// 3.3 자른1개의 문자값이 97~122이면, 소문자 - 32

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

char c=ss.charAt(i);

if(c>=65 && c<=90){

c = (char)(c+32);

System.out.print(c);

}else if(c>=92 && c<=122){

c = (char)(c-32);

System.out.print(c);

}else{ // 대문자도 소문자도 아닌 경우

System.out.print(c);

}

}

}

}


=====================================================================================

import java.util.Scanner;


public class Sample {


public static void main(String[] args) {

// 입력받은 문자열 중에서 숫자만 출력하기

Scanner sc = new Scanner(System.in);

System.out.println("변환할 영문자를 입력하세요 : ");

String ss = sc.nextLine();

// 1문자씩 잘라내기 위해 문자열의 길이만큼 반복

// 1문자의 값이 숫자의 범위의 길이만큼 복원

// 숫자의 범위 48~57

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

char c=ss.charAt(i);

if(c>=48 && c<=57){

System.out.print(c);

}else if(c=='-'){

System.out.print(c);

}else{

}

}

}

}


=====================================================================================

import java.util.Scanner;


public class Sample {


public static void main(String[] args) {

// 입력받은 문자열 중에서 숫자만 출력하기

Scanner sc = new Scanner(System.in);

System.out.println("주민번호를 입력하세요.(-포함 14자)");

String ss = sc.nextLine();

int a = ss.indexOf("-"); // 없으면 -1을 return, 있으면 위치를 return

System.out.println(a);

if(a==6){

System.out.println("올바른 위치");

}else{

System.out.println("올바르지 않은 위치");

}

if(ss.contains("-")){

System.out.println("-이 존재함");

}else{

System.out.println("-이 존재하지 않음");

}

}

}


=====================================================================================

import java.util.Scanner;


public class Sample {


public static void main(String[] args) {

int i,j,k;

for(i=2; i<=8; i=i+3){

for(j=1; j<=9; j++){

for(k=i; k<=i+2;k++){

if(k==10)break;

System.out.print(k+"*"+j+"="+(k*j)+"\t");

}System.out.println();

}

}

}

}


=====================================================================================


=====================================================================================

Posted by saudades

댓글을 달아 주세요

2013.09.12 17:52

함수 : Function(Method) 1개의 기능을 갖음

클래스 : 필드(변수)와 메소드로 구성. 생성자.

메소드 구성

1. 이름 - 사용자가 변수처럼 정의

2. 타입(void, int, double, String, char...) 오늘은 void, int, String 타입을 언급

3. ()와 {}가 존재

() 안에는 매개변수가 존재 > 이것을 통해서 값을 전달

{}는 body라고 부르기도 하며 > 메소드의 기능을 구현하는 부분

body가 없는 함수를 추상함수라 한다.

4. 타입 중에서 return이 없으면 void 타입

return 값이 있으면 그 외의 타입


사용예)

public type name(){ 

메소드 기능

}


Class는 틀, 객체는 틀로 생성된 물건

Java에서는 객체 단위로 주소가 할당이 됨


Class 내에 filed(멤버변수)와 method(함수) 외의 항목이 들어가면 에러가 발생


함수의 종류

1. 매개변수가 없고, return 값도 없는 경우 타입이름()

2. 매개변수가 없고, return 값이 있는 경우

3. 매개변수가 있고, return 값이 없는 경우

실인수와 가인수의 갯수와 타입이 반드시 일치해야 함!!

실인수 : 숫자 - 넘겨 주는 값

가인수 : 변수 - 넘겨 받는 값

기능 분담

4. 매개변수가 있고, return 값도 없는 경우


예제 1)

두 수를 입력받아, 작은 수부터 큰 수까지의 합을 구하는 프로그램



=============================================================================

// 두 수를 받아서 합을 구하는 클래스

// class Sam의 구성요소는 int a,b,sum의 멤버변수와 method인 output으로 구성됨


class Sam{ // 클래스는 field와 method로 구성

int a,b,sum; // field

// System.out.println(sum); 여기에 실행문을 작성하면 에러가 발생함

public void output(){ // method

sum = a + b;

System.out.println(sum);

}

}

=============================================================================

// 두 수를 받아서 합을 구하는 클래스

class Sam{ // 클래스는 field와 method로 구성

int a,b,sum; // field

// System.out.println(sum); 여기에 실행문을 작성하면 에러가 발생함

public void output(){ // method 합을 출력하는 함수

sum = a + b;

System.out.println(sum);

hi();

}

public void hi(){

System.out.println("왜!!");

koko();

}public void koko(){

System.out.println("그냥");

}

}


public class Hap {


public static void main(String[] args) {

Sam s; // 객체 선언

s = new Sam(); // 객체 생성

Sam j = new Sam(); // 객체 선언과 동시에 생성 

System.out.println(s.hashCode());//hashCode() 메모리의 주소

System.out.println(j.hashCode());

s.a=32;

s.b=1;

s.output();

j.a=1;

j.b=2;

j.output();

}

}

============================================================================

매개변수가 없고, return 값이 없는 함수의 예


class Sam{

long start, end;

double sec;

public void process(){

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

System.out.println("김영철"+i);

}

}

public void time(){

start=System.currentTimeMillis();

process();

end=System.currentTimeMillis();

sec = (double)(end - start)/1000;

System.out.println(sec);

}


}


public class Hap {


public static void main(String[] args) {

Sam s = new Sam();

s.time();

}

}

===============================================================

// 함수의 종류 2번째 예제 (매개변수는 없고, return 값이 있는 함수

class Sam{

int kor,mat,eng,tot,avg;

public int total(){

return kor+eng+mat;

}

public int average(){

return (total()/3);

}

public void print(){

System.out.println("국어의 점수는 : "+kor+"입니다.");

System.out.println("영어의 점수는 : "+eng+"입니다.");

System.out.println("수학의 점수는 : "+mat+"입니다.");

System.out.println("국영수 점수의 총점은 : "+total()+"점입니다.");

System.out.println("국영수 점수의 평균은 : "+average()+"점입니다.");

}


}


public class Hap {


public static void main(String[] args) {

Sam s = new Sam();

s.kor=100;

s.eng=80;

s.mat=70;

s.print();

}

}


===============================================================

// 함수의 종류 3번째 예제 (매개변수가 있고, return 값이 없는 함수

class Sam{

public void aaa(){

bbb(6); // 실인수

}

public void bbb(int a){ //가인수

System.out.println(a);

}


}


public class Hap {


public static void main(String[] args) {

Sam s = new Sam();

}


}

===============================================================

// 함수의 종류 4번째 예제 (매개변수가 있고, return 값도 있는 함수)

class Sam{


public void aaa(){

int b = bbb(6);

System.out.println(b);

}

public int bbb(int a){

return a*a;

}


}


public class Hap {


public static void main(String[] args) {

Sam s = new Sam();

s.aaa();

}


}


===============================================================

//키보드 입력 추가


import java.util.Scanner;



// 함수의 종류 4번째 예제 (매개변수가 있고, return 값도 있는 함수)

class Sam{


public void aaa(int a, int b){

bbb(a,b);

}

public void bbb(int a, int b){

System.out.println(a+b);

}


}


public class Hap {


private static Scanner sc;


public static void main(String[] args) {

Sam s = new Sam();

sc = new Scanner(System.in);

int a, b;

System.out.println("첫번째 수를 입력하세요 : ");

a = sc.nextInt();

System.out.println("두번째 수를 입력하세요 : ");

b = sc.nextInt();

System.out.print("두 수의 합 : ");

s.aaa(a, b);

}


}


===============================================================


import java.util.Scanner;


// 함수의 종류 4번째 예제 (매개변수가 있고, return 값도 있는 함수)

class Sam{

private int kor, eng; // 멤버 변수에 접근을 제한

public void init(int a, int b){ // 제한된 멤버 변수에 접근하기 위한 함수

kor=a;

eng=b;

}

public void out(){

System.out.println("국어 : "+kor);

System.out.println("영어 : "+eng);

System.out.println("총점 : "+(kor+eng));

}

}


public class Hap {


private static Scanner sc;


public static void main(String[] args) {

Sam s = new Sam();

sc = new Scanner(System.in);

s.init(76,30);

s.out();

}


}


===============================================================

import java.util.Scanner;


// 함수의 종류 4번째 예제 (매개변수가 있고, return 값도 있는 함수)

class Sam{

private int kor, eng;

public void init(int a, int b){

kor=a;

eng=b;

}

public void out(){

System.out.println("국어 : "+kor);

System.out.println("영어 : "+eng);

System.out.println("총점 : "+(kor+eng));

}

}


public class Hap {


private static Scanner sc;


public static void main(String[] args) {

Sam s = new Sam();

sc = new Scanner(System.in);

s.init(76,30); // 생성자 = 멤버 변수를 초기화 하는 기능 

s.out();

}


}


===============================================================


import java.util.Scanner;


// 키보드에서 값을 받아서, 해당하는 구구단을 출력하는 기능

class Sam{

private int number;

public void init(int a){

number = a;

}

public void out(){

for(int i=1;i<=9;i++){

System.out.println(number+"*"+i+"="+(number*i));

}

}

}


public class Hap {


private static Scanner sc;


public static void main(String[] args) {

Sam s = new Sam();

sc = new Scanner(System.in);

System.out.print("출력하고자 하는 구구단 수를 입력하세요 : ");

s.init(sc.nextInt());

s.out();

}


}

=======================================================================

// 학점을 입력받아 등급을 출력하는 class 작성


import java.util.Scanner;


class Grade{

public String score(int a){

if(a>=90){

return "수";

}else if(a>=80){

return "우";

}else if(a>=70){

return "미";

}else if(a>=60){

return "양";

}else{

return "가";

}

}

public void printsc(int x){

System.out.print("학점은 다음과 같습니다 : ");

System.out.println(score(x));

}

}


public class Sample {


private static Scanner sc;


public static void main(String[] args) {

sc = new Scanner(System.in);

System.out.println("학점을 입력하세요 : ");

int a = sc.nextInt();

Grade s = new Grade();

s.printsc(a);

}

}


=======================================================================

// K♥O♥R♥E♥A♥S♥E♥O♥U♥L 출력


public class Addressbook {


public static void main(String[] args) {

StringBuffer aa = new StringBuffer("KOREASEOUL");

StringBuffer bb = new StringBuffer(); // bb 라는 StringBuffer 객체 생성


for(int i=1;i<aa.length();i=i+2){ // ♥를 사이사이에 입력하는 반복문

bb = aa.insert(i,"♥"); //StringBuffer에 있는 intert라는 메소드를 사용해서 i번째에 하트를 입력

}

System.out.println(bb);

}

}



Posted by saudades

댓글을 달아 주세요

2013.09.11 17:06

int i;

for(i=1; i<=10; i++){

if(i%3==0){

System.out.println(i+"김영철");

}else{

}

}

System.out.println(i);

========================================================

public static void main(String[] args) {

// TODO Auto-generated method stub

int i, sum=0;

for(i=1; i<=10; i++){

sum = sum+i;

}

System.out.println(sum);

}

========================================================

int i, osum=0, isum=0;

for(i=1; i<=100; i++){

if(i%2==0){//짝수의 합

isum=isum+i;

}else{//홀수의 합

osum=osum+i;

}

}

System.out.println(osum);

System.out.println(isum);

========================================================

int i, sum=0;

for(i=1;i<=100;i++){

sum=i+sum;

if(sum>3000){

System.out.println(i);

break;

}else{

System.out.println(sum);

}

}

========================================================

Random rn = new Random(); // 임의의 숫자 생성 객체 선언

Scanner sc = new Scanner(System.in); //

int a=rn.nextInt(100)+1;

for(int i=1; i<=10; i++){

System.out.print("숫자를 입력하세요 :");

int b=sc.nextInt();

if(a == b){

System.out.println("정답입니다.");

return;

}else if(b>a){

System.out.println("입력한 숫자보다 작은 수입니다.");

}else{

System.out.println("입력한 숫자보다 큰 수 입니다.");

}

}

System.out.println("틀렸습니다");

========================================================


Scanner sc = new Scanner(System.in);

while(true){

System.out.println("계속할까요?(y/N)");

String q=sc.next();

System.out.println(q);

if(q.equals("n")||q.equals("N")){

break;

}else{

}

}

========================================================

int i, j;

for(i=2;i<=9;i++){

for(j=1;j<=9;j++){

System.out.println(i+"*"+j+"="+(i*j));

}

}

========================================================

int i,j,k;

for(i=1; i<=5; i++){

for(j=1;j<=3;j++){

for(k=1;k<=5;k++){

if(i*200+j*300+k*100==2000){

System.out.println("사과의 갯수는 "+i+"개");

System.out.println("배의 갯수는 "+j+"개");

System.out.println("귤의 갯수는 "+k+"개");

}else{

}

}

}

}

========================================================

public static void main(String[] args) {

int []a={26,45,65,23,87,97};//배열의 초기화

int cn=0;

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

if(a[i]%2==1){

cn++;

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

}

}

System.out.println(cn);

}

========================================================

int []a={26,45,65,23,87,97};//배열의 초기화

int []b={5,6,7,8,3,1,3};

int c[]=new int[a.length+b.length];

System.out.println("배열c의 길이는 "+c.length+"입니다.");

System.arraycopy(a, 0, c, 0, a.length);

System.arraycopy(b, 0, c, a.length, b.length);

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

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

}

========================================================

int a[][]=new int[3][3];

int i,j,k=0;//k는 데이터 입력을 위한 변수

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

for(j=0;j<=2-i;j++){

k++;

a[i][j]=k;

System.out.print(a[i][j]);

}

System.out.println();

}

========================================================

int a[][]=new int[5][5];

int i,j,k=0;//k는 데이터 입력을 위한 변수

for (i=0;i<=4;i++){

if(i%2==0){

for(j=0;j<=4;j++){

k++;

a[i][j]=k;

}

}else{

for(j=4;j>=0;j--){

k++;

a[i][j]=k;

}

}

}

========================================================

for (i=0;i<=4;i++){

for(j=0;j<=4;j++){

System.out.print(a[i][j]+"\t");

}

System.out.println();

}


int a[][]=new int[5][5];

int i,j,k=0;//k는 데이터 입력을 위한 변수

int p=1,c=-1;

for (i=0;i<=4;i++){ // i=0행 짝수행

for(j=0;j<=4;j++){

k++;

c=c+p;

a[i][c]=k;

}

c=c+p;

p=p*-1;

}

for (i=0;i<=4;i++){

for(j=0;j<=4;j++){

System.out.print(a[i][j]+"\t");

}

System.out.println();

}

Posted by saudades

댓글을 달아 주세요

2013.09.10 17:28

========================================================
  int a,b,sum;
  a = -1;
  b = 65535;
  sum = a+b;
  System.out.println(a+"+"+b+"="+sum);
========================================================
  // 두수를 입력하여 합,곱,몫,나머지를 구하시오.
  
  int a, b, sum, mul, div, res;
  a = 1;
  b = 1;
  sum = a+b;
  mul = a*b;
  div = a/b;
  res = a%b;
  System.out.println(a+"+"+b+"="+sum);
  System.out.println(a+"+"+b+"="+mul);
  System.out.println(a+"+"+b+"="+div);
  System.out.println(a+"+"+b+"="+res);
========================================================
  // 국어, 영어, 수학을 입력하고, 총점과 평균을 구하시오.
  
  int kor, eng, math, total;
  double average;
  
  kor = 60;
  eng = 70;
  math = 70;
  total = kor+eng+math;
  average = (total) / 3.0;
  
  /* 실수 = 정수 / 실수
   * 실수 = 실수 / 실수
   * 정수 = 실수 / 정수
   */
  
  System.out.println("세 과목 점수의 총합은 "+total+"입니다.");
  System.out.println("세 과목 점수의 평균은 "+average+"입니다.");
========================================================
  // 국어, 영어, 수학을 입력하고, 총점과 평균을 구하시오.
  
  int kor, eng, math, total;
  double average;
  
  Scanner sc = new Scanner(System.in); // system으로 입력 받을 객체 생성
  System.out.print("국어 점수를 입력하세요 : ");
  kor = sc.nextInt(); // 입력한 값을 변수에 입력
  System.out.print("영어 점수를 입력하세요 : ");
  eng = sc.nextInt();
  System.out.print("수학 점수를 입력하세요 : ");
  math = sc.nextInt();
  total = kor+eng+math;
  average = (total) / 3.0; 
  sc.close();
  
  /* 실수 = 정수 / 실수
   * 실수 = 실수 / 실수
   * 정수 = 실수 / 정수
   */
  
  System.out.println("세 과목 점수의 총합은 "+total+"입니다.");
  System.out.println("세 과목 점수의 평균은 "+average+"입니다.");
========================================================
  Scanner sc = new Scanner(System.in);
  String name;
  int a;
  System.out.print("이름을 입력하세요 : ");
  name = sc.nextLine();
  System.out.print("숫자를 입력하세요 : ");
  a = sc.nextInt();
  System.out.println(name);
  System.out.println(a);
========================================================
  // 국어, 영어, 수학을 입력하고, 총점과 평균을 구하시오.
  
  int kor, eng, math, total;
  double average;
  
  Scanner sc = new Scanner(System.in); // system으로 입력 받을 객체 생성
  System.out.print("국어 점수를 입력하세요 : ");
  kor = sc.nextInt(); // 입력한 값을 변수에 입력
  System.out.print("영어 점수를 입력하세요 : ");
  eng = sc.nextInt();
  System.out.print("수학 점수를 입력하세요 : ");
  math = sc.nextInt();
  total = kor+eng+math;
  average = (total) / 3.0; 
  sc.close();
  
  /* 실수 = 정수 / 실수
   * 실수 = 실수 / 실수
   * 정수 = 실수 / 정수
   */
  
  System.out.println("세 과목 점수의 총합은 "+total+"입니다.");
  System.out.println("세 과목 점수의 평균은 "+average+"입니다.");
  
  if((average>=60)|| (kor>=40)||(eng>=40)||(math>=40)){
   System.out.println("합격");
  }else{
   System.out.println("불합격");
  }
========================================================
  System.out.print("숫자를 입력하세요 : ");
  Scanner sc = new Scanner(System.in);
  int a = sc.nextInt();
  
  if(a%2==0){
   System.out.println(a+"는 짝수입니다.");
  }else{
   System.out.println(a+"는 홀수입니다.");
  }
========================================================
Modifier and Type에 static 형이 나오면 class.method를 입력해야 함

  System.out.print("숫자를 입력하세요 : ");
  Scanner sc = new Scanner(System.in);
  int a = sc.nextInt();
  
  System.out.println(Integer.toBinaryString(a));
  System.out.println(Integer.toOctalString(a));
  System.out.println(Integer.toHexString(a));
========================================================

Posted by saudades

댓글을 달아 주세요