정답 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>