《《面向?qū)ο蟪绦蛟O(shè)計》試題.doc》由會員分享,可在線閱讀,更多相關(guān)《《面向?qū)ο蟪绦蛟O(shè)計》試題.doc(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。
裝訂線
得分
一、程序修改(20分)
說明:描述程序中的語法錯誤原因并修改,每小題4分,錯誤原因和改正錯誤各2分。
1. isPrime方法用于檢查參數(shù)num是否是質(zhì)數(shù)。
public boolean isPrime(int num){
boolean result = false;
for(int i=2; i
=num) { result = true; }
return result;
}
2. 具體類Reader實現(xiàn)了Readable接口。
interface Readable { void read(); }
class Reader implements Readable {
void read() { System.out.println("I Can read it."); }
}
3. main方法調(diào)用重載的max方法求2個數(shù)的最大值。
public class Error03 {
public static double max(int a, double b) { return a > b ? a : b; }
public static double max(double a, int b) { return a > b ? a : b; }
public static void main(String[] args) { double c = max(10, 100); }
}
4. 子類Child覆蓋了父類Parent中的output方法。
class Parent{
public final void output() { System.out.println("Parent"); }
}
class Child extends Parent{
public void output() { System.out.println("Child"); }
}
5. main方法調(diào)用sum方法求數(shù)組所有元素的和。
public class Error05 {
public double sum(double[] array) {
double result = 0;
for (double value : array) { result += value; }
return result;
}
public static void main(String[] args) {
double[] arr = {1.0, 2.0, 3.0, 4.0, 5.0};
System.out.println(sum(arr));
}
}
得分
二、程序填空(20分)
說明:填充程序中的空白,使程序能夠正確運行,每空2分。
1. 以下程序功能為輸入多個班的考試成績,并分別計算每個班的總成績。
import java.util.Scanner;
public class Score {
//inputScore方法用于輸入一個班的所有成績,參數(shù)num是班級的學(xué)生人數(shù)
public static double[] inputScore(int num) {
double[] array = new double[num];
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < (1) ; i++) {
array[i] = scanner.nextDouble();
}
return array;
}
public static double sumScore(double[] array) {
double result = 0;
for (int i = 0; i < array.length; i++) {
result += array[i];
}
return result;
}
public static void main(String[] args) {
double[][] scores;
int numOfClass, numOfStudent;
Scanner scanner = new Scanner(System.in);
System.out.print("一共有幾個班?");
numOfClass = scanner.nextInt();
scores = (2) ;
for (int i = 0; i < numOfClass; i++) {
System.out.println("第" + (i + 1) + "班有幾人?");
numOfStudent = scanner.nextInt();
scores[i] = inputScore( (3) );
}
for (int i = 0; i < numOfClass; i++) {
System.out.print("第" + (i + 1) + "班的總分:");
System.out.println(sumScore( (4) ));
}
}
}
2. 以下程序定義了Circle和Cylinder兩個類。
//類1,Circle.java
public class Circle {
private double radius; //圓的半徑
public Circle() { //無參構(gòu)造方法
(5) //調(diào)用有參構(gòu)造方法將radius初始化為0.0
}
public Circle(double radius) {
(6) //把參數(shù)radius賦給數(shù)據(jù)域radius
}
public double getArea(){
return (7) ; //求圓的面積,使用Math.PI
}
public double getRadius() {
return radius;
}
public void setRadius(double r) {
radius = r;
}
}
//類2,Cylinder.java
public class Cylinder extends Circle {
private double height; //圓柱的高度
public Cylinder() { //無參構(gòu)造方法
this.height = 0.0;
}
public Cylinder(double radius, double height) {
(8) ; //調(diào)用父類構(gòu)造方法將radius初始化為參數(shù)radius
this.height = height;
}
@Override
public double getArea() {
double area1 = (9) ; //求圓柱表面積
double area2 = (10) ; //求圓柱的底面積
return area1 + area2;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
得分
三、閱讀程序(20分)
說明:閱讀以下每段程序,寫出運行的結(jié)果,每小題5分。
1. 閱讀程序1
class Data { public int a = 10, b = 100; }
public class Read01 {
public static void main(String[] args) {
int a = 10, b = 100;
int[] array = {10, 100};
Data data = new Data();
System.out.println("a=" + a + ",b=" + b);
System.out.println("array[0]=" + array[0] + ",array[1]=" + array[1]);
System.out.println("data.a=" + data.a + ",data.b=" + data.b);
swap(a, b);
swap(array);
swap(data);
System.out.println("a=" + a + ",b=" + b);
System.out.println("array[0]=" + array[0] + ",array[1]=" + array[1]);
System.out.println("data.a=" + data.a + ",data.b=" + data.b);
}
public static void swap(int a, int b) {
int t = a; a = b; b = t;
}
public static void swap(int[] array) {
int t = array[0]; array[0] = array[1]; array[1] = t;
}
public static void swap(Data data) {
int t = data.a; data.a = data.b; data.b = t;
}
}
2. 閱讀程序2
public class Read02 {
public static void main(String[] args) {
A x = new B();
System.out.println("(1)x.i: "+x.i);
System.out.println("(2)(B)x.i: "+((B)x).i);
System.out.println("(3)x.j: "+x.j);
System.out.println("(4)(B)x.j: "+((B)x).j);
System.out.println("(5)x.m1(): "+x.m1());
System.out.println("(6)(B)x.m1(): "+((B)x).m1());
System.out.println("(7)x.m2(): "+x.m2());
System.out.println("(8)x.m3(): "+x.m3());
}
}
class A {
public int i=1;
public static int j=11;
public static String m1() { return "類A的靜態(tài)方法m1.";}
public String m2() { return "類A的實例方法m2.";}
public String m3() { return "類A的實例方法m3.";}
}
class B extends A{
public int i=2;
public static int j=22;
public static String m1() { return "類B的靜態(tài)方法m1.";}
public String m2() { return "類B的實例方法m2.";}
}
3. 閱讀程序3
class Person {
public Person() { System.out.println("Person()"); }
}
class Employee extends Person {
public Employee() {
this("調(diào)用Employee(s)");
System.out.println("Employee()");
}
public Employee(String s) { System.out.println(s); }
}
class Faculty extends Employee{
public Faculty(){ System.out.println("Faculty()"); }
}
class Test{
public static void main(String[] args) { new Faculty(); }
}
4. 閱讀程序4, 分別寫出??處的值是30和50的輸出結(jié)果。
public class Read04 {
public static void main(String[] args) {
int value = ??;
try {
if(value<40){
throw new Exception("value is too small");
}
System.out.println("value="+value);
} catch (Exception e) {
System.out.println(e.getMessage());
} finally{
System.out.println("process finished");
}
System.out.println("program continued");
}
}
四、程序設(shè)計(40分)
1. 設(shè)計并編寫一個名為MyPoint的類表示平面上一個具有x坐標和y坐標的點,完成以下要求:(15分)
l 將該類放置于包prog01中;
l 兩個double類型數(shù)據(jù)域x和y表示坐標,并進行封裝;
l 無參構(gòu)造方法創(chuàng)建點(0.0, 0.0); 有參構(gòu)造方法按指定坐標創(chuàng)建一個點;
l 方法distance返回當前點對象到參數(shù)點對象之間的距離;
l 編寫測試類TestMyPoint,其main方法中創(chuàng)建兩個點(0.0, 0.0)和(10.0, 35.5),輸出這兩個點之間的距離。
2.根據(jù)材料完成程序代碼(15分)。
要求利用多態(tài)性計算若干不同類型幾何圖形的面積之和,類與接口的關(guān)系見下面的類圖。類CricleV1,類RectangleV1和測試類Tester的源碼已經(jīng)給出。
CircleV1.java
public class CircleV1 {
private double radius;
public CircleV1() { this(1.0); }
public CircleV1(double radius) { this.radius = radius; }
public double getRadius() { return radius; }
public void setRadius(double radius) { this.radius = radius; }
}
RectangleV1.java
public class RectangleV1 {
private double width;
private double height;
public RectangleV1() { this(1.0, 1.0); }
public RectangleV1(double width, double height) {
this.width = width;
this.height = height;
}
public double getWidth() { return width; }
public void setWidth(double width) { this.width = width; }
public double getHeight() { return height; }
public void setHeight(double height) { this.height = height; }
}
Tester.java
public class Tester {
public static void main(String[] args) {
Object[] shapes = {
new CircleV2(10), //
new RectangleV2(10, 2), //
new CircleV2(), //
new RectangleV2() //
};
System.out.println(sumArea(shapes));
}
public static double sumArea(Object[] shapes) {
double result = 0;
for (int i = 0; i < shapes.length; i++) {
if (shapes[i] instanceof CalcArea) { //
result += ((CalcArea) shapes[i]).getArea(); //
}
}
return result;
}
}
請根據(jù)以上給定的材料,完成以下代碼,使的Tester類中的main方法能夠順利運行。注意Tester類中行尾有“//”標注的行使用了你需要完成的接口和類。
(1) 編寫完成接口CalcArea.java。(5分)
(2) 編寫完成類CircleV2.java。(5分)
(3) 編寫完成類RectangleV2.java。(5分)
3. 根據(jù)材料完成程序代碼(15分)。
import java.util.Date;
public class Account {
private int id; //賬號
private double balance; //賬戶余額
private Date createDate;//開戶日期
public Account(int id, double balance) {
this.id = id;
this.balance = balance;
this.createDate = new Date();
}
//取款方法
public void getMoney(double amt){
}
//以下是3個訪問器方法
public int getId() {
return id;
}
public double getBalance() {
return balance;
}
public Date getCreateDate() {
return createDate;
}
}
根據(jù)以上給出的銀行賬戶類Account的定義,按要求完成以下代碼。說明:答卷上只填寫修改部分的代碼即可,原有代碼的其他部分不需要重寫。
(1) 修改Account類的定義,使得Account類可以進行序列化。(3分)
(2) 修改并完成getMoney方法,要求:如果余額足夠,則減去參數(shù)amt給出的金額;否則getMoney方法拋出一個Exception異常對象,異常信息為“余額不足.”。(3分)
(3) 修改Account類的定義,使得Account類可以進行“深克隆”,說明:Date類可以進行克隆。(4分)
第 7 頁 共 8 頁
鏈接地址:http://kudomayuko.com/p-9159246.html