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

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

Microsoft Word - java19-1-midterm-answer.doc

PowerPoint 프레젠테이션

Design Issues

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - 04-UDP Programming.ppt

중간고사

Microsoft PowerPoint - 2강

PowerPoint Presentation

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

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

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

09-interface.key

PowerPoint 프레젠테이션

05-class.key

PowerPoint Presentation

5장.key

PowerPoint 프레젠테이션

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - 14주차 강의자료

PowerPoint Presentation

자바 프로그래밍

JAVA PROGRAMMING 실습 07. 상속

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

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

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

중간고사

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

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µå

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

11장.key

PowerPoint Presentation

Modern Javascript

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

PowerPoint Presentation

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

02 C h a p t e r Java

03-JAVA Syntax(2).PDF

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 05. 객체의 활용

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional08.ppt [호환 모드]

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 09. 예외처리

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

강의자료

PowerPoint Presentation

Microsoft Word - cg07-midterm.doc

제11장 프로세스와 쓰레드

untitled

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

PowerPoint Presentation

PowerPoint 프레젠테이션

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint Presentation

Java Programing Environment

Microsoft PowerPoint - java2 [호환 모드]

Microsoft PowerPoint - chap11

4장.문장

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

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

교육자료

비긴쿡-자바 00앞부속

단국대학교멀티미디어공학그래픽스프로그래밍중간고사 (2011 년봄학기 ) 2011 년 4 월 26 일학과학번이름 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

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

12-file.key

슬라이드 1

PowerPoint Presentation

PowerPoint Presentation

A Tour of Java V

No Slide Title

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

C# Programming Guide - Types

Microsoft PowerPoint - Lect04.pptx

슬라이드 1

C++ Programming

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

10장.key

Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 3. FindBugs ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 4. ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ

Cluster management software

ch09

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

1

PowerPoint 프레젠테이션

9장.key

PowerPoint Presentation

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

유니티 변수-함수.key

No Slide Title

PowerPoint Presentation

rmi_박준용_final.PDF

chap10.PDF

Transcription:

기말고사 담당교수 : 단국대학교응용컴퓨터공학박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호 (4자리숫자 ) 를기입하면성적공고시학번대신암호를 사용할것임. 1. 다음코드의실행결과를적어라 (parameter passing 에유의할것 ). (10 점 ) public static int mystery(int n, int[] numbers) { n += 100; numbers[2] ; System.out.println(n + " " + Arrays.toString(numbers)); return numbers[1] * 2; public static void mystery(int[] x, int[] y) { int[] t = x; x = y; y = t; System.out.println(Arrays.toString(x) + " " + Arrays.toString(y)); public static void mystery(int[] arr) { for (int i = 1; i < arr.length 1; i++) { if (arr[i] <= arr[i + 1]) { arr[i + 1] = i * 2; public static void main(string[] args) { int a = 4; int b = 8; int[] data = {5, 10, 15; a = mystery(b, data); System.out.println(a + " " + b + " " + Arrays.toString(data)); System.out.println(); int[] x = {1, 2, 3; int[] y = {4, 5; mystery(x, y); System.out.println(Arrays.toString(x) + " " + Arrays.toString(y)); System.out.println(); int[] data1 = {4, 1, 3; int[] data2 = {2, 1, 3, 2; int[] data3 = {1, 1, 1, 1, 8; mystery(data1); System.out.println("data1 = " + Arrays.toString(data1)); mystery(data2); System.out.println("data2 = " + Arrays.toString(data2)); mystery(data3); System.out.println("data3 = " + Arrays.toString(data3)); 1/9

108 [5, 10, 14] 20 8 [5, 10, 14] [4, 5] [1,2,3] // 자바는 pass-by-value 방식이라서, 내부에서는바뀌지만 [1, 2, 3] [4, 5] // 자바는 pass-by-value 방식이라서, 외부에는영향을주지않는다. data1 = [4, 1, 2] data2 = [2, 1, 2, 4] data3 = [1, 1, 2, 1, 6] 2. 다음은 Point 와 Bound 클래스이다. 다음질문에답하라. (40 점 ) class Point { private int x, y; public Point(int x, int y) { this.x = x; this.y = y; public int getx() { return x; public int gety() { return y; public boolean equals(point other) { if (this == other) return true; return x == other.x && y == other.y; @Override public String tostring() { return "Point[" + x + "," + y + "]"; class Bound { private int x, y, w, h; public Bound(int x, int y, int w, int h) { this.x = x; this.y = y; this.w = w; this.h = h; public static Bound findbound(point[] arr) { int xmin = arr[0].getx(); int xmax = arr[0].getx(); int ymin = arr[0].gety(); int ymax = arr[0].gety(); for (Point p : arr) { xmin = Math.min(p.getX(), xmin); xmax = Math.max(p.getX(), xmax); ymin = Math.min(p.getY(), ymin); ymax = Math.max(p.getY(), ymax); return new Bound(xmin, ymin, xmax xmin, ymax ymin); @Override public String tostring() { return "Bound[" + x + "," + y + "," + w + "," + h + "]"; 2/9

2.1 findbound(point[]) 메소드의기능을설명하고, 다음코드실행결과를적어라. (5 점 ) Point[] parray1 = { new Point(7, 5), new Point(8, 5), new Point(9, 7), new Point(2, 3) ; Point[] parray2 = { new Point(2, 3), new Point(0, 15), new Point(15, 10) ; Bound<Point> b1 = Bound.findBound(pArray1); Bound<Point> b2 = Bound.findBound(pArray2); System.out.println(b1); System.out.println(b2); Bound 클래스의 findbound 는점배열을입력받아서 (xmin, ymin) (xmax, ymax) 찾은후 Bound(xmin, ymin, xmax xmin, ymax ymin) 을돌려줌 Bound[2,3,7,4] Bound[0,3,15,12] 2.2 다음코드의실행결과를적고 == 과 equals 를자세히설명하라. (10 점 ) Point v1 = parray1[3]; Point v2 = v1; Point v3 = parray2[0]; System.out.println("v1=" + v1); System.out.println("v2=" + v2); System.out.println("v3=" + v3); System.out.println("v1 == v2 " + (v1 == v2)); System.out.println("v1 == v3 " + (v1 == v3)); System.out.println("v1 equals v2 " + v1.equals(v2)); System.out.println("v1 equals v3 " + v1.equals(v3)); Bound v4 = new Bound(1, 1, 10, 10); Bound v5 = v4; Bound v6 = new Bound(1, 1, 10, 10); System.out.println("v4=" + v4); System.out.println("v5=" + v5); System.out.println("v6=" + v6); System.out.println("v4 == v5 " + (v4 == v5)); System.out.println("v4 == v6 " + (v4 == v6)); System.out.println("v4 equals v5 " + v4.equals(v5)); System.out.println("v4 equals v6 " + v4.equals(v6)); v1=point[2,3] v2=point[2,3] v3=point[2,3] v1 == v2 true // 레퍼런스가같은 v1 == v2 v1 == v3 false // 레퍼런스가다름 v1 equals v2 true // 레퍼런스가같으므로, 객체의내용이같음 v1 equals v3 true // 객체의내용이같으므로 (Point 클래스의 equals 재정의되어있으므로 ) v4=bound[1,1,10,10] v5=bound[1,1,10,10] v6=bound[1,1,10,10] v4 == v5 true // 레퍼런스가같은 v4 == v5 v4 == v5 false // 레퍼런스가다름 v4 equals v5 true // 레퍼런스가같으므로, 객체의내용이같음 v4 equals v6 false // (Bound 클래스에 equals 재정의되어있지않으므로 ) 3/9

2.3 다음코드를설명하고, 실행결과를적어라. (5 점 ) int[] iarray = {7, 5, 8, 5, 9, 7, 2, 3; List<Integer> ilist = new ArrayList<>(); for (int v : iarray) { ilist.add(v); System.out.println(iList.toString()); // [8, 9, 2, 3] iarray 정수배열을이용하여 List<Integer> ilist 리스트에추가하고그결과를출력 [7, 5, 8, 5, 9, 7, 2, 3] 2.4 위의 ilist 에서 5 와 7 을모두지우는코드를작성하라. (5 점 ) Iterator<Integer> it = ilist.iterator(); while (it.hasnext()) { Integer v = it.next(); if (v == 5 v == 7) it.remove(); 2.5 배열에서 5 와 7 을모두지우는 int[] remove57(int[] arr) 메소드를작성하라. (10 점 ) int[] iarray = {7, 5, 8, 5, 9, 7, 2, 3; iarray = remove57(iarray); System.out.println(Arrays.toString(iArray)); // [8, 9, 2, 3] public static int[] remove57(int[] arr) { int count = 0; for (int v : arr) { if (v == 5 v == 7) continue; count++; int[] temp = new int[count]; int index = 0; for (int v : arr) { if (v == 5 v == 7) continue; temp[index++] = v; return temp; 2.6 Array 와 ArrayList 의차이점 4 개를위코드예시를들어서자세히설명하라. (5 점 ) 1. 배열 (Array) 은생성후크기가고정이고, ArrayList 는크기가동적으로바뀜. 2. 배열 (Array) 은 int, float, double 과같은 primitive type 과 Object type 을모두사용가능 (iarray, parray1 등 ), ArrayList 는 Object type 만사용이가능 (ArrayList<Integer> 로사용 ) 3. 배열 (Array) 은요소를추가할때 = 연산자를사용하고, ArrayList 는 add() 메소드를사용 4. 배열 (Array) 길이는 length 를사용하고, ArrayList 길이는 size() 메소드를사용 for (int i=0; i<iarray; i++) 등. for (int i=0; i<parray1.size(); i++) 사용 4/9

3. 다음은클래스상속관계에서다형성을보여주고있다. 아래의질문에답하라. (40 점 ) enum Mode { B, C, D interface I { void method1(int v); interface J { void method2(); abstract class A implements I, J { protected Mode mode; protected int v; protected A(int v) { this.v = v; public void method3() { System.out.println(this); public String tostring() { return "a"; class B extends A { public B(int v) { super(v); // (3.2) this.mode = Mode.B; // (3.2) public void method1(int v) { System.out.println("b1 v=" + v); public void method2() { System.out.println("b2 mode=" + mode + " v=" + v); class C extends A { public C(int v) { super(v); // (3.2) this.mode = Mode.C; // (3.2) public void method1(int v) { System.out.println("c1 v=" + v); public void method2() { System.out.println("c2 mode=" + mode + " v=" + v); public String tostring() { return "c"; 5/9

public class D extends C { protected int v = 20; public D(int v) { super(v); // (3.2) this.mode = Mode.D; // (3.2) public void method3() { System.out.println("d3 this.v=" + this.v + " super.v=" + super.v); public class Main { public static void main(string[] args) { // (3.3) //A a1 = new A(1); //A a2 = new B(); //B a3 = a2; //D a4 = new D(3); //C a4 = new D(4); // (3.4) I i1 = new I() { public void method1(int v) { System.out.println("b1 v=" + v); ; i1.method1(100); I i2 = new B(0); i2.method1(100); J j1 = new J() { public void method2() { System.out.println("J"); ; j1.method2(); J j2 = new B(200); J2.method2(); // (3.5) A[] elements = {new C(10), new B(20), new D(30); for (int i = 0; i < elements.length; i++) { System.out.println(elements[i]); elements[i].method1(i); elements[i].method2(); elements[i].method3(); 3.1 abstract method 가무엇인지간단히설명하라. 위의코드에서예를찾아서보여라. (5 점 ) 추상메소드란메소드를선언만해놓고구현내용은없는것으로, 추상메소드를상속받은클래스는반드시추상메소드를 override 해서구현해야한다. 추상메소드를상속받은클래스가추상메소드를구현하지않으면 A 처럼추상클래스가되어야한다. 위의코드에서는 method1 과 method2 가추상메소드이다. 6/9

3.2 클래스 B, C, D 생성자에서사용되는 this 와 super 의의미를자세히설명하라. (5 점 ) this 는나자신 ( 객체 ) 를가리키는레퍼런스이다. super 는부모 ( 객체 ) 를가리키는레퍼런스다. B 생성자안에 super(v) 는즉부모클래스생성자 A(int v) 호출하여, v 멤버필드를 v 로지정하겠다는뜻. this.mode = Mode.B; 는나의 mode 멤버필드를 Mode.B 로지정하겠다는뜻. 3.3 main() 의 (3.3) 에서 compile error가발생한다. 각각그이유를설명하라. (10점) //A a1 = new A(1); // cannot create A abstract class object //A a2 = new B(); // compile error; no default B constructor. //B a3 = a2; // compile error; cannot convert from A to B //D a4 = new C(3); // compile error; cannot convert from C to D //C a4 = new D(4); // Duplicate local variable a4 3.4 main() 의 (3.4) 에서는무명클래스객체를생성하고있다. 실행결과를적어라. (10점) b1 v=100 // i1의 method1을호출 b1 v=100 // i2의실제객체는 B(0) 따라서 B의 method1을호출 J // j1의 method2를호출 b2 mode=b v=200 // j2의실제객체는 B(200) 따라서 B의 method2을호출 3.5 main() 의 (3.5) 실행결과를적고이유를자세히설명하라 ( 동적바인딩주의 ). (10 점 ) c // A.toString() => C.toString() c1 v=0 // A.method1(0) => C.method1(0) c2 mode=c v=10 // A.method2() => C.method2() c // A.method3() 호출하는데그내부의 this 는 c a // A.toString() => B.toString() 없으므로부모클래스것 A.toString() 호출 b1 v=1 // A.method1(1) => B.method1(1) b2 mode=b v=20 // A.method2() => B.method2() a // A.method3() 호출하는데그내부의 this 는 b c // A.toString() => D.toString() 없으므로부모클래스것 C.toString() 호출 c1 v=2 // A.method1(2) => D.method1(2) 없으므로 C.method1(2) 호출 c2 mode=d v=30 // A.method2() => D.method2() 없으므로 C.method2() 호출그러나 mode 는 D d3 this.v=20 super.v=30 // A.method3() => 오버라이딩된 D.method3() 호출그러나 this.v 는클래스 D 에서재설정한 20 이고, super.v 는 D(30) 생성자에서지정한 30 7/9

4. 다음 BMIPanel 클래스에 EventListener 구현을 (1)outer class 를사용하는방식과 (2)inner class 를사용하는방식으로코드를수정하여라. (10 점 ) // BMIPanelActionListener (outer class) class BMIPanelActionListener implements ActionListener { BMIPanel panel = null; public BMIPanelActionListener(BMIPanel panel) { this.panel = panel; public void actionperformed(actionevent e) { panel.calculate(); // BMIPanel import java.awt.event.*; import javax.swing.*; public class BMIPanel extends JPanel implements ActionListener { JLabel label1 = new JLabel(new ImageIcon("bmi.png")); JLabel label2 = new JLabel("Age"); JLabel label3 = new JLabel("Gender"); JLabel label4 = new JLabel("Height"); JLabel label5 = new JLabel("Weight (cm)")); JLabel label6 = new JLabel("BMI")); JTextField textfield2 = new NumberTextField(20); JTextField textfield4 = new NumberTextField(20); JTextField textfield5 = new NumberTextField(20); JRadioButton radio1 = new JRadioButton("MALE", true); JRadioButton radio2 = new JRadioButton("FEMALE"); JComboBox<String> combobox1 = new JComboBox<String>(BMI.names()); BMICalculator calc = new BMICalculator(); // BMIPanelActionListener (inner class) private class ButtonActionListener implements ActionListener { public void actionperformed(actionevent e) { calculate(); public BMIPanel() { this.setlayout(null); label1.setbounds(30, 10, 240, 200); label2.setbounds(30, 230, 120, 30); label3.setbounds(30, 270, 120, 200); label4.setbounds(30, 310, 120, 200); label5.setbounds(30, 350, 120, 200); label6.setbounds(30, 450, 120, 200); textfield2.setbounds(120, 230, 160, 200); textfield4.setbounds(120, 310, 160, 200); textfield5.setbounds(120, 350, 160, 200); ButtonGroup rgroup = new ButtonGroup(); rgroup.add(radio1); rgroup.add(radio2); radio1.setbounds(120, 270, 80, 30); 8/9

radio2.setbounds(200, 270, 80, 30); button1.setbounds(30, 400, 250, 30); button1.addactionlistener(this); combobox1.setbounds(120, 450, 160, 30); this.add(label1); this.add(label2); this.add(label3); this.add(label4); this.add(label5); this.add(label6); this.add(textfield2); this.add(textfield4); this.add(textfield6); this.add(radio1); this.add(radio2); this.add(button1); this.add(combobox1); private Gender selectgender() { if (radio1.isselected()) { return Gender.MALE; return Gender.FEMALE; private void calculate() { calc.setage(integer.parseint(textfield2.gettext())); calc.setheight(double.parsedouble(textfield4.gettext())); calc.setage(double.parsedouble(textfield5.gettext())); calc.setage(selectgender()); BMI bmi = calc.getbmi(); Combobox1.setSelectedIndex(bmi.ordinal()); public void actionperformed(actionevent e) { calculate(i); // 계산 (1) outer class 를사용할시 button1.addactionlistener(new BMIPanelActionLister(this)); (2) inner class 를사용할시 button1.addactionlistener(new ButtonActionLister()); - 끝 - 9/9