본문 바로가기

Java17

[Java] 로또(Lotto) 프로그램(2) LottoProject (5).zip package LottoProject; import java.awt.*; import javax.swing.*; class LottoEx { public static void main(String[] args) { /* * NumberArr 객체생성. * 각 액션리스너에서 동일한 배열값을 사용하기 위한 작업. */ NumberArr arr=new NumberArr(); //label배열생성 JLabel lottoExframe_label[] = new JLabel[10]; for(int i=0;i 2013.11.22
[Java] 윈도우 프로그램 작성기초(1) - GUI 프로그래밍 지금까지 콘솔창에서 실행되는 프로그램을 만들어봤는데, 실제로는 위의 그림과 같이 윈도우창으로 사용하는 프로그램 형태를 훨씬 더 많이 사용하게 됩니다. 위의 창과 같은 기본 윈도우를 띄우는 프로그램 소스는 다음과 같습니다. import java.awt.*; import javax.swing.*; class WinEx1 { public static void main(String[] args) { JFrame f= new JFrame("Title"); f.setLocation(350, 300);//가로, 세로 위치에 윈도우 배치 f.setPreferredSize(new Dimension(200,200)); //Frame f= new Frame("Title");//종료 이벤트를 따로 구성해줘야한다. Contai.. 2013.11.14
[Java] 멀티스레드 프로그램(3) - Critical section 동기화 멀티스레드 프로그램에서 스레드들이 번갈아 실행되는 스케쥴은 임의로 정해지게 되는데, 적절하지 못한 순간에 다른 스레드로 제어가 넘어가서 예기치 못한 문제가 발생할 수 있습니다. 이런 문제는 주로 공유 데이터를 사용할 때 일어나는데, 이런 부분을 Critical section(임계영역)이라 합니다. 이러한 Critical section을 스레드가 사용할 때, 다른 스레드가 중간에 끼어들 수 없도록 만드는 것을 Critical section의 Synchronization(동기화)라고 합니다. 위 그림과 같은 기능을 하는 프로그램을 만들어보겠습니다. 먼저 계좌정보가 들어가는 Account 클래스(Account.java)입니다. class Account { String accountNo; // 계좌번호 Stri.. 2013.11.13
[Java] 멀티스레드를 이용한 말 경주 프로그램 경주마 5마리가 100미터 달리기를 하는 멀티스레드 프로그램을 작성하시오. 1. 말(Horse클래스) 을 Thread를 상속받아 멀티 스레드로 작성한다. 2. for문{ 말이름 + 현재 몇 미터 위치에 있는지 20미터 간격으로 출력한다. } 3. 도착지점(100미터 지점)에서 어떤 말이 몇등으로 도착했는지 순위까지 출력한다. sleep(10)정도 4. 공유영역에 int rank; 순위필드 메소드내에서 synchronized(this){}를 사용하지 않고 메소드자체를 synchronized 형태로 선언한다. 공유영역인 Rank class class Rank { int rank=0; synchronized void finishLine(String name){ rank+=1; System.out.println.. 2013.11.12
[Java] 멀티스레드 프로그램(2) - 스레드간의 데이터 교환 스레드 시작 ↓ 파이를 계산한다 ↓ 공유영역에 계산 결과를 쓴다→ ↓ 스레드 끝 공유영역 3.14.... 스레드 시작 ↓ →공유영역의 데이터를 읽는다 ↓ 데이터를 출력한다 ↓ 스레드 끝 위와 같은 프로그램을 만들려합니다. 먼저 공유영역을 만들어 줍니다. class SharedArea { double result; boolean isReady; } 파이를 계산하는 스레드 클래스를 만들어줍니다. class CalThread extends Thread{ SharedArea sa_save; public void run(){ double total=0; for(int i=1;i 2013.11.12
[Java] 로또(Lotto) 프로그램(1) Lotto프로그램(과제) 컴퓨터가 랜덤으로 발생시키는 값 6개를 저장하고, 사용자가 6개의 숫자를 입력 또는 랜덤 발생시킨다. 이 두개의 배열을 비교하여, 몇개의 숫자가 일치하였는지를 알아보는 프로그램 1. 배열 2개를 선언하고, 값을 넣는다. ※ 배열에 값을 넣을때는 중복된 값이 없어야한다. 2. 배열 2개의 비교를 위하여 정렬한다. 3. 배열 2개의 값을 비교하고, 일치하는 개수를 출력한다. 과제를 받았을때 아래와 같은부분을 생각했습니다. * 1. 직접 입력받을 것인지, 랜덤으로 발생시킬 것인지 선택하는 부분 * 2. 6개의 배열공간에 랜덤발생하여 넣는데, 중복이면 다시 랜덤발생하는 부분 * 3. 직접입력하더라도 중복이 되지 않게 값을 넣는 부분 * 4. 오름차순으로 배열을 정렬하는 부분 * 5. 비.. 2013.11.11
[Java] 버블정렬(1) 버블 정렬 [ bubble sort ] 일반적으로 사용되는 분류 알고리즘(sorting algorithm)이지만, 알고리즘이 수중(水中)의 「거품」과 움직임이 유사하기 때문에 이러한 이름이 붙여졌다. 이 말은 인접한 레코드의 키를 비교해서 그 결과 순서화되어 있지 않으면 교환하는 방식이다. …네이버 지식백과 中 버블정렬은 인접한 두 값을 비교해서 정렬해주는 정렬방식입니다. 다음과 같은 lotto배열에 값이 저장되어 있습니다. int lotto[]={10,9,8,6,7,5}; 이 배열의 값을 버블정렬로 정렬하게 되면 다음과 같은 순서로 정렬되게 됩니다. 10 9 8 6 7 5 9 8 6 7 5 10 - 1회전 8 6 7 5 9 10 - 2회전 6 7 5 8 9 10 - 3회전 6 5 7 8 9 10 - 4.. 2013.11.08
[Java] Radom클래스(1) Random클래스는 난수를 발생시키는 데 사용되는 클래스입니다. 이 클래스는 Math클래스의 random메소드보다 다양한 방법으로 난수를 생성 할 수 있습니다. Random클래스의 생성자는 두가지 형태가 있습니다. 파라미터를 받지 않는 Random()과 long타입의 파라미터를 받는 Random(long seed)이 있습니다. 이후 예제에서 알수 있지만, 파라미터를 받지 않는 랜덤클래스를 생성하면 규칙없이 생성마다 난수 생성 순서가 다릅니다. 하지만 long타입으로 파라미터를 받는 클래스를 생성하고, 이후에 똑같은 파라미터를 받는 다른 객체를 생성하더라도 같은 순서대로 난수가 발생합니다. Random클래스의 메소드 메소드 설명 int nextInt() int 타입 난수를 리턴 long nextLong().. 2013.11.08
[Java] StringTokenizer 클래스(1) StringTokenizer 클래스 public class StringTokenizer extends Object implements Enumeration The string tokenizer class allows an application to break a string into tokens. The tokenization method is much simpler than the one used by the StreamTokenizer class. The StringTokenizer methods do not distinguish among identifiers, numbers, and quoted strings, nor do they recognize and skip comments. The set.. 2013.11.07
[Java] 파일 입출력에 사용되는 자바 클래스들(3) 객체를 읽고 쓰는 클래스들 객체를 파일에 읽고 쓰기 위해서는 ObjectInputStream 클래스와 ObjectOutputStream 클래스를 사용해야 합니다. ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("output.dat")); 선언 후 out.writeObject(객체)메소드를 통해 객체를 출력할 수 있습니다. 이 메소드는 직렬화 가능 객체(serializable object)만 출력할 수 있습니다. 여기서 직렬화(serialization)란 객체를 스트림으로 만드는 것을 의미합니다. 사용할 클래스가 직렬화가 가능한지 여부는 API(http://docs.oracle.com/javase/7/docs/api/)를 확인해보.. 2013.11.05