이것만은 알고 갑시다 정답

Similar documents
Microsoft PowerPoint - Java-03.pptx

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

9장.key

gnu-lee-oop-kor-lec10-1-chap10

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

gnu-lee-oop-kor-lec06-3-chap7

연습문제 정답

JTable과 MVC(Model-View-Controller) 구조 - 모델-뷰-컨트롤러구조는데이터의저장과접근에대한제공은모델이담당하고, 화면표시는뷰, 이벤트의처리는컨트롤러가하도록각역할을구분한구조이다. 즉, 역할의분담을통하여상호간의영향을최소화하고각요소의독립성을보장하여독자

자바GUI실전프로그래밍2_장대원.PDF

Microsoft PowerPoint - 14주차 강의자료

PowerPoint Presentation

PowerPoint Presentation

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

05-class.key

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

07 자바의 다양한 클래스.key

02 C h a p t e r Java

JAVA PROGRAMMING 실습 08.다형성

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - 2강

12-file.key

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

public class FlowLayoutPractice extends JFrame { public FlowLayoutPractice() { super("flowlayout Practice"); this. Container contentpane = getcontentp

11장.key

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

rmi_박준용_final.PDF

Chap12

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

쉽게 풀어쓴 C 프로그래밊

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 09. 예외처리

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

Design Issues

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

Network Programming

비긴쿡-자바 00앞부속

PowerPoint Presentation

Microsoft PowerPoint - lec2.ppt

Microsoft PowerPoint - Lect04.pptx

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

10장.key

PowerPoint 프레젠테이션

09-interface.key

4장.문장

Microsoft PowerPoint - Java7.pptx

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

교육자료

JMF3_심빈구.PDF

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

03-JAVA Syntax(2).PDF

No Slide Title

Java Programing Environment

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

제11장 프로세스와 쓰레드

PowerPoint 프레젠테이션

ch09

JUNIT 실습및발표

자바 프로그래밍

5장.key

Java ~ Java program: main() class class» public static void main(string args[])» First.java (main class ) /* The first simple program */ public class

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - lec3.ppt

제8장 자바 GUI 프로그래밍 II

쉽게

PowerPoint 프레젠테이션

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint Presentation

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

신림프로그래머_클린코드.key

Microsoft PowerPoint - CSharp-10-예외처리

JVM 메모리구조

Microsoft PowerPoint - chap03-변수와데이터형.pptx

chap 5: Trees

Java ...

TEST BANK & SOLUTION

쉽게 풀어쓴 C 프로그래밍

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

쉽게 풀어쓴 C 프로그래밍

Microsoft Word - java18-1-final-answer.doc

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Transcription:

정답 1장 1. a) 클래스, 메소드, 명령문 b) main 2. 자바가상기계또는 Java Virtual Machine 또는 JVM 3. 5 행에중괄호 가하나더있어야합니다. 2장 1. 11행에서 max 변수를사용한것이잘못입니다. max 변수는 if 문에종속된블록안에선 언되어있기때문에그블록밖에서는사용할수없습니다. 2. K 라는문자가출력됩니다. 이프로그램이 " 키위 를출력하도록만들려면 switch 문안에다 음과같은부분을추가해야합니다. case 'K' : System.out.println(" 키위 ); break; 3. a int cnt = 10 b cnt > 0 또는 cnt >= 1 c cnt-- 4. a double num : arr b total += num; 또는 total = total + num; * num 대신다른변수이름을사용해도됩니다. 5. 1) "Hello, " + args[0] 2) java HelloEverybody World

정답 3장 1. byte 타입으로표현할수있는범위는 -128부터 127 까지입니다. 그렇기때문에 0부터 199 까지반복을수행하는 for 문의카운트변수로사용될수없습니다. 2. a) String b) double c) int d) double e) boolean f) char 3. ' r n' : 작은따옴표안에는하나의문자만쓸수있습니다..5e100f : 표현범위를초과하는 float 타입리터럴입니다. 0xABCDEFABCDEF : 표현범위를초과하는 int 타입리터럴입니다. 0x12.5e2 : 16 진부동소수점수의가수, 지수구분은 e가아니라 P나 p를가지고해야합 니다. " 단가: \10000" : \ 는 escape sequence 를시작하는문자(\) 이기때문에원화표시로 사용될수없습니다. TRUE : 불리언리터럴은모두소문자로써야합니다. 1e-100f : float 타입으로표현할수없을정도로미세한값입니다. 이런값은 float 타입의 리터럴로사용할수없습니다. 4장 1. 5행의 total = total + cnt; 라는명령문이잘못되었습니다. total 변수는 byte 타입이고 cnt 변수는 int 타입이기때문에 + 연산의결과는 int 타입이됩니다. int 타입의값을 byte 타 입변수에다시대입하려고했기때문에잘못입니다. 2. a) 3 b) 100 c) 10*20=200 d) true e) true f) true g) true h) 0 i) 0 j) 8 3. ++num++ : ++ 연산자가산출하는값은변수가아니기때문에그결과에다시 ++ 연산자 를사용할수없습니다. true + 3 : + 연산자는 boolean 타입과 int 타입의피연산자에는사용할수없습니다. true > false : > 연산자의두피연산자는모두수치타입이어야합니다. 0xFF00 0x00FF : 연산자의피연산자는모두 boolean 타입이어야합니다. --100 : -- 연산자의피연산자는반드시변수여야합니다. 120e3 << 2 : << 입리터럴입니다. 연산자의피연산자는정수타입이어야하는데 120e3은부동소수점타

정답 5장 1. 이장에서배웠던방법을사용하여다음과같이상품정보클래스를선언할수있습니다. class GoodsInfo { 2. final String code; // 상품코드 String name; // 상품명 String maker; // 제조사 int price; // 표준단가 double discountrate; // 할인율 GoodsInfo(String code, String name, String maker, int price) { this.code = code; this.name = name; this.maker = maker; this.price = price; GoodsInfo(String code, String name, String maker, int price, double discountrate) { this(code, name, maker, price); this.discountrate = discountrate; void updatediscountrate(double discountrate) { // 할인율을변경한다 this.discountrate = discountrate; int getsellingprice() { // 판매가를계산한다 return price - (int) (price * discountrate); 필드의값은반드시객체가생성되는도중에초기화되어야하는데초기화되지않았습 니다. 그리고객체가생성된후에는 final 필드의값을바꿀수없는데객체를생성하고난 후라야호출될수있는메소드안에서 final 필드에값을대입했으므로그것도잘못입니다. 3. width와 height 필드가 0 이하의값을갖게되는경우는둘입니다. 첫째는객체를생성할 때파라미터값으로 0 이하의값이들어오는경우고, 둘째는객체가생성된후에필드에 다른값을대입하는경우입니다. 첫번째경우는객체를생성할때 0 이하의값이들어오면익셉션이발생되도록하는것으 로문제를해결할수있습니다. 두번째경우는객체외부에서필드에다른값을대입하지 못하도록필드선언문에 private 키워드를붙여서문제를해결할수있습니다.

정답 class Rectangle { private int width, height; Rectangle(int width, int height) throws Exception { if (width <= 0 height <= 0) throw new Exception(" 높이와넓이는플러스값이어야합니다."); this.width = width; this.height = height; int getarea() { return width * height; 그런데이렇게클래스를고치면외부에서객체가담고있는 width와 height 필드값을읽 을수조차없게되므로, 이를보완하기위해다음과같이필드값을리턴하는메소드들을 추가해주는것이좋습니다. class Rectangle { private int width, height; Rectangle(int width, int height) throws Exception { if (width <= 0 height <= 0) throw new Exception(" 높이와넓이는플러스값이어야합니다. "); this.width = width; this.height = height; int getarea() { return width * height; int getwidth() { return width; int getheight() { return height;

정답 4. 모든객체가공통적으로접근할데이터는정적필드로선언해야합니다. 그러므로마지막 일련번호를저장하는정적필드를선언하고, 생성자에서그필드를사용하여 seqno 필드 의값을설정한후정적필드의값을 class BBSItem { 1 만큼증가시키면됩니다. static int lastseqno = 0; // 마지막일련번호 int seqno; // 일련번호 String writer; // 작성자 String writtendate; // 작성일자 String title; // 제목 String content; // 내용 BBSItem(String writer, String writtendate, String title, String content) { this.seqno = ++lastseqno; this.writer = writer; this.writtendate = writtendate; this.title = title; this.content = content; 또는마지막일련번호대신다음일련번호를저장하는정적필드를선언해도됩니다. 5. 5행의 printcharacter 메소드호출문이잘못입니다. 정적메소드안에서는인스턴스메소드 를호출할수없기때문입니다. 6장 1. 주어진음악 CD 클래스는다음과같이선언할수있습니다. class MusicCDInfo extends CDInfo { String artist; // 아티스트 String songname[]; // 곡명 MusicCDInfo(String registreno, String title, String artist, String[] songname) { super(registreno, title); this.artist = artist; this.songname = songname; 2. a) extends Rectangle b) super(sidelength, sidelength) c) getwidth() 또는 getheight()

정답 3. 13행과 14행에있는 obj.borrower와 obj.checkoutdate 부분이잘못입니다. 객체가인터페 이스변수에대입되어있을때는그인터페이스에속하는구성요소만사용할수있기때문 입니다. borrower와 checkoutdate 필드는 Lendable 인터페이스의구성요소가아니므로 잘못입니다. 오류를고치려면이부분을파라미터변수이름인 borrower와 date로바꾸어 야합니다. 4. title, sendername 필드는 final static 키워드가없지만인터페이스안에있기때문에컴파 일할때자동으로 final static 키워드가붙어서상수필드가됩니다. 그런데인터페이스의 상수필드는선언을할때반드시초기값을대입해야하는데그렇게하지않은것이첫번 째잘못입니다. 두번째잘못은생성자입니다. 인터페이스는생성자를가질수없기때문입 니다. 7장 1. 표시된부분에다음과같은 if 문을넣으면됩니다. if (obj instanceof CheckingAccount) { CheckingAccount obj2 = (CheckingAccount) obj; System.out.println(" 카드번호:" + obj2.cardno); 2. 다음과같이선언할수있습니다. enum Color { YELLOW, RED, BLUE Color, YELLOW, RED, BLUE 라는식별자대신다른식별자를사용할수도있습니다. 3. 다음과같이수정할수있습니다. [ 대출가능인터페이스] interface Lendable { enum BookState { STATE_BORROWED, STATE_NORMAL void checkout(string borrower, String date); void checkin();

정답 [ 단행본클래스] class SeparateVolume implements Lendable { String requestno; // 청구번호필드 String booktitle; // 제목필드 String writer; // 저자필드 String borrower; // 대출인필드 String checkoutdate; // 대출일필드 BookState state; // 대출상태필드 SeparateVolume(String requestno, String booktitle, String writer) { this.requestno = requestno; this.booktitle = booktitle; this.writer = writer; this.state = BookState.STATE_NORMAL; public void checkout(string borrower, String date) { // 대출한다 if (state!= BookState.STATE_NORMAL) return; this.borrower = borrower; this.checkoutdate = date; this.state = BookState.STATE_BORROWED; System.out.println("*" + booktitle + " 이( 가) 대출되었습니다."); System.out.println(" 대출인:" + borrower); System.out.println(" 대출일:" + date + "\n"); public void checkin() { // 반납한다 this.borrower = null; this.checkoutdate = null; this.state = BookState.STATE_NORMAL; System.out.println("*" + booktitle + " 이( 가) 반납되었습니다.\n"); 열거타입은프로그램내부에서클래스로취급되기때문에 BookState 타입인 state 필드의 디폴트값은 null 입니다. 그렇기때문에생성자에서필드값을 BookState.STATE_NORMAL 로초기화했습니다.

정답 8장 1. 다음과같이고치면됩니다. import java.util.gregoriancalendar; import java.util.calendar; class DateTime { public static void main(string args[]) { GregorianCalendar obj = new GregorianCalendar(); int year = obj.get(calendar.year); int month = obj.get(calendar.month) + 1; int day = obj.get(calendar.day_of_month); System.out.printf(" 오늘은 %d 년 %d 월 %d 일입니다.%n", year, month, day); 또는다음과같이고칠수도있습니다. import java.util.*; class DateTime { public static void main(string args[]) { GregorianCalendar obj = new GregorianCalendar(); int year = obj.get(calendar.year); int month = obj.get(calendar.month) + 1; int day = obj.get(calendar.day_of_month); System.out.printf(" 오늘은 %d 년 %d 월 %d 일입니다.%n", year, month, day); 2. 같은패키지내의서브클래스안에서는 public, protected 구성요소뿐만아니라접근제어 수식어가없는구성요소도사용할수있습니다. 그러므로 SmartGoodsStock 클래스안에 서는 goodscode, stocknum 필드, 생성자, addstock, subtractstock, gettocknum 메소 드를모두사용할수있습니다. 3. Movable 인터페이스를컴파일한디렉토리에서 javap 명령을실행하면다음과같은내용을 확인할수있습니다.

정답 9장 1. 문자열연결연산자 + 의양쪽에모두문자열리터럴이있으면자바컴파일러는길게연결 된하나의문자열리터럴로취급하기때문에왼쪽프로그램은하나의 String 객체만생성합 니다. 반면오른쪽프로그램은 3개의서로다른문자열리터럴각각에대해 String 객체가 생성될뿐만아니라 += 연산을한번할때마다새로운 String 객체가생성됩니다. 객체를 자꾸생성하면메모리사용도많아지고, 프로그램의실행속도도떨어지기때문에왼쪽프 로그램이오른쪽프로그램보다더효율적이라고할수있습니다. 2. 다음과같이완성할수있습니다. class LongLongString { public static void main(string args[]) { StringBuilder sb = new StringBuilder(); for (String str: args) sb.append(str); System.out.println(sb); 3. 다음과같이완성할수있습니다. import java.util.*; class After100Days { public static void main(string args[]) { GregorianCalendar calendar = new GregorianCalendar(); calendar.add(calendar.date, 100); int year = calendar.get(calendar.year); int month = calendar.get(calendar.month) + 1; int date = calendar.get(calendar.date); System.out.printf(year + " 년" + month + " 월" + date + " 일"); 4. random.nextint(5)

정답 10장 1. 빈칸을다음과같이채우면됩니다. writer.println(str1); writer.println(str2); 2. 빈칸을다음과같이채우면됩니다. int num1 = in.readint(); int num2 = in.readint(); double num3 = in.readdouble(); System.out.println(num1); System.out.println(num2); System.out.println(num3); readint, readdouble 해도상관없습니다. 메소드의호출순서와사용방법만맞으면다른부분은다르게작성 3. System.out.printf 메소드호출문을다음과같이완성하면됩니다. System.out.printf( " 계좌번호:%s%n", obj.accountno); System.out.printf( " 예금주이름:%s%n", obj.ownername); System.out.printf( " 잔액:%d%n", obj.balance); 11장 1. 빈칸을다음과같이채우면됩니다. return " 계좌번호: " + accountno + "\n 예금주이름: " + ownername + "\n 잔액: " + balance + " 원"; 2. 다음과같은결과가출력됩니다. obj1 = (10,10) obj2 = (50,100)

정답 12장 1. 다음과같이완성할수있습니다. class MaxValue { public static void main(string args[]) { if (args.length!= 2) { try { System.out.println("Usage: java MaxValue < 정수1> < 정수2>"); return; int num1 = Integer.parseInt(args[0]); int num2 = Integer.parseInt(args[1]); if (num1 > num2) else System.out.println(num1); System.out.println(num2); catch (NumberFormatException e) { System.out.println("Usage: java MaxValue < 정수1> < 정수2>"); int 타입대신 long 타입을사용하고, Integer 클래스대신 Long 클래스를사용하여더넓 은범위의정수를비교하는프로그램으로만들수도있습니다. 2. 올바른프로그램입니다. 프리미티브타입인 3.14와 true는 Object 배열에넣는과정에서 Double 타입과 Boolean 타입으로자동박싱됩니다.

정답 13장 1. 다음과같이완성하면됩니다. // 게시판클래스 import java.util.linkedlist; class BBS { LinkedList<BBSItem> items; BBS() { // items = new LinkedList<BBSItem>(); void add(bbsitem item) { // items.add(item); void modify(int index, BBSItem item) { // items.set(index, item); void delete(int index) { // items.remove(index); 생성자 게시글을추가한다 게시글을수정한다 게시글을삭제한다 2. 올바른프로그램입니다. 5 행 ~ 8행에서 addlast 메소드에 double 타입의파라미터를넘겨 주었지만이값은자동으로 Double 타입으로변환됩니다(12-3 절자동 Boxing 참조). 그 리고 10행에서 removelast 메소드가리턴하는 Double 값을 double 타입의변수에대입했 지만이값역시 double 타입으로자동변환되기때문에(12-3 절자동 Unboxing 참조) 문 제가되지않습니다. 3. hashcode, equals 14장 1. a) getproperties b) getproperty c) arraycopy d) exit e) err 2. 다음과같이빈칸을채워넣으면됩니다. System.arraycopy(arr1, 2, arr2, 0, 5); 3. 다음과같이완성하면됩니다. class OSInfo { public static void main(string args[]) { String osname = System.getProperty("os.name"); String osversion = System.getProperty("os.version"); System.out.printf("%s version %s %n", osname, osversion);

정답 15장 1. a) unchecked exception b) 에러 c) checked exception d) unchecked exception e) checked exception 2. poem.txt 파일이없으면 FileReader 생성자에서 FileNotFoundException 이발생하고, 그 익셉션에의해프로그램의실행흐름은 15행에있는 catch 블록으로이동합니다. 이 catch 블록에서 " 파일이존재하지않습니다." 라는메시지를출력한다음에프로그램의실행흐름 은 21행에있는 finally 블록으로이동합니다. finally 불록안에는다시 try 문이있고, 그 try 문안에서 reader 변수에대해 close 메소 드를호출하는명령문이있습니다. 그런데 reader 변수의값은 null이기때문에여기서 NullPointerException 이발생합니다. 그익셉션으로인해프로그램의실행흐름은 25행에 있는 catch 절로이동합니다. 이 catch 절에서는아무일도하지않기때문에안쪽 try 문 과바깥쪽 try 문이모두완료되고프로그램은종료합니다. 3. 다음과같이완성하면됩니다. class StockShortageException extends Exception { StockShortageException(String str) { super(str);

정답 16장 1. 다음과같이완성하면됩니다. import java.util.arraylist; class SalesReport { int year; // 연도 byte quarter; // 4 분기: 1, 2, 3, 4 ArrayList<Record> list = new ArrayList<Record>(); SalesReport(int year, byte quarter) { this.year = year; this.quarter = quarter; void addrecord(string name, int num, int amount) { list.add(new Record(name, num, amount)); int gettotal() { int total = 0; for (Record record: list) total += record.num; return total; class Record { String name; int num; int amount; Record(String name, int num, int amount) { this.name = name; this.num = num; this.amount = amount; 2. 다음과같이완성하면됩니다. class ChickenFarm { public static void main(string args[]) { class Cock extends Animal { void say() { System.out.println(" 꼬끼요"); Cock cock = new Cock(); cock.say();

정답 17장 1. 직렬화프로그램의빈칸은다음과같이채우면됩니다. out.writeobject(obj); 역직렬화프로그램의빈칸은다음과같이채우면됩니다. (Account) in.readobject(); 2. 다음과같이 java.io.serializable 인터페이스를구현하도록만들고, 직렬화대상에서제외시 킬필드에 transient 키워드를붙여주면됩니다. class PhysicalInfo implements java.io.serializable { String name; int age; transient char bloodtype; float height, weight; transient float bust, waist, hip; PhysicalInfo(String name) { this.name = name; 18장 1. 다음과같이완성하면됩니다. [main 메소드를포함하는클래스] class Signs { public static void main(string args[]) { Thread thread = new MinusThread(); thread.start(); for (int cnt = 0; cnt < 100; cnt++) System.out.print( + ); [ 마이너스부호를출력하는스레드클래스] class MinusThread extends Thread { public void run() { for (int cnt = 0; cnt < 100; cnt++) System.out.print( - );

정답 2. 파이를계산하는스레드클래스의빈칸은다음과같이채우면됩니다. sharedarea.done = true; 그리고파이를출력하는스레드클래스의빈칸은다음과같이채우면됩니다.!sharedArea.done 3. 동전을백만번던지는시뮬레이션을하는스레드클래스는다음과같이완성하면됩니다. class SimulThread extends Thread { SharedArea sharedarea; public void run() { int sum = 0; for (int cnt = 0; cnt < 1000000; cnt++) { java.util.random random = new java.util.random(); boolean ishead = random.nextboolean(); if (ishead) sum++; sharedarea.ratio = sum / 1000000.0; synchronized (sharedarea) { sharedarea.notify(); 결과를출력하는스레드클래스는다음과같이완성하면됩니다. class ResultThread extends Thread { SharedArea sharedarea; public void run() { if (sharedarea.ratio == null) { try { synchronized (sharedarea) { sharedarea.wait(); catch (InterruptedException e) { System.out.println(e.getMessage()); System.out.println(sharedArea.ratio);

정답 19장 1. 다음과같이완성하면됩니다. import java.awt.*; import javax.swing.*; import javax.swing.table.*; class ContactInfoFinder { public static void main(string[] args) { JFrame frame = new JFrame(" 연락처검색프로그램"); frame.setpreferredsize(new Dimension(500, 200)); frame.setlocation(500, 400); Container contentpane = frame.getcontentpane(); JTextField text1 = new JTextField(6); JTextField text2 = new JTextField(10); JTextField text3 = new JTextField(5); JButton button = new JButton(" 검색"); JPanel panel = new JPanel(); panel.add(new JLabel(" 이름")); panel.add(text1); panel.add(new JLabel(" 주소")); panel.add(text2); panel.add(new JLabel(" 전화번호")); panel.add(text3); panel.add(button); contentpane.add(panel, BorderLayout.NORTH); String colnames[] = { " 이름", " 주소", " 전화번호" ; DefaultTableModel model = new DefaultTableModel(colNames, 0); JTable table = new JTable(model); contentpane.add(new JScrollPane(table), BorderLayout.CENTER); button.addactionlistener(new SearchActionListener(table, text1, text2, text3)); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true);

정답 2. 다음과같이완성하면됩니다. import java.awt.event.*; import javax.swing.*; import java.util.random; class ThrowActionListener implements ActionListener { JLabel label; ThrowActionListener(JLabel label) { // 생성자 this.label = label; public void actionperformed(actionevent e) { Random random = new Random(); int head = 0, tail = 0; for (int cnt = 0; cnt < 100; cnt++) { boolean ishead = random.nextboolean(); if (ishead) else head++; tail++; label.settext(" 앞면:" + head + " 뒷면:" + tail); 3. 다음과같이완성하면됩니다. import java.awt.*; import javax.swing.*; class DrawingPanel extends JPanel { int num1; // O 형의수 int num2; // A 형의수 int num3; // B 형의수 int num4; // AB 형의수 public void paint(graphics g) { g.clearrect(0, 0, getwidth(), getheight()); if ((num1 < 0) (num2 < 0) (num3 < 0) (num4 < 0)) return; int total = num1 + num2 + num3 + num4; if (total == 0) return; int arc1 = (int) 360.0 * num1 / total; int arc2 = (int) 360.0 * num2 / total; int arc3 = (int) 360.0 * num3 / total;

정답 g.setcolor(color.yellow); g.fillarc(50, 20, 200, 200, 0, arc1); g.setcolor(color.red); g.fillarc(50, 20, 200, 200, arc1, arc2); g.setcolor(color.blue); g.fillarc(50, 20, 200, 200, arc1 + arc2, arc3); g.setcolor(color.green); g.fillarc(50, 20, 200, 200, arc1 + arc2 + arc3, 360-(arc1 + arc2 + arc3)); g.setcolor(color.black); g.setfont(new Font(" 굴림체", Font.PLAIN, 12)); g.drawstring(" O 형: 노랑", 300, 150); g.drawstring(" A 형: 빨강", 300, 170); g.drawstring(" B 형: 파랑", 300, 190); g.drawstring("ab 형: 초록", 300, 210); void setnumbers(int num1, int num2, int num3, int num4) { this.num1 = num1; this.num2 = num2; this.num3 = num3; this.num4 = num4; 20장 1. 빈칸을다음과같은명령문으로채워넣으면됩니다. int data = in.read(); if (data < 0) break; out.write(data); 2. 빈칸을다음과같은명령문으로채워넣으면됩니다. int num1 = in.readint(); int num2 = in.readint(); out.writeint(num1 + num2);

정답 21장 1. 다음과같은 create 문을가지고테이블을만들고, 그다음에있는 insert 문으로데이터를 입력하면됩니다. create table custinfo ( ); name address phoneno varchar(10) not null, varchar(80) not null, varchar(15) not null insert into custinfo (name, address, phoneno) values( 김재영', ' 서울시서초구 FFF동 222-777 호', '02-540-0000'); insert into custinfo (name, address, phoneno) values( ' 박철규', ' 경기도고양시일산서구 HHH동 999-888 호', '031-915-0000'); insert into custinfo (name, address, phoneno) values( ' 변재희', ' 서울시마포구 EEE동 555-333 호', '02-715-0000'); insert into custinfo (name, address, phoneno) values( ' 김미경', ' 서울시서대문구 BCD동 888-999 호', '02-326-0000'); insert into custinfo (name, address, phoneno) values( ' 진석영', ' 서울시노원구 III동 777-555 호', '02-977-0000'); insert into custinfo (name, address, phoneno) values( ' 박지영', ' 경기도성남시분당구 BBB동 333-444 I아파트 711동 707', '031-702-0000'); insert into custinfo (name, address, phoneno) values( ' 최미화', ' 인천시계양구 DDD동 000-000 호', '032-541-0000'); insert into custinfo (name, address, phoneno) values( ' 김철수', ' 서울시동대문구 AAA동 11-222 호', '02-958-0000'); 2. 빈칸을다음과같은명령문으로채우면됩니다. stmt = conn.createstatement(); ResultSet rs = stmt.executequery("select name, address, phoneno from custinfo where " while (rs.next()) { String arr[] = new String[3]; arr[0] = tounicode(rs.getstring("name")); arr[1] = tounicode(rs.getstring("address")); arr[2] = tounicode(rs.getstring("phoneno")); model.addrow(arr); 3. 빈칸을다음과같은명령문으로채우면됩니다. stmt = conn.createstatement(); int rownum = stmt.executeupdate( + "name like '" + tolatin1(name) + "%' and " + "address like '" + tolatin1(address) + "%' and " + "phoneno like '" + tolatin1(phoneno) + "%';"); "insert into custinfo (name, address, phoneno) values('" + tolatin1(name) + "', '" + tolatin1(address) + "', '" + tolatin1(phoneno) + "');"); System.out.println(rowNum + " 행이입력되었습니다.");

정답 22장 1. main 메소드를포함하는클래스는다음과같은애플릿클래스로대체하면되고, action listener 클래스는그대로사용해도됩니다. import java.awt.*; import javax.swing.*; import java.awt.event.*; public class HelloApplet extends JApplet { public void init() { Container contentpane = getcontentpane(); JTextField text = new JTextField(); JButton button = new JButton(" 확인"); JLabel label = new JLabel("Hello"); contentpane.add(text, BorderLayout.CENTER); contentpane.add(button, BorderLayout.EAST); contentpane.add(label, BorderLayout.SOUTH); ActionListener listener = new ConfirmButtonActionListener(text, label); button.addactionlistener(listener); 2. 빈칸을다음과같이채우면됩니다. <HTML> <HEAD><TITLE> 헬로프로그램</TITLE></HEAD> <BODY> </BODY> </HTML> <APPLET CODE="HelloApplet.class" WIDTH=200 HEIGHT=50> </APPLET>