실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz 3.40GHz

 Memory

 8.00 GB

 OS

 Windows 7 Professional K 64bit

 Java

 1.8.0_05

 MySQL

 Ver 14.14 Distrib 5.6.19, for Win64


JAVA 1.8에서 GTPLookAndFeel() 대체 방법

PSSAV 에서 실행이 안되서 코드 확인해보니 한 문장에 에러가 있었다. com.sun.java.swing.plaf.gtk.GTKLookAndFeel() 인데 아마도 1.8에서는 없는 클래스 인것 같다. 그래서 다음과 같은 코드로 변경하여 해결하였다.

// 변경 전
UIManager.setLookAndFeel(new com.sun.java.swing.plaf.gtk.GTKLookAndFeel());
// 변경 후
UIManager.setLookAndFeel("Javax.swing.plaf.metal.metalLookAndFeel");


데몬 스레드(Daemon Thread)

데몬(Daemon): 
리눅스 서버에서 주로 많이 사용되며, 백그라운드 상태에서 대기하고 있다가 처리할 요청이 
발생하거나 조건 상황이 맞으면 작업을 실행하는 프로그램.
(자바를 다루는 기술 vol.1 김병무 지음. 길벗)

즉, 자바에서 데몬 쓰레드로 이와 비슷한 동작을 할 수 있다. 데몬 쓰레드란 다른 쓰레드 일반 쓰레드를 보조하는 역할로 사용한다. 예를 들면 어플리케이션이 실행하는 동안 백그라운드에서 서비스를 제공하는 가비지컬렉터, 워드프로세서에서 정기적으로 파일을 저장하는 자동 저장기능 등을 말할 수 있다. (티스토리에서 글 작성시에 자동저장하는 기능도 데몬 쓰레드?)

사용 방법은 쓰레드를 실행하기 전에 Thread 클래스에서 제공하는 setDaemon(true) 메소드를 호출하면 된다.

특징으로는 일반 쓰레드(main 등)가 모두 종료되면 강제적으로 종료 된다.


1. mysql-connector Librarie추가

현재 프로젝트 오른쪽 클릭 - Properties - Java Build Path - Add External JARs...

Download Connector/J Link

(mysql 설치시 Java Connector 도 같이 설치된다.)





2. MySQL DB, Java 코드로 연동하기

public class TestClass {
	public static void main(String[] args) {
		Connection con = null;
		Statement st = null;
		ResultSet rs = null;

		try {

			con = DriverManager.getConnection("jdbc:mysql://localhost", "root",
					"1234");

			st = con.createStatement();
			rs = st.executeQuery("SHOW DATABASES");

			if (st.execute("SHOW DATABASES")) {
				rs = st.getResultSet();
			}

			while (rs.next()) {
				String str = rs.getNString(1);
				System.out.println(str);
			}
		} catch (SQLException sqex) {
			System.out.println("SQLException: " + sqex.getMessage());
			System.out.println("SQLState: " + sqex.getSQLState());
		} finally {
			if (rs != null) { try { rs.close(); } catch (Exception e) {}}
			if (st != null) { try { st.close(); } catch (Exception e) {}}
			if (conn != null) { try {conn.close();} catch (Exception e) {}}
		}
	}
}

문제점

SQLException: No suitable driver found for jdbc:mysql://localhost
▶ 해결방법 : 위 1번 드라이버 추가했는지 확인할 것.


SQLException: Access denied for user 'root'@'localhost' (using password: YES)
▶ 해결방법 : 링크


식사하는 철학자(Dining Philosopher) 문제 구현하기

이미 java.util.concurrent.Semaphore 로 세마포어를 사용할 수 있지만 직접 만들어 보도록 한다. 이 코드가 세마포어를 구현한 것인지 확실하진 않다. 단지 내가 이해한 세마포어를 구현해보았다. 

+ 세마포어란 하나의 공유변수를 사용하는데 아래 코드는 각 객체안의 변수를 사용하므로 모니터가 맞는것 같다...

코드 : 식사하는 4명의 철학자

DiningTable.java


Chopstick.java


Philosopher.java



결과화면

  



homework_0604.zip


 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-3770 3.50GHz

 Memory

 4 GB

 OS

 Window 7 Professional 32bit

 Java

 1.7.0_51

 Android

 SDK : 4.4.2 (KitKat), Google APIs 4.4.2

 TEST : Galaxy S3 4.3(Jelly Bean)

 WebServer

 Apache Tomcat 7.0

 DB

 MySQL 5.6.15


문제점

List의 중복된 값을 제거하고 정렬한다. 


해결방안

ArrayList<String> tempList = new ArrayList<String>();
ArrayList<String> dataList;

dataList = new ArrayList<String>(new HashSet<String>(tempList));
Collections.sort(dataList);

2019.10.11. 옛날 코드를 보니 다이아몬드 연산자도 안쓰고, 다형성도 활용하지 않고, 사이드이펙트있는 정렬 메서드 쓰고 있어서... 새로 수정 with 자바8람다

List<String> duplicateStringList = Arrays.asList("2", "2", "1", "3");
List<String> result = duplicateStringList.stream()
.distinct()
.sorted()
.collect(Collectors.toList());



한글 깨지는 *.txt 파일 읽기

String path="fileName.txt";
BufferedReader reader = new BufferedReader(new InputStreamReader(
						new FileInputStream(path), "euc-kr"));

UTF-8 파일 쓰기

String path="fileName.txt";
BufferedWriterreader = new BufferedWriter(new OutputStreamWriter(
						new FileOutputStream(path), "utf-8"));




자바를 다루는 기술

저자
김병부 지음
출판사
길벗 | 2014-02-24 출간
카테고리
컴퓨터/IT
책소개
자바 언어의 기초 문법을 친절하고 자세하게 설명한다. 객체 지향...
가격비교

 

객체와 인스턴스의 차이점

 비슷한 개념이지만 정확히 구별하면 인스턴스가 객체보다 큰 의미이다. 객체는 어떤 클래스를 사용해서 만들어진 것을 의미한다. 그리고 그 객체가 메모리에 할당되어 실제 메모리를 차지하는 것을 인스턴스라고 한다.  


String str;
str = new String("Hello world");
System.out.println(str);

위와 같은 코드에서 객체와 인스턴스를 구별해보자.

먼저 str은 String 클래스를 사용하여 객체를 선언한 것이다. 즉 아직 str에 문자열이 할당되어 있지 않은 상태이다. 

그리고 다음 라인을 보자. new 키워드를 사용하여 JVM에 데이터가 생성된 것을 보여준다. 이렇게 객체를 실제로 메모리에 할당하는 과정을 인스턴스화(instantiate)라고 한다. 즉 객체 str에 "Hello world"라는 문자열을 할당해서 인스턴화하였다. 그리고 이렇게 인스턴스화된 것을 인스턴스라고 부른다.




JDK 개발 도구 명령어

java

컴파일된 바이트 코드 파일(*.class)을 실행하는 명령어

  • 사용법 : java [클래스명]
  • 사용예 : java Helloworld

javac

자바 컴파일 명령어로 자바 코드로 작성된 파일을 실행 가능한 '.class'로 컴파일해준다.

  • 사용법 : javac [Java 파일명]
  • 사용예 : javac Helloworld.java


jar

자바에서 사용되는 묶음 파일인 Jar 파일을 다루기 위한 명령어. Jar 파일은 클래스 파일들을 편리하고 효율적으로 배포하기 위해 실행에 필요한 여러 파일들을 묶어 하나의 파일로 만든 것이다. 주로 외부 라이브러리들을 배포하거나 애플리케이션을 패치하는데 많이 사용된다. 

  • 묶는 법 : jar -xvf [대상 디렉토리 혹은 Class 파일들]
  • 푸는 법 : jar -cvf [jar 파일 경오]


javadoc

Java 문서를 만들어주는 명령어.

  • 사용법 : javadoc [Java 파일 명]

jps

현재 실행 중인 자바 프로세스들의 이름과 프로세스 ID를 보여주는 명령어

  • 사용법 : jps

jmap

JVM의 힙 메모리 상태를 확인할 수 있는 명령어. JVM의 힙 영역의 상태를 확인하는 것을 메모리 덤프나 메모리 절단면이라고 한다. 애플리케이션의 유지 보수 혹은 애플리케이션에서 에러가 발생했을 때 원인을 찾기 위해서 많이 사용하는 명령어.

  • 사용법 : jmap -heap:format=b,file=[저장할 dump 파일명][pid]

jhat

jmap을 사용하여 생성한 메모리 덤프 파일을 분석해주는 명령어. 이 명령어를 이용하면 스스로 웹서버를 띄워서 html 형식으로 분석된 내용을 보여준다. 보통 jps, jmap 그리고 jhat은 에러의 원인 분석이나 JVM 상태를 모니터링 하기 위해서 사용한다.

  • 사용법 : jhat [저장한 dump 파일명]


참고도서  : 자바를 다루는 기술 

Heap Sort Algorithm Source

package heapSort;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class Star {

	public static void main(String args[]) {

		ArrayList<String> data = new ArrayList<String>();
		String file_open_path = "D:/heapData.txt";

		fileRead(file_open_path, data);
		
		System.out.println(data);
		data = heapSort(data);
		System.out.println(data);

	}

	public static ArrayList<String> heapDown(ArrayList<String> data) {
		for (int n = (data.size() / 2) - 1; n >= 0; n--) {
			int leftChild = (n * 2) + 1;
			int rightChild = (n * 2) + 2;

			if (data.get(leftChild).compareTo(data.get(n)) < 0) {
				swapData(data, n, leftChild);
			}

			if (rightChild < data.size()) {
				if (data.get(rightChild).compareTo(data.get(n)) < 0) {
					swapData(data, n, rightChild);
				}
			}
		}
		return data;
	}

	public static ArrayList<String> heapSort(ArrayList<String> data) {
		ArrayList<String> sortedData = new ArrayList<String>();

		int len = data.size();
		data = heapDown(data);

		for (int i = 0; i < len; i++) {
			sortedData.add(0, data.remove(0));
			data = heapDown(data);
		}
		return sortedData;
	}

	private static void fileRead(String path, List<String> data) {
		BufferedReader reader = null;

		if (path != null) {
			try {
				reader = new BufferedReader(new FileReader(path));

				String line = null;
				while ((line = reader.readLine()) != null) {
					if (line.charAt(0) == 65279) {
						data.add(new String(new StringBuffer(line)
								.deleteCharAt(0)));
					} else {
						data.add(line);
					}
				}
				reader.close();
			} catch (Exception e) {
				System.err.println(e);
			} finally {
				try {
					if (reader != null) {
						reader.close();
					}
				} catch (Exception ex) {
				}
			}
		}
	}

	private static void swapData(ArrayList<String> data, int a, int b) {
		String temp;
		temp = data.get(a);
		data.set(a, data.get(b));
		data.set(b, temp);
	}
}


ArrayList 합집합(union)

	public <T> List<T> union(List<T> list1, List<T> list2) {
		Set<T> set = new HashSet<T>();

		set.addAll(list1);
		set.addAll(list2);

		return new ArrayList<T>(set);
	}

ArrayList 교집합(intersection)

	public <T> List<T> intersection(List<T> list1, List<T> list2) {
		List<T> list = new ArrayList<T>();

		for (T t : list1) {
			if (list2.contains(t)) {
				list.add(t);
			}
		}

		return list;
	}

사용예시

public class ListUtil {

	public static void main(String... args) throws Exception {

		List<String> list1 = new ArrayList<String>(Arrays.asList("A", "B", "C"));
		List<String> list2 = new ArrayList<String>(Arrays.asList("B", "C", "D",
				"E", "F"));

		System.out.println("교집합" + new ListUtil().intersection(list1, list2));
		System.out.println("합집합" + new ListUtil().union(list1, list2));
	}

	public <T> List<T> union(List<T> list1, List<T> list2) {
		Set<T> set = new HashSet<T>();

		set.addAll(list1);
		set.addAll(list2);

		return new ArrayList<T>(set);
	}

	public <T> List<T> intersection(List<T> list1, List<T> list2) {
		List<T> list = new ArrayList<T>();

		for (T t : list1) {
			if (list2.contains(t)) {
				list.add(t);
			}
		}

		return list;
	}
}



'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] JDK 개발 도구 명령어  (0) 2014.07.16
[JAVA] HeapSort Algorithm  (0) 2014.07.09
[JAVA] java.io.RandomAccessFile() (작성중)  (0) 2014.05.27
[JAVA] 전기 요금 계산  (0) 2014.05.14

java.io.RandomAcessFile

RandomAcessFile는 Object 클래스의 한단계 하위 클래스로 파일의 읽기, 쓰기가 가능하다.

파일시스템에 바이트로 저장된 큰 배열에 접근하는 방법으로 순차적으로 접근하는 방법이 아니라 파일 포인터를 이용해 임의의 위치(사용자가 선택한 인덱스)를 바로 읽을 수 있는 클래스이다.


Constructor:생성자

1. RandomAccessFile(File file, String mode)

2. RandomAccessFile(String name, String mode)

* mode

"r" -> 읽기전용

"rw" -> 읽고 쓰기 가능

"rws" ->

전기 요금 계산기

package report;

import java.util.Scanner;

public class Elec {

	// electric charge table
	// 2013.11.21
	final static float v1 = 60.7f;
	final static float v2 = 125.9f;
	final static float v3 = 187.9f;
	final static float v4 = 280.6f;
	final static float v5 = 417.7f;
	final static float v6 = 709.5f;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int kwh;
		int tmpCharge;
		int vat; // value added tax
		float eCharge = 0; // energy charge
		int bCharge = 0; // basic charge
		int eBaseFund = 0; // Electric Power Industry Base Fund
		int mcr = 0; // monthly customer requisition

		System.out.print("input kwh : ");
		kwh = sc.nextInt();

		int temp;

		// basic charge
		if (0 < kwh && kwh <= 100) {
			bCharge = 410;
		} else if (100 < kwh && kwh <= 200) {
			bCharge = 910;
		} else if (200 < kwh && kwh <= 300) {
			bCharge = 1600;
		} else if (300 < kwh && kwh <= 400) {
			bCharge = 3850;
		} else if (400 < kwh && kwh <= 500) {
			bCharge = 7300;
		} else {
			bCharge = 12940;
		}

		// energy charge
		temp = kwh;
		if (temp >= 100) {
			eCharge += (float) (100 * v1);
			temp = temp - 100;
			if (temp >= 100) {
				eCharge += (float) (100 * v2);
				temp = temp - 100;
				if (temp >= 100) {
					eCharge += (float) (100 * v3);
					temp = temp - 100;
					if (temp >= 100) {
						eCharge += (float) (100 * v4);
						temp = temp - 100;
						if (temp >= 100) {
							eCharge += (float) (100 * v5);
							temp = temp - 100;
							if (temp >= 0) {
								eCharge += (float) (temp * v6);
							} else {
								eCharge += (float) (temp * v6);
							}
						} else {
							eCharge += (float) (temp * v5);
						}
					} else {
						eCharge += (float) (temp * v4);
					}
				} else {
					eCharge += (float) (temp * v3);
				}
			} else {
				eCharge += (float) (temp * v2);
			}
		} else {
			eCharge += (float) (temp * v1);
		}

		tmpCharge = (int) (bCharge + eCharge);
		vat = (int) Math.round(tmpCharge * 0.1);
		eBaseFund = (int) ((tmpCharge * 0.037) / 10 * 10);
		mcr = (int) (eCharge + bCharge + vat + eBaseFund) / 10 * 10;

//		System.out.println("basic " + bCharge);
//		System.out.println("tax " + eCharge);
//		System.out.println("total " + tmpCharge);
//		System.out.println("vat " + vat);
//		System.out.println("eBaseFund " + eBaseFund);

		System.out.println("output : " + mcr);
	}
}

 실행환경

 Notebook

 SAMSUNG NT550p5c-s61r

 CPU

 Intel Core i5-3210M 2.50GHz

 Memory

 8 GB

 OS

 Window 7 ultimate 64bit

 Java

 1.7.0_51

 Android SDK : 4.4.2 (KitKat) / 테스트기기 : Galaxy S3 4.3 (Jelly Bean)

 WebServer

 Apache Tomcat 7.0


코드 실행시간 확인하기

조금 더 정확한 측정 방법

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

		ExecTime timer = new ExecTime();
		timer.start();

		// code
		for (int i = 0; i < 100000000; i++) {

		}
		timer.stop();

		timer.printExecTime();
		System.out.println(timer.getRunTimeNano() / 1000000 + " ms");
		System.out.println(timer.getRunTimeNano() / 1000000 / 1000 + " sec");
	}

}

class ExecTime {
	private long start;
	private long stop;

	void start() {
		start = System.nanoTime();
	}

	void stop() {
		stop = System.nanoTime();
	}

	long getRunTimeNano() {
		return stop - start;
	}

	void printExecTime() {
		System.out.println(stop - start + " ns");
	}
}

방법1

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

		long startTime = System.currentTimeMillis();

		// code

		long stopTime = System.currentTimeMillis();
		long runTime = stopTime - startTime;

		System.out.println(runTime);
	}
}

방법 2

public class Stopwatch {
	long start;
	long end;
	
	void start() {
		start = System.currentTimeMillis();
	}
	
	void stop() {
		end = System.currentTimeMillis();
	}
	
	String getRunTime(){
		return end - start + "";
	}
}
class TimeTest2 {
	public static void main(String[] args) {

		Stopwatch timer = new Stopwatch().start();

		// code

		timer.stop();

		System.out.println(timer.getRunTime());
	}
}

'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] java.io.RandomAccessFile() (작성중)  (0) 2014.05.27
[JAVA] 전기 요금 계산  (0) 2014.05.14
[JAVA] 연산자 우선순위  (0) 2014.05.02
[JAVA] 파일 읽기, 쓰기  (0) 2014.04.16

 JAVA 연산자 우선순위

  1. (), [], .
  2. !, ~, ++, --, +, -, instanceof
  3. new, (type name)
  4. *, /, %
  5. +, -
  6. <<, >>< >>>
  7. <, <=, >, >=
  8. ==, !=
  9. &, ^, |
  10. &&, ||
  11. ?:
  12. =, +=, -=, *=, /=, %/, >>=, >>>=, <<=, &=, ^=, |=


 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-3770 3.50GHz

 Memory

 4 GB

 OS

 Window 7 Professional 32bit

 Java

 1.7.0_51

 WebServer

 Apache Tomcat 7.0

 DB

 MySQL 5.6.15


직렬화하지 않은 파일 읽기, 쓰기 

- API : FileReader, BufferedReader, FileWriter, BufferedWriter

읽기, 쓰기작업을 처리하는 FileReader, FileWriter에 효율을 향상시켜주는 BufferedReader, BufferedWriter 클래스를 연쇄시켜 사용한다. 버퍼는 자신이 가득 찰 때까지 기다리다가 꽉찬 후에 작업이 진행한다.


[JAVA] java.io.File 클래스


쓰는 방법(출력)

BufferedWriter w = new BufferedWriter(new FileWriter(new File("FileTest.txt")));

버퍼가 가득차기전에 데이터를 보내고자 한다면 writer.flush() 호출한다.


읽는 방법(입력)

읽기작업은 while()문에서 한번에 한 행씩 읽어오며, readLine()에서 null을 리턴하면 반복문을 종료한다.

가장 흔하게 쓰이는 방법

import java.io.*;

public class FileTest {
	public static void main(String[] args) {
		String fDir = "TestDir/";
		String fName1 = "FileTest.txt";
		File f;

		try {
			// File 객체 생성(존재하는 파일)
			f = new File(fDir + fName1);

			// 파일 쓰기(주석부분은 간략화)
			FileWriter fileWriter = new FileWriter(f);
			BufferedWriter writer = new BufferedWriter(fileWriter);
			//BufferedWriter writer = new BufferedWriter(new FileWriter(f));

			writer.write("witerTest1");
			writer.append("\n"); // 개행문자 삽입
			writer.append("witerTest2");
			writer.newLine(); // 개행 메서드
			writer.write("witerTest3");
			writer.close(); // 파일 닫기

			// 파일 읽기
			FileReader fileReader = new FileReader(f);
			BufferedReader reader = new BufferedReader(fileReader);

			String line = null;
			while ((line = reader.readLine()) != null) {
				System.out.println(line);
			}
			reader.close(); // 파일 닫기
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
		}

	}
}



직렬화된 객체의 파일 입출력

- API : ObjectOutputStream, ObjectInputStream, FileOutputStream, FileInputStream

사진. 구글 검색(Head First Java)


직렬화할 객체

Serializable 인터페이스를 꼭 구현해야한다.

class TestSerialization implements Serializable {
	private int x;
	private String str;

	TestSerialization(int a) { this.x = a; }
	TestSerialization(String s) { this.str = s;	}

	int getA() { return x; }
	String getS() {	return str;	}
}

파일 저장하기(출력)

public class FileTest {
	public static void main(String[] args) {
		String fDir = "TestDir/";
		String fName = "FileTest.ser";

		FileOutputStream fileStream;
		ObjectOutputStream objStream = null;

		// 저장할 객체
		TestSerialization test1 = new TestSerialization("ObjectTest1");
		TestSerialization test2 = new TestSerialization(100);
		TestSerialization test3 = new TestSerialization("ObjectTest3");

		try {
			// 파일에 연결하기위해 생성, 파일명의 파일이 없으면 새로 만들어줌.
			fileStream = new FileOutputStream(fDir + fName);
			objStream = new ObjectOutputStream(fileStream);

			// 출력되는 객체는 반드시 Serialization 인터페이스 구현
			objStream.writeObject(test1);
			objStream.writeObject(test2);
			objStream.writeObject(test3);
			
			System.out.println("end");

		} catch (Exception ex) {
			System.err.println("Exception : " + ex.getMessage());
		} finally {
			try {
				objStream.close();
			} catch (IOException e) {
				System.out.println(e.getMessage());
			}
		}
	}
}

파일 불러오기(입력) : 역직렬화(객체 복구)

public class FileTest {
	public static void main(String[] args) {
		String fDir = "TestDir/";
		String fName = "FileTest.ser";

		FileInputStream fileStream;
		ObjectInputStream objStream = null;
		
		try {
			// 역직렬화할 파일을 불러온다.
			fileStream = new FileInputStream(fDir + fName);
			objStream = new ObjectInputStream(fileStream);

			// 처음에 저장된 순서대로 가져온다.
			Object one = objStream.readObject();
			Object two = objStream.readObject();
			Object three = objStream.readObject();
			
			// 역직렬화할 객체
			TestSerialization test1 = (TestSerialization) one;
			TestSerialization test2 = (TestSerialization) two;
			TestSerialization test3 = (TestSerialization) three;
			
		} catch (Exception ex) {
			System.err.println("Exception : " + ex.getMessage());
		} finally {
			try {
				objStream.close();
			} catch (IOException e) {
				System.out.println(e.getMessage());
			}
		}
	}
}



 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-3770 3.50GHz

 Memory

 4 GB

 OS

 Window 7 Professional 32bit

 Java

 1.7.0_51

 WebServer

 Apache Tomcat 7.0

 DB

 MySQL 5.6.15


java.io.File 클래스 API

File 클래스는 파일의 내용을 수정하거나 입력하는 클래스가 아니라, 파일이나 디렉토리 자체를 담는 클래스이다.

즉, File 객체는 파일경로명이나 파일명과 비슷한 것으로 생각할 수 있다. 파일에 입력이나 수정을 하려면 File 객체를 FileWriter 또는 FileInputStream 등의 객체에 전달해서 그 객체에서 사용해야 한다.


import java.io.File;

public class FileTest {
	public static void main(String[] args) {
		// File 객체 생성(이미 존재하는 파일)
		File f = new File("FileTest.txt");
		
		// 현재 프로젝트 폴더내에 생성
		File dir = new File("FileTestDir");
		if(dir.mkdir()) {
			// 폴더가 존재하지 않다면
			System.out.println("true");
		} else {
			// 폴더가 존재한다면
			System.out.println("False");
		}
		
		// 파일 또는 디렉토리의 절대 경로명
		System.out.println(f.getAbsolutePath());
		System.out.println(dir.getAbsolutePath());
		
		// 파일 또는 디렉토리 삭제
		boolean deletedCheck = dir.delete();
		System.out.println(deletedCheck != false ? "삭제 성공" : "삭제 실패");
	}
}


'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] 연산자 우선순위  (0) 2014.05.02
[JAVA] 파일 읽기, 쓰기  (0) 2014.04.16
[JAVA]정적필드, 정적메소드  (0) 2014.03.18
[JAVA] String <-> int, double, float 변환  (0) 2014.02.28

정적필드, 정적메소드

변수, 메소드 앞에 static키워드 붙인다.

인스턴스화 하지않고도 클래스의 이름으로 사용할 수 있는 필드, 메소드.

public class Student {
	String name;
	int age;
	static int count;
	
	Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
}


'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] 파일 읽기, 쓰기  (0) 2014.04.16
[JAVA] java.io.File 클래스  (0) 2014.04.10
[JAVA] String <-> int, double, float 변환  (0) 2014.02.28
[JAVA] heap, stack 메모리  (0) 2014.01.24

각종 타입 변환하기

byte _byte = 12;
int _int = 123;
long _long = 12;
float _float = 1.23f;
double _double = 123.123;
String str;

// Byte <-> String
str = Byte.toString(_byte);
_byte = Byte.parseByte(str);
				
// Integer <-> String
str = Integer.toString(_int);
_int = Integer.parseInt(str);
				
// Long <-> String
str = Long.toString(_long);
_long = Long.parseLong(str);
				
// Float <-> String
str = Float.toString(_float);
_float = Float.parseFloat(str);
				
// Double <-> String
str = Double.toString(_double);
_double = Double.parseDouble(str);;



'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] java.io.File 클래스  (0) 2014.04.10
[JAVA]정적필드, 정적메소드  (0) 2014.03.18
[JAVA] heap, stack 메모리  (0) 2014.01.24
[JAVA] ArrayList, LinkedList, Stack, Queue  (0) 2014.01.09

heap - 객체가 저장되는 곳(garbage collector 있음)

stack - 메소드 호출과 지역변수가 저장되는 곳

instance variable - 클래스 내에서 선언한 변수

local variable - 메소드 안에서 선언한 변수


지역변수도 저장된 객체는 변수만 스택에 저장



'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA]정적필드, 정적메소드  (0) 2014.03.18
[JAVA] String <-> int, double, float 변환  (0) 2014.02.28
[JAVA] ArrayList, LinkedList, Stack, Queue  (0) 2014.01.09
[JAVA] 계산기  (0) 2014.01.05
package DataStructure_Test;

import java.util.*;

class ArrayListTest {
	public static void main(String[] args) {
		// ArrayList
		ArrayList<integer> var1 = new ArrayList<integer>();
		var1.add(1);
		var1.add(2);
		var1.add(3);
		var1.add(0, 4);
		for (int i = 0; i < var1.size(); i++) {
			System.out.println(var1.get(i).intValue());
		}

		// LinkedList
		LinkedList<string> var2 = new LinkedList<string>();
		var2.add("str1");
		var2.add("str2");
		var2.add("str3");
		for (int i = 0; i < var2.size(); i++) {
			System.out.println(var2.get(i).toString());
		}

		// Stack
		LinkedList<string> stack1 = new LinkedList<string>();
		stack1.push("stack1");
		stack1.push("stack2");
		stack1.push("stack3");
		while (!stack1.isEmpty()) {
			System.out.println(stack1.pop());
		}

		// Queue
		LinkedList<string> queue1 = new LinkedList<string>();
		queue1.offer("queue1");
		queue1.offer("queue2");
		queue1.offer("queue3");
		while (!queue1.isEmpty()) {
			System.out.println(queue1.poll());
			// System.out.println(queue1.peek());
			// peek() 메서드는 가져오기만 하므로 무한루프
		}
	}
}

'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] String <-> int, double, float 변환  (0) 2014.02.28
[JAVA] heap, stack 메모리  (0) 2014.01.24
[JAVA] 계산기  (0) 2014.01.05
[JAVA] 은행 통장 입출금 예제  (2) 2014.01.05
import java.awt.*;
import java.awt.event.ActionListener;

import javax.swing.*;

class MainClass{
	public static void main(String[] args) {
		
		// window 창 설정
		JFrame frame = new JFrame("simple calculator");
		frame.setLocation(500, 400);
		frame.setPreferredSize(new Dimension(300, 200));
		Container contentPane = frame.getContentPane();

		JTextField resultField = new JTextField();
		contentPane.add(resultField, BorderLayout.NORTH);

		GridLayout button_layout = new GridLayout(4, 4);
		JPanel panel_button = new JPanel();
		panel_button.setLayout(button_layout);

		
		JButton[] nums = new JButton[10];
		nums[0] = new JButton("0");
		nums[1] = new JButton("1");
		nums[2] = new JButton("2");
		nums[3] = new JButton("3");
		nums[4] = new JButton("4");
		nums[5] = new JButton("5");
		nums[6] = new JButton("6");
		nums[7] = new JButton("7");
		nums[8] = new JButton("8");
		nums[9] = new JButton("9");
		
		JButton clr = new JButton("C"); // clear
		JButton equals = new JButton("="); // result
		JButton add = new JButton("+");
		JButton sub = new JButton("-");
		JButton mul = new JButton("*");
		JButton div = new JButton("/");

		panel_button.add(nums[7]);
		panel_button.add(nums[8]);
		panel_button.add(nums[9]);
		panel_button.add(add);
		panel_button.add(nums[4]);
		panel_button.add(nums[5]);
		panel_button.add(nums[6]);
		panel_button.add(sub);
		panel_button.add(nums[1]);
		panel_button.add(nums[2]);
		panel_button.add(nums[3]);
		panel_button.add(mul);
		panel_button.add(nums[0]);
		panel_button.add(equals);
		panel_button.add(clr);
		panel_button.add(div);

		contentPane.add(panel_button, BorderLayout.CENTER);

		// event
		
		ActionListener numberPressListener = new NumberButtonListener(resultField);
		for(int i = 0; i < 10; i++) {
			nums[i].addActionListener(numberPressListener);
		}

		clr.addActionListener(numberPressListener);
		equals.addActionListener(numberPressListener);
		add.addActionListener(numberPressListener);
		sub.addActionListener(numberPressListener);
		mul.addActionListener(numberPressListener);
		div.addActionListener(numberPressListener);
		
		// window 띄우기
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);
	}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

class NumberButtonListener implements ActionListener {
	JButton btn;
	JTextField result;

	private int total = 0;
	private char op = ' ';

	NumberButtonListener(JTextField result) {
		this.result = result;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String getBut = e.getActionCommand();
		String presentVal = result.getText();

		if (getBut == "0") {
			if(!presentVal.equals("0")) {
				result.setText(presentVal + getBut);
			}
		} else if (getBut == "1") {
			result.setText(presentVal + getBut);
		} else if (getBut == "2") {
			result.setText(presentVal + getBut);
		} else if (getBut == "3") {
			result.setText(presentVal + getBut);
		} else if (getBut == "4") {
			result.setText(presentVal + getBut);
		} else if (getBut == "5") {
			result.setText(presentVal + getBut);
		} else if (getBut == "6") {
			result.setText(presentVal + getBut);
		} else if (getBut == "7") {
			result.setText(presentVal + getBut);
		} else if (getBut == "8") {
			result.setText(presentVal + getBut);
		} else if (getBut == "9") {
			result.setText(presentVal + getBut);
		} else if (getBut == "C") {
			result.setText("");
			total = 0;
		} else if (getBut == "+") {
			int temp =  Integer.parseInt(presentVal);
			switch (op) {
			case '+':
				total += temp;
				break;
			case '-':
				total -= temp;
				break;
			case '*':
				total *= temp;
				break;
			case '/':
				total /= temp;
				break;
			default:
				total = temp;
			}
			op = '+';
			result.setText("");
		} else if (getBut == "-") {
			int temp =  Integer.parseInt(presentVal);
			switch (op) {
			case '+':
				total += temp;
				break;
			case '-':
				total -= temp;
				break;
			case '*':
				total *= temp;
				break;
			case '/':
				total /= temp;
				break;
			default:
				total = temp;
			}
			op = '-';
			result.setText("");
		} else if (getBut == "*") {
			int temp =  Integer.parseInt(presentVal);
			switch (op) {
			case '+':
				total += temp;
				break;
			case '-':
				total -= temp;
				break;
			case '*':
				total *= temp;
				break;
			case '/':
				total /= temp;
				break;
			default:
				total = temp;
			}
			op = '*';
			result.setText("");
		} else if (getBut == "/") {
			int temp =  Integer.parseInt(presentVal);
//			total = total / Integer.parseInt(presentVal);
			switch (op) {
			case '+':
				total += temp;
				break;
			case '-':
				total -= temp;
				break;
			case '*':
				total *= temp;
				break;
			case '/':
				total /= temp;
				break;
			default:
				total = temp;
			}
			op = '/';
			result.setText("");
		} else if (getBut == "=") {
			int temp = Integer.parseInt(presentVal);
			switch (op) {
			case '+':
				total += temp;
				break;
			case '-':
				total -= temp;
				break;
			case '*':
				total *= temp;
				break;
			case '/':
				total /= temp;
				break;
			default:
				total = temp;
			}
			op = ' ';
			result.setText("" + total);
			System.out.println(total);
		}
	}

}
MainClass.java
public class MainClass {
	public static void main(String[] args) {

		basicFunc start = new basicFunc();
		start.play();
	}
}
BasicFunc.java
import java.util.Scanner;

class BasicFunc {
	void play() {
		String name;
		String accountNo;
		int limit;
		System.out.println("사용자메뉴");
		Scanner in = new Scanner(System.in);
		loop: while (true) {
			System.out.println("1. 일반 통장 개설");
			System.out.println("2. 마이너스 통장 개설");
			System.out.println("3. 종료");
			System.out.print("->");
			int chk = in.nextInt();
//			try {
				in.nextLine();
				switch (chk) {
				case 1:
					System.out.println("일반 통장 개설");
					System.out.print("이름 : ");
					name = in.nextLine();
					System.out.print("계좌번호 : ");
					accountNo = in.nextLine();
					System.out.println(name + ", " + accountNo);
					try{
					Account person = new Account(name, accountNo);
					person.play();
					}catch(Exception e) {
						System.out.println(e.getMessage());
					}
				
					
					
					break;
				case 2:
					System.out.println("마이너스 일반 통장 개설");
					System.out.print("이름 : ");
					name = in.nextLine();
					System.out.print("계좌번호 : ");
					accountNo = in.nextLine();
					System.out.print("한도 : ");
					limit = in.nextInt();
//					Account personM = new AccountM(name, accountNo, limit);
//					personM.play();
					break;
				case 3:
					break loop;
				default:
					System.out.println("다시 입력해주세요.");

				}
//			} catch (Exception e) {
//				System.out.println(e.getMessage());
//			}
		}
		System.out.println("system quit..");
	}
}
Account.java
import java.util.Scanner;

public class Account {
	String name; // 예금주 이름
	String accountNo; // 계좌번호
	int balance; // 잔고

	// 생성자
	Account() {
	}

	Account(String name, String accountNo) throws Exception {
		if(name.equals("\n") || accountNo.equals(null)) {
			System.out.println("값 없음");
			throw new Exception("값을 모두 입력하세요.");
		}
		this.name = name;
		this.accountNo = accountNo;
	}

	// ----------------------
	// 생성자 끝

	void play() {
		Scanner in = new Scanner(System.in);
//		System.out.print("이름 : ");
//		this.name = in.nextLine();
//		System.out.print("계좌번호 : ");
//		this.accountNo = in.nextLine();
		int temp;
		int chk = 1;
		loop: while (chk != 0) {
			try {
				System.out.println("1. 입금, 2. 출금, 3. 정보, 0. 종료");
				System.out.print("->");
				int num = in.nextInt();
				switch (num) {
				case 1:
					System.out.print("입금얼마?");
					temp = in.nextInt();
					inputMoney(temp);
					break;
				case 2:
					System.out.print("출금얼마?");
					temp = in.nextInt();
					outputMoney(temp);
					break;
				case 3:
					infoPrint();
					break;
				case 0:
					break loop;
				default:
					System.out.println("다시입력하시오");
				}

			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
	}

	void infoPrint() {
		System.out.println("이름 : " + name);
		System.out.println("게좌 : " + accountNo);
		System.out.println("잔액 : " + balance);
	}

	void inputMoney(int amount) {
		this.balance += amount;
		System.out.println(amount + "원을 입금하고, 잔액은 " + balance + "원입니다.");
	}

	void outputMoney(int amount) throws Exception {
		if (balance < amount) {
			throw new Exception("잔액이 부족합니다.");
		} else {
			balance -= amount;
			System.out.println(amount + "원을 인출하고, 잔액은 " + balance + "원입니다.");
		}
	}

	void calculateInterest() {

	}
}
AccountM.java
import java.util.Scanner;

public class AccountM extends Account {
	int limit = 0; // 마이너스 한도

	// 생성자
	AccountM() {
		// 기본 한도 500만원.
		this.limit = 500;
	}

	AccountM(String name, String accountNo, int limit) throws Exception {
		super(name, accountNo);
		this.limit = limit;
	}

	// ----------------------
	// 생성자 끝

	void play() {
		Scanner in = new Scanner(System.in);
		System.out.print("이름 : ");
		this.name = in.nextLine();
		System.out.print("계좌번호 : ");
		this.accountNo = in.nextLine();
		System.out.print("한도 : ");
		this.limit = in.nextInt();
		int temp;
		int chk = 1;
		loop: while (chk != 0) {
			try {
				System.out.println("1. 입금, 2. 출금, 3. 정보, 0. 종료");
				System.out.print("->");
				int num = in.nextInt();
				switch (num) {
				case 1:
					System.out.print("얼마?");
					temp = in.nextInt();
					inputMoney(temp);
					break;
				case 2:
					System.out.print("얼마?");
					temp = in.nextInt();
					outputMoney(temp);
					break;
				case 3:
					infoPrint();
					break;
				case 0:
					break loop;
				default:
					System.out.println("다시입력하시오");
				}

			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
	}

	// 오버라이딩
	void infoPrint() {
		System.out.println("이름1 : " + name);
		System.out.println("게좌 : " + accountNo);
		System.out.println("한도금액 : " + limit);
		System.out.println("잔고 : " + balance);
		System.out.println("인출가능잔액 : " + (balance + limit));
	}

	void inputMoney(int amount) {
		this.balance += amount;
		System.out.println(amount + "원을 입금하고, 잔액은 " + (balance + limit)
				+ "원입니다.");
	}

	// 오버라이딩
	void outputMoney(int amount) throws Exception {
		if ((balance + limit) < amount) {
			throw new Exception("잔액이 부족합니다.");
		} else {
			balance -= amount;
			System.out.println(amount + "원을 인출하고, 인출가능잔액은 " + (balance + limit)
					+ "원입니다.");
		}
	}
}


'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] ArrayList, LinkedList, Stack, Queue  (0) 2014.01.09
[JAVA] 계산기  (0) 2014.01.05
[JAVA] * 별 출력하기_10 다이아몬드  (0) 2013.11.15
[JAVA] * 별 출력하기_09 마름모  (0) 2013.11.14

* 별 출력하기_10 다이아몬드


public class Star {

	public static void main(String args[]) {

		int input = 5;
		int st = 0;
		input = (input % 2 == 0) ? input - 1 : input;
		st = input/2;
		
		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();
		}
	}
}


'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] 계산기  (0) 2014.01.05
[JAVA] 은행 통장 입출금 예제  (2) 2014.01.05
[JAVA] * 별 출력하기_09 마름모  (0) 2013.11.14
[JAVA] 스무고개 만들기  (0) 2013.10.28
※ 메인메서드아닙니다.
void shape(int size) {
		// 3보다 큰 수 홀수 입력받아야하고, 잘못받으면 계속 입력받아야 한다.
		int mid = size / 2 + 1;
		int star = mid;
		for(int line = 1, blank = (size/2); line <= size; line++) {
			for(int colum = 1; colum <= star; colum++) {
				System.out.print(blank >= colum ? " " : "*");
			}
			System.out.printf("\t\t\t star : %d, blank : %d\n", star, blank);
			star = ((line < mid) ? star+1 : star-1);
			blank = ((line >= mid) ? blank+1 : blank-1);
		}
	}
import java.util.Random;
import java.util.Scanner;

public class Smugogae {
	public static void main(String[] args) {
		Random ran = new Random();
		Scanner in = new Scanner(System.in);
		int val = ran.nextInt(20) + 1;
		int input;
		int cnt = 0;

		System.out.println("답:" + val);

		System.out.println("스무고개(1~20)");
		do {
			System.out.print("input : ");
			input = in.nextInt();
			if (val > input) {
				System.out.printf("%d보다 큽니다.\n", input);
			} else if (val < input) {
				System.out.printf("%d보다 작습니다.\n", input);
			}
			cnt++;
			System.out.println("count " + cnt);
		} while (input != val && cnt < 20);

		if (cnt > 20) {
			System.out.println("val = " + val);
			System.out.println("20번이 넘었습니다.");
		} else {
			System.out.println("val = " + val);
			System.out.println("count = " + cnt);
		}
	}
}

+ Recent posts