앞 포스팅과 다른점은 try-catch 위치 변경.
package Test03;


class MainClass {
	public static void main(String[] args) {
		// 객체 생성, 메서드 호출, for한번 허용
		MultiplicationTable play = new MultiplicationTable();
		for (int chk = 0; chk != 1;) {
			try {
				chk = play.inputValue(chk);
				play.outputResult();
			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
	}
}
package Test03;

import java.util.Scanner;

class MultiplicationTable {
	int input_first, input_last;

	int inputValue(int chk) throws Exception {
		// 입력
		Scanner in = new Scanner(System.in);
		System.out.print("구구단의 시작단을 입력하세요 ");
		this.input_first = in.nextInt();
		System.out.print("구구단의 마지막단을 입력하세요  ");
		this.input_last = in.nextInt();

		// 예외 발생시키기
		if (input_first > input_last) {
			throw new Exception("시작단은 마지막단보다 작아야합니다.");
		}
		if ((input_first < 2) || (input_last > 9)) {
			throw new Exception("구구단은 2~9단을 입력하세요.");
		}
		// 예외가 일어나지 않아야 밑으로 이동
		chk = 1;
		return chk;

	}

	void outputResult() {
		for (int dan = input_first; dan <= input_last; dan += 3) {
			for (int line = 1; line < 10; line++) {
				System.out.printf(dan > input_last ? " " : "%d x %d = %2d  ",
						dan, line, (dan * line));
				System.out.printf(dan + 1 > input_last ? " "
						: "%d x %d = %2d  ", dan + 1, line, ((dan + 1) * line));
				System.out.printf(dan + 2 > input_last ? "\n"
						: "%d x %d = %2d\n", dan + 2, line, ((dan + 2) * line));
			}
			System.out.println("");
		}
	}
}
public class MainClass02 {
	public static void main(String[] args) {
		MultiplicationTable start = new MultiplicationTable();
		start.inputValue();
		start.outputResult();
//		start.outputResult2();
	}
}
import java.util.Scanner;

public class MultiplicationTable {
	int input1, input2;

	void inputValue() {
		// void inputValue() throws Exception{
		int chk = 0;
		while (chk != 1) {
			try {
				// 입력
				Scanner in = new Scanner(System.in);
				System.out.print("first value : ");
				this.input1 = in.nextInt();
				System.out.print("second value : ");
				this.input2 = in.nextInt();

				// 예외 발생시키기
				if ((input1 > input2)) {
					throw new Exception("\n첫번째 값은 뒷자리보다 작은 수를 입력하시오.\n");
				} else if ((input1 > 9) || (input2 > 9)) {
					throw new Exception("\n9 미만의 수를 입력하시오.\n");
				}

				// 예외가 일어나지 않아야 밑으로 이동
				chk = 1;
			} catch (Exception e) {
				System.err.println(e.getMessage());
				// System.err.println(e);
			}
		}
	}

	void outputResult() {
		for (int dan = input1; dan <= input2; dan += 3) {
			for (int line = 1; line < 10; line++) {
				System.out.printf(dan > input2 ? " " : "%d x %d = %2d  ", dan,
						line, (dan * line));
				System.out.printf(dan + 1 > input2 ? " " : "%d x %d = %2d  ",
						dan + 1, line, ((dan + 1) * line));
				System.out.printf(dan + 2 > input2 ? "\n" : "%d x %d = %2d\n",
						dan + 2, line, ((dan + 2) * line));
			}
			System.out.println("");
		}
	}
}


public class StarTest {

	public static void main(String args[]) {
		int input = 5;
		int st = 0;
		input = (input % 2 == 0) ? input - 1 : input;

		for (int line = 0; line < input; line++) { 
			for (int put = 0; put < (input - st); put++) {
				System.out.print((put >= st) ? "*" : " ");
			}
			st = line < (input / 2) ? st + 1 : st - 1;
			System.out.println();
		}
	}
}

설명




public class Star08 {
	public static void main(String args[]) {

		int in = 5;
		int st = 0;
		for (int line = 0; line < in; line++) {
			for (int put = 0; put < in; put++) {
				System.out.print((put > st) && (put<in-st-1) ? "  " : "* ");
			}
			if (line < in / 2) {
				st++;
			} else {
				st--;
			}
			System.out.println();
		}
	}
}


import java.util.Scanner;
public class Star06 {

	public static void main(String args[]) {

		Scanner scan = new Scanner(System.in);
		System.out.print("입력하세요 >> ");
		int in = scan.nextInt();
		int star = 1;

		for (int line = 1; line <= in; line++) {
			for (int k = 1; k <= in; k++) {
				System.out
						.print(((k >= star + 1) && (k <= in - star)) ? "  "
								: "* ");
			}
			if (line <= in / 2) {
				star++;
			} else {
				star--;
			}
			System.out.println();
		}
	}
}
package SocialSecurityNumber_02;

import java.util.Scanner;

public class MainClass01 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.print("주민등록번호 : ");
		String num = in.nextLine();

		CheckNum01 chk = new CheckNum01(num);
		chk.play();
		
	}
package SocialSecurityNumber_02;

import java.util.Calendar;
import java.util.Scanner;

class CheckNum01 {
	StringBuffer num;
	int select;
	int year, month, day, sex, local, age;

	// 생성자
	CheckNum01(String temp) {
		// StringBuffer을 사용하라고 할까봐 넘겨주었는데 그닥...
		this.num = new StringBuffer(temp);

		char firstNum = num.charAt(7);

		this.year = Integer.parseInt(num.substring(0, 2));
		this.month = Integer.parseInt(num.substring(2, 4));
		this.day = Integer.parseInt(num.substring(4, 6));

		switch (firstNum) {
		case '1':
			this.year += 1900;
			this.sex = 0;
			this.local = 0;
			break;
		case '2':
			this.year += 1900;
			this.sex = 1;
			this.local = 0;
			break;
		case '3':
			this.year += 2000;
			this.sex = 0;
			this.local = 0;
			break;
		case '4':
			this.year += 2000;
			this.sex = 1;
			this.local = 0;
			break;
		case '5':
			this.year += 1900;
			this.sex = 0;
			this.local = 1;
			break;
		case '6':
			this.year += 1900;
			this.sex = 1;
			this.local = 1;
			break;
		case '7':
			this.year += 2000;
			this.sex = 0;
			this.local = 1;
			break;
		case '8':
			this.year += 2000;
			this.sex = 1;
			this.local = 1;
			break;
		case '9':
			this.year += 1800;
			this.sex = 0;
			this.local = 0;
			break;
		case '0':
			this.year += 1800;
			this.sex = 1;
			this.local = 0;
			break;
		}
	}

	// 원하는 것을 출력할 수 있도록 물어보는 메서드
	void play() {
		// while(select != 0)
		outerLoop: while (true) {
			System.out
					.println("MENU > 1: 생년월일 / 2: 나이 / 3: 성별 / 4: 내/외국인 / 0: Quit");
			System.out.print("Select Number-> ");
			Scanner in = new Scanner(System.in);
			select = in.nextInt();

			switch (select) {
			case 1:
				brithday();
				break;
			case 2:
				ageChk();
				break;
			case 3:
				sexChk();
				break;
			case 4:
				localChk();
				break;
			case 0:
				break outerLoop;
			// return;
			}
			System.out.println();
		}
		System.out.println("Quit...");
	}

	void brithday() {
		System.out.println("사용자는 '" + year + "년 " + month + "월 " + day
				+ "일생'입니다.");
	}

	void ageChk() {
		Calendar date = Calendar.getInstance();
		age = (date.get(Calendar.YEAR)) - year + 1;
		System.out.println("사용자의 나이는 '" + age + "'살 입니다.");
	}

	void sexChk() {
		System.out.println("사용자의 성별은 '" + (sex != 1 ? "남자" : "여자") + "'입니다.");
	}
	
	void localChk() {
		System.out.println("사용자는 '" +  (local != 1 ? "내국인" : "외국인") + "'입니다.");
	}
}
public class CheckNum {
	private int year, month, day, age, sex, local;
	private String num;
	Calendar date = Calendar.getInstance();

	// 생성자
	CheckNum(String num) {
		this.num = num;
	}

	/**
	 * 910000-'1'234561 생년월일, 성별, 나이 출력하기 1 : 1900년대 내국인 남자, 2: 1900년대 내국인 여자 3
	 * : 2000년대 내국인 남자, 4: 2000년대 내국인 여자 5 : 1900년대 외국인 남자, 6: 1900년대 외국인 여자 7 :
	 * 2000년대 외국인 남자, 8: 2000년대 외국인 여자 9 : 1800년대 내국인 남자, 0: 1800년대 내국인 여자 생년월일
	 * 값을 받고 Calendar 클래스 사용해서 현재나이 구함.
	 */
	void infoPrint() {
		char gender = num.charAt(7);
		year = Integer.parseInt(num.substring(0, 2));
		month = Integer.parseInt(num.substring(2, 4));
		day = Integer.parseInt(num.substring(4, 6));

		// 7번째 숫자로 성별, 년도, 내/외국인 확인
		switch (gender) {
		case '1':
			year += 1900;
			sex = 0;
			local = 1;
			break;
		case '2':
			year += 1900;
			sex = 1;
			local = 1;
			break;
		case '3':
			year += 2000;
			sex = 0;
			local = 1;
			break;
		case '4':
			year += 2000;
			sex = 1;
			local = 1;
			break;
		case '5':
			year += 1900;
			sex = 0;
			local = 0;
			break;
		case '6':
			year += 1900;
			sex = 1;
			local = 0;
			break;
		case '7':
			year += 2000;
			sex = 0;
			local = 0;
			break;
		case '8':
			year += 2000;
			sex = 1;
			local = 0;
			break;
		case '9':
			year += 1800;
			sex = 0;
			local = 1;
			break;
		case '0':
			year += 1800;
			sex = 1;
			local = 1;
			break;
		}
		age = (date.get(Calendar.YEAR)) - year + 1;

		char sexchk = sex != 1 ? '남' : '여';
		System.out.println("성별 : " + sexchk);
		System.out.println("나이 : " + age);
		System.out.println("생년월일 : " + year + "/" + month + "/" + day);
		System.out.println("내국인 : " + (local == 1 ? "yes" : "no"));
	}
}

위 코드가 전체 코드가 아니라 일부이여서 각자 맞게 사용해야한다.


public class Star05 {
	public static void main(String[] args) {
		int in = 9;
		for (int line = in; in / 2 < line; line--) {
			for (int j = 0; j < line; j++) {
				System.out.print((in - line) <= j ? "*" : " ");
			}
			System.out.println("");
		}
	}
}


public class Star04 {
	public static void main(String[] args) {
		int in = 5;
		for (int line = 0; line < in; line++) {
			for (int j = 0; j < in; j++) {
				System.out.print(line <= j ? "*" : " ");
			}
			System.out.println("");
		}
	}

}


public class Star03 {

	public static void main(String[] args) {
		int in = 5;
		for(int line = 0; line < in; line++) {
			for(int j = in; j > 0; j--) {
				System.out.print(j <= line + 1 ? "*" : " ");
			}
			System.out.println("");
		}
	}

}


public class Star02 {

	public static void main(String[] args) {
		int in = 5;
		for (int line = 0; line < in; line++) {
			for (int j = in; j > line; j--) {
				System.out.print("*");
			}
			System.out.println("");
		}
	}

}


public class Star01 {
	public static void main(String args[]) {
		int in = 5;
		for (int line = 0; line < in; line++) {
			for (int j = 0; j <= line; j++) {
				System.out.print("*");
			}
			System.out.println("");
		}
	}
}


Java programming의 메인메서드의 선언부

public static void main(String args[])

public : 다른 클래스나 메서드에서 사용되어야 하기 때문에 사용된다.

static :  메인메서드는 따로 생성되지 않고 사용될수 있어야 하기 때문에 컴파일시 바로 메모리에 올릴수 있도록 사용한다.

void : main메서드는 프로그램의 시작이자 끝이기 때문에 반환값을 void로 한다.

String args[] : 프로그램을 실행할 때 따로 매개변수로 문자열을 받을 때 사용한다.

이클립스를 이용해 자바로 작성한 프로그램을 실행시킬 수 있도록 실행파일(exe)로 변환하는 방법에 대해 포스팅하겠습니다. 준비물로는 작성된 소스파일, 이클립스, JSmooth 이렇게 세 가지가 필요합니다.

JSmooth링크와 아래 그림을 통해 다운 받으시면 됩니다.

 

1. JSmooth 설치하기

 

 

 

 

JSmooth 설치가 끝나셨다면 이클립스를 통해 jar파일을 생성하도록 하겠습니다.

 

 

2. *.jar 파일 생성하기

 

프로젝트에 오른쪽 버튼 클릭 후 Export 를 클릭합니다. 

 

Java - Rnuable JAR file 선택 후 Next로 이동합니다.

 

먼저 Export destination에 .jar파일을 저장 할 위치를 지정해주고,

Launch configuration에는 만들고자 하는 클래스와 프로젝트를 선택하고 만들어주시면 됩니다.

 

 

3. JSmooth를 이용하여 exe파일 만들기

 

위 사진은 JSmooth 첫 실행화면입니다.

 

Skeletion Selection에 콘솔창 프로그램이라면 Consol Wrapper을, 윈도우창(AWT, Swing)이라면 Windowed Wrapper을 선택 후, 윈도우창을 선택했을 경우 아래 체크하시기 바랍니다.

 

위에는 .exe 파일의 경로를 선택하시고 아래는 아이콘으로 선택합니다.

 

먼저 아래에 .jar 파일을 선택하시고, 다음 Main class에 메인클래스를 선택합니다.

 

JVM 버전을 작성합니다.

 

모두 마친 후에 Project - compile 을 선택합니다.

 

JSmoonth파일을 생성할 위치를 선택하시고나면 exe파일이 만들어집니다.

 

위 사진과 같이 바탕화면에 두개의 파일이 만들어졌습니다.

이상으로 이클립스를 이용하여 자바 실행파일 만드는 방법에 대한 포스팅을 마치겠습니다.

 

carTest.java

 생성자를 사용한 코드를 만들면서 주석을 통해 정리해봤습니다.

 

 

 

Student.java

 

생성자(Constructor) : 클래스의 이름과 같지만 리턴 값은 없는 것.(메서드와 비슷하다.)

 

● 클래스메서드(static메서드)와 인스턴스매서드 예제

public class Test {
public static void main(String[] args) {
     int num1=3;
     int num2=4;
 
     Test.add(num1,num2);                          //생성하지 않아도 static메서드 사용가능
     //Test.product(num1,num2);                  //에러. 객체생성 후에만 호출 가능.
  
     Test c = new Test();                            //객체 생성
     c.product(num1, num1);                        //참조변수를 사용해 호출해야한다.
     }
 }
class Test{
    static int staticNum=7;
    int instanceNum = 8;
 
    //클래스 메서드
    static void add(int x, int y){
       int xx=x;                                            //지역변수
       int yy=y;
       System.out.println(xx+yy);
       System.out.println(staticNum);              //static변수를 사용해야한다.
       //System.out.println(instanceNum);      //에러. 클래스메서드에서 인스턴스변수 호출할 수 없음.
    }
    //인스턴스 메서드
    void product(int x, int y){
        System.out.println(x*y);
    }
}

 

1. if

구조 

 

if(조건식)

{

//조건식에 만족할 때 수행되는 문장.

}

else if(조건식2)

{

//조건식1이 만족하지 않을 때, 조건식2로 내려와 만족하면 수행되는 문장.

}

else

{

//생략이 가능하며, 위의 어느 조건도 만족하지 않을 때 수행되는 문장.

}

 

 

* equals 메소드

 

String str1 = new String("Hello");

String str2 = new String("Hello");

 

if(str1 == str2)                            // 주소값을 비교. false

if(str1.equals(str2))                    // 변수 안에 내용을 비교하는 메소드. true

if(str1.equalsIgnoreCase(str2))    // 변수안에 대소문자 가리지않고 내용만 확인. true

 

 

2. switch

구조

 

switch(조건식){

case 값1 :

// 조건식의 값이 값1과 같을 경우 실행.

break;    // 모두 실행하고 switch문을 빠져나오기 위함.

case 값2 :

// 조건식의 값이 값2과 같을 경우 실행.

break;

default :

// 위의 조건식에 일치하지 않을 때 실행.

 

※ case문의 값으로 변수를 사용할 수 없다.(리터럴, 상수만 가능)

 

* Math 클래스의 random() : 0.0과 1.0 사이의 범위에 속하는 하나의 double값을 반환하는 메소드.

 

 임의의 문자를 얻을 수 있도록 하는 예제.

0.0 <= Math.random() <1.0

 

0.0 * 26 <= Math.random() * 26 < 1.0 * 26

0.0 <= Math.random() * 26 < 26.0

출력하고자 하는 문자의 갯수 26을 각 변에 곱한다.

 

0.0 * 26 + 65 <= Math.random() * 26 + 65 <1.0 * 26 + 65

65.0 <= Math.random() * 26 + 65 < 91.0

아스키코드 65(A)부터 시작하므로 65를 각 변에 더한다.

 

(char)65.0 <= (char)Math.random() * 26 + 65 < (char)91.0

'A' <= (char)Math.random() * 26 + 65 < '['

문자로 형변환을 한다.

 

 

3. for

구조 

 

for(초기화 ; 조건식 ; 증감식){

// 조건식에 만족할 때 수행되는 문장.

// 순서 : 초기화 → 조건식 → for문 수행 → 증감식 조건식

// for문 안에 초기화에서 변수가 선언되면 for문 안에서만 사용가능하다.

//



4. do-while

구조 

 

do{

// 조건식에 만족할 때 수행되는 문장.

// 최소한 한번은 수행되는 반복문.

}while(조건식)



5. break, continue, Loop

break     : 사용되는 위치에서 가까운 반복문을 빠져나오는데 사용된다.

continue : 반복문의 끝으로 이동하여 다음 반복이 진행된다.

Loop      : 반복문 앞에 이름을 정해주고, break이나 continue에 같이 써줘 반복문을 벗어나거나 반복을 

   건너뛸  수 있게 한다.




변수란

하나의 값을 저장할 수 있는 공간.

 

변수의 선언

변수타입 변수이름;

char name;    // 문자형 변수 name을 선언한다.

변수의 이름(메서드, 클래스의 이름도 포함)을 선언할때, 대소문자 구분해야한다.

숫자로 시작하거나, 예약어를 사용하면 안 된다.

특수문자는 '_'와 '$'만 사용가능하다.

int num = 6 ;    // 선언후 변수의 값을 6으로 초기화 한다. 

 

변수의 타입과 크기

기본형(Primitive type) : boolean, char, byte, short, int, long, float, double

참조형(Reference type) : 기본형을 제외한 나머지 타입

 

 

1 byte

2 byte

4 byte

8 byte

논리형

boolean

문자형

char

(유니코드)

정수형

byte

short

int

(기본 자료형)

long

실수형

float

double

(기본 자료형)

 

데이터 타입

변수의 범위 

 기본값

크기 

boolean

true, false

 false

1 byte

byte

\u0000~\uffff (0~65,535)

 0

1 byte

char

-128~127

 '\u000'

2 byte

short

-32,768~32,767

 0

2 byte

int

-2,147,483,648~2,147,483,647

 0

4 byte

long

-9223372036854775808~9223372036854775807

 0L

8 byte

float

1.4E-45~3.4028235E38

 0.0f

4 byte

double

4.9E-324~1.7976931348623157E308

 0.0 또는 0.0d

8 byte

 

 

 

http://docs.xrath.com/java/se/6/docs/ko/

자바6 한글문서

http://docs.xrath.com/java/se/6/docs/ko/api/index.html

자바6 한글 API 문서

 

출처 http://xrath.com/java-api-docs-ko/

2015.01.29 추가

이번에  JAVA를 다시 설치하면서 환경변수가 자동으로 설정된다는 것을 알았다.

Path를 보니 c:\ProgramData\Oracle\Java\javapath 가 지정되어 있었고, 그 디렉토리 안에는 Java가 바로가기파일로 들어있었다. 앞으로는 따로 환경변수를 지정하지 않아도 될 듯하다.





환경변수

설명

Path

OS에서 명령어를 실행할 때 명령어를 찾아야 하는 폴더의 순위를 설정하는 환경 변수

CLASSPATH

JVM이 시작될 때 JVM의 클래스 로더는 이 환경 변수를 호출한다. 그래서 환경 변수에 설정되어 있는 디렉토리가 호출되면 그 디렉토리에 있는 클래스들을 먼저 JVM에 로드한다. 그러므로 CLASSPATH 환경 변수에는 필스 클래스들이 위치한 디렉토리를 등록하도록 한다.

JAVA_HOME

JDK가 설치된 홈 디렉토리를 설정하기 위한 환경 변수다. 반드시 필요한 환경 변수는 아니지만 Path와 CALLPATH 환경 변수에 값을 설정할 때 JAVA_HOME 환경 변수를 포함하여 설정한다.


환경 변수 설정하기

JDK 설치를 하고 환경 변수를 설정하는 방법이다. 환경 변수란 실행 파일이 모여있는 디렉토리 경로를 지정함으로써 어느 위치에서든지 사용할 수 있도록 하는 것이다. 먼저 윈도우에서 환경 변수를 설정하기 창을 실행시킨다. 방법은 아래와 같다.
아래의 아무것이나 한 가지 선택해서 환경 변수 설정 창을 실행 시킨다.
1. '제어판 → 모든 제어판 항목 → 시스템' 선택 후 '고급 시스템 설정' 클릭하고 고급 탭에서 '환경 변수' 클릭.
2. 내컴퓨터 오른쪽 클릭 후 속성 선택하고 고급 탭에서 '환경 변수' 클릭.

JAVA_HOME 추가하기


'새로 만들기' 선택 후 변수 이름은 'JAVA_HOME'이고 변수 값은 자신의 컴퓨터에 설치된 JAVA의 경로를 입력한다.

Path에 ;%JAVA_HOME%\bin 추가하기


시스템 변수 Path에 마지막에 ;%JAVA_HOME%\bin을 추가한다. Path를 삭제하거나 잘못 저장한다면 복잡해질 수 있으니 조심해야 한다.

CLASSPATH 추가하기


'새로 만들기' 선택 후 변수 이름은 'CLASSPATH'이고 변수 값은 자신의 컴퓨터에 설치된 %JAVA_HOME%\lib를 입력한다.


TEST 하기

java -verion, javac -version 은 Path에 추가 되었는지 확인하기 위함이고, echo %CLASSPATH% 는 CLASSPATH가 추가 되었는지 확인하기 위함이다.


컴파일하고 실행시에 "기본 클래스 을(를) 찾거나 로드 할 수 없습니다. 라는 에러메세지가 뜬다면 다음과 같이 실행시킨다.

java -classpath ".;lib" Helloworld

혹은 CLASSPATH의 변수 값을 다음과 같이 수정한다.

%JAVA_HOME%\lib\;.


+ Recent posts