Java实验三参考答案昆工版本.docx

上传人:b****7 文档编号:8691518 上传时间:2023-02-01 格式:DOCX 页数:26 大小:168.03KB
下载 相关 举报
Java实验三参考答案昆工版本.docx_第1页
第1页 / 共26页
Java实验三参考答案昆工版本.docx_第2页
第2页 / 共26页
Java实验三参考答案昆工版本.docx_第3页
第3页 / 共26页
Java实验三参考答案昆工版本.docx_第4页
第4页 / 共26页
Java实验三参考答案昆工版本.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

Java实验三参考答案昆工版本.docx

《Java实验三参考答案昆工版本.docx》由会员分享,可在线阅读,更多相关《Java实验三参考答案昆工版本.docx(26页珍藏版)》请在冰豆网上搜索。

Java实验三参考答案昆工版本.docx

Java实验三参考答案昆工版本

昆明理工大学信息工程与自动化学院学生实验报告

(2012—2013学年第一学期)

课程名称:

java程序设计开课实验室:

信自4452012年11月21日

年级、专业、班

计科11

学号

姓名

苏东博,狄家帆,张盼

成绩

95

实验项目名称

Java面向对象程序设计

指导教师

张晓丽

教师评语

复习题仔细查看并掌握;编程题可参考书提供的源代码。

教师签名:

年月日

一、实验目的及内容

目的:

掌握Java中面向对象的思想,类和对象的应用,可见性修饰符,数据域的封装,静态变量和方法,给方法传递对象参数。

内容:

完成下面要求的程序和习题

(一).复习题

1.课本P234第八章复习题8.12,给出正确的程序并显示结果,分析错误问题;

2.课本P235第八章复习题8.16,显示并分析结果;

3.课本P235第八章复习题8.17,显示并分析结果;

4.课本P236第八章复习题8.18,显示并分析结果;

5.课本P236第八章复习题8.19,显示并分析结果;

6.课本P237第八章复习题8.20,给出正确的程序并显示结果,分析错误问题;

(二).编程题

1.课本P238第八章编程题8.4(使用Random 类,参考jdk_7_docs.api,)

注:

通俗说,两者的区别是:

带种子的,每次运行生成的结果都是一样的。

不带种子的,每次 运行生成的都是随机的,没有规律可言。

2.课本p238第八章编程练习题8.7(账户类);

注:

月利率=balance*(annualInterestRate/12)

3.课本p239第八章编程练习题8.9(正n边形)

注:

面积公式错误:

p->PI;则JAVA编程公式:

n*side*side/(4*Math.tan(Math.PI/n)

访问器getter和修改器setter,在eclipse中可自动生成(eclipse中source菜单\Generategetterandsetter)

4.完成并掌握每章课后复习题,上课提问检查;

5.每章其他编程练习题;(选作)

二、要求(编程题中给出实验内容的程序设计、实现和结果,并对结果进行分析。

(一).复习题

1.课本P234第八章复习题8.12,给出正确的程序并显示结果,分析错误问题;

分析:

不能从静态方法中直接调用一个实例方法或引用实例变量,须实例化对象后,通过该对象调用实例方法或变量;但可以从一个实例方法中调用一个静态方法或引用一个静态变量。

正确程序1:

publicclassFoo{

publicstaticvoidmain(String[]args){

method1();

}

publicstaticvoidmethod1()

{

method2();}

publicstaticvoidmethod2(){

System.out.println("Whatisradius"+c.getRadius());

}

staticCirclec=newCircle();

}

classCircle{

staticdoubleradius;

staticdoublegetRadius(){

radius=1;

returnradius;

}

}

正确程序2:

publicclassBe8_12{

/*不能从静态方法中直接调用一个实例方法或引用实例变量,

*须实例化对象后,通过该对象调用实例方法或变量

*但可以从一个实例方法中调用一个静态方法或引用一个静态变量。

*/

publicstaticvoidmain(String[]args){

newBe8_12().method1();

}

publicvoidmethod1(){

method2();

}

publicstaticvoidmethod2(){

Circlec=newCircle();//注须将Circle.java源程序放在同一包p8中,或importp8.Circle;且Circle类中须有getRadius方法:

publicdoublegetRadius(){

returnr;

}

System.out.println("whatisradius"+c.getRadius());

//newBe8_12().method1();//须实例化对象后,通过该对象调用实例方法或变量

}

}

大多数错误程序:

publicclassFoo{

publicstaticvoidmain(String[]args){

method1();

}

publicstaticvoidmethod1(){

method2();

}

doubleradius;

//错误:

不在Circle类中如何能定义该构造函数。

Circle(){

radius=5.0;

}

Circle(doublenewRadius){

radius=newRadius;

}

publicstaticvoidmethod2(){

Circlec=newCircle();

System.out.println("whatisradius"+c.getRadius());

}

doublegetRadius(){

returnradius;}

}

结果显示:

whatisradius1.0//注1.0由无参构造函数Circle()决定

2.课本P235第八章复习题8.16,显示并分析结果;

分析:

传递基本类型参数,传递的是实参的值,实参的值不会改变;

传递引用类型参数,传递的是对象的引用,可以改变实参的值。

程序:

publicclassTest{

publicstaticvoidmain(String[]args){

CountmyCount=newCount();

inttimes=0;

for(inti=0;i<100;i++)

increment(myCount,times);

System.out.println("countis"+myCount.count);

System.out.println("timesis"+times);

}

publicstaticvoidincrement(Countc,inttimes){

c.count++;times++;

}

}

classCount{

publicintcount;

publicCount(intc){

count=c;

}

publicCount(){

count=1;

}

}

结果显示:

3.课本P235第八章复习题8.17,显示并分析结果;

分析:

第三四行分别创建了半径为1和2的两个对象circle1和circle2;

然后分别调用swap1()和swap2()函数,并输出两个对象的半径;

在swap1()函数对地址值交换,但未影响对象,值未做交换;

在swap2()函数中两个对象的半径在内存里交换了,值成功交换;

程序:

publicclassBe8_17{

publicstaticvoidmain(String[]args){

Circle3circle1=newCircle3

(1);

Circle3circle2=newCircle3

(2);

swap1(circle1,circle2);

System.out.println("Afterswap1:

circle1="+circle1.radius

+"circle2="+circle2.radius);

swap2(circle1,circle2);

System.out.println("Afterswap2:

circle1="+circle1.radius

+"circle2="+circle2.radius);

}

publicstaticvoidswap1(Circle3x,Circle3y){

Circle3temp=x;

x=y;

y=temp;

}

publicstaticvoidswap2(Circle3x,Circle3y){

doubletemp=x.radius;

x.radius=y.radius;

y.radius=temp;

}

}

classCircle3{

doubleradius;

Circle3(doublenewRadius){

radius=newRadius;

}

}

}

结果显示:

4.课本P236第八章复习题8.18,显示并分析结果;

分析:

Swap方法实现了两个形参的交换,但是未能改变实参-数组元素的值。

即在调用swap函数的时候把a[0]a[1]的值1,2传给了n1,n2在swap()函数中只调换了n1,n2的位置,但并没有调换a[0]和a[1]的值,所以输出结果仍然为a[0]=1,a[1]=2

程序:

publicclassfuxiti{

publicstaticvoidmain(String[]args){

int[]a={1,2};

swap(a[0],a[1]);

System.out.println("a[0]="+a[0]+"a[1]="+a[1]);

}

publicstaticvoidswap(intn1,intn2){

inttemp=n1;

n1=n2;

n2=temp;

}

}

结果显示

Swap方法利用传递数组的方式来实现了两个数据的交换,Swap方法将a[0]a[1]做了交换

publicclassfuxiti{

publicstaticvoidmain(String[]args){

int[]a={1,2};

swap(a);

System.out.println("a[0]="+a[0]+"a[1]="+a[1]);

}

publicstaticvoidswap(int[]a){

inttemp=a[0];

a[0]=a[1];

a[1]=temp;

}

}

传递一个实例化对象到swap方法中,实现了e1,e2值的交换

publicclassfuxiti{

publicstaticvoidmain(String[]args){

Tt=newT();

swap(t);

System.out.println("e1="+t.e1+"e2="+t.e2);

}

publicstaticvoidswap(Tt){

inttemp=t.e1;

t.e1=t.e2;

t.e2=temp;

}}

classT{

inte1=1;

inte2=2;

}

结果显示:

 

静态变量i将变量值存储在一个公共的内存地址,所以任何对象对此变量的值修改,都会使同一类的所有对象都受到影响。

对象t1的实例化使i的值从0加到1,对象t2的实例化使i的值从1加到2,此时i的输出结果就是2.

publicclassfuxiti{

publicstaticvoidmain(String[]args){

Tt1=newT();

Tt2=newT();

System.out.println("t1'si="+t1.i+"andj="+t1.j);

System.out.println("t2'si="+t2.i+"andj="+t2.j);

}

}

classT{

staticinti=0;

intj=0;

T(){

i++;

j=1;

}

}

结果显示:

 

5.课本P236第八章复习题8.19,显示并分析结果;

A代码:

importjava.util.Date;

publicclassTest

{

publicstaticvoidmain(String[]args)

{

Datedate=null;

m1(date);

System.out.println(date);

}

publicstaticvoidm1(Datedate)

{

date=newDate();

}

}

截图:

结果分析:

给对象date赋初值为null的,调用函数m1,只给形参(局部变量)赋值当前时间,可m1无返回值,对象date依然为null。

B代码:

importjava.util.Date;

publicclassTest

{

publicstaticvoidmain(String[]args)

{

Datedate=newDate(1234567);

m1(date);

System.out.println(date.getTime());

}

publicstaticvoidm1(Datedate)

{

date=newDate(7654321);

}

}

截图:

结果分析:

给对象date赋初值,调用函数m1,只给形参(局部变量)赋值,可m1无返回值,对象date依然为原值,所以还是原先实例的值。

C代码:

importjava.util.Date;

publicclassTest

{

publicstaticvoidmain(String[]args)

{

Datedate=newDate(1234567);

m1(date);

System.out.println(date.getTime());

}

publicstaticvoidm1(Datedate)

{

date.setTime(7654321);

}

}

截图:

结果分析:

给对象date赋初值,调用函数m1,后来利用date的修改器setTime来修改了date值为7654321。

D代码:

importjava.util.Date;

publicclassTest

{

publicstaticvoidmain(String[]args)

{

Datedate=newDate(1234567);

m1(date);

System.out.println(date.getTime());

}

publicstaticvoidm1(Datedate)

{

date=null;

}

}

截图:

结果分析:

给对象date赋初值,调用函数m1,只给形参(局部变量)赋null值,可m1无返回值,对象date依然为原值,所以还是原先实例的值。

6.课本P237第八章复习题8.20,给出正确的程序并显示结果,分析错误问题;

原出错程序

publicclassBE8_20{

publicstaticvoidmain(String[]args){

java.util.Date[]dates=newjava.util.Date[10];//只给date数组分配了空间,未赋初值,均为Null。

System.out.println(dates[0]);//date[0]为null

System.out.println(dates[0].toString());//toString是把date对象的时间转换为字符串,遭遇空指针异常,提示NullPointerException.

}

}

正确程序1:

importjava.util.Date;

publicclassfuxiti{

publicstaticvoidmain(String[]args){

java.util.Datedates=newjava.util.Date();//用普通变量代替数组,并赋初值

System.out.println(dates);

System.out.println(dates.toString());

}

}

正确程序2:

publicclassTest{

publicstaticvoidmain(String[]args){

java.util.Date[]dates=newjava.util.Date[10];

for(inti=0;i<10;i++){

dates[i]=newjava.util.Date();//为数组的每个元素赋初值

}

System.out.println(dates[0]);

System.out.println(dates[0].toString());

}

}

结果显示:

(二).编程题

1.课本P238第八章编程题8.4(使用Random 类,参考jdk_7_docs.api,)

注:

通俗说,两者的区别是:

带种子的,每次运行生成的结果都是一样的。

不带种子的,每次运行生成的都是随机的,没有规律可言。

(1)程序:

publicclassRandom8_4{

/**

*E8-4使用随机类,种子1000

*通俗说,两者的区别是:

带种子的,每次运行生成的结果都是一样的。

*不带种子的,每次运行生成的都是随机的,没有规律可言。

*/

publicstaticvoidmain(String[]args){

Randomrd=newRandom(1000);

for(inti=0;i<50;i++){

System.out.print(rd.nextInt(100)+",");

//nextInt(n)返回一个伪随机数,它是从此随机数生成器的序列中取出的、在0(包括)和指定值(不包括)之间均匀分布的int值

}

}

}

(2)运行截图:

 

2.课本p238第八章编程练习题8.7(账户类);注:

月利率=balance*(annualInterestRate/12)

(1)程序:

importjava.util.Scanner;

publicclassAccount{

privateintid=0;

privatedoublebalance=0;

privatedoubleannualInterestRate=0;

privatejava.util.DatedateCreated;

publicintgetId(){returnid;}

publicvoidsetId(intid){

System.out.print("请输入账户ID:

");

this.id=input.nextInt();

}

publicdoublegetBalance(){returnbalance;}

publicvoidsetBalance(doublebalance){

System.out.print("请设置您的账户余额:

");

this.balance=input.nextDouble();

}

publicdoublegetAnnualInterestRate(){returnannualInterestRate;}

publicvoidsetAnnualInterestRate(doubleannualInterestRate){

System.out.print("请输入年利率:

");

this.annualInterestRate=input.nextDouble();

}

Scannerinput=newScanner(System.in);

publicdoublegetMonthlyInterestRate(){

doubleMonthlyInterestRate=balance*(annualInterestRate/12);

returnMonthlyInterestRate;

}

publicjava.util.DategetDateCreated(){

returndateCreated;

}

publicvoidsetDateCreated(java.util.DatedateCreated){

this.dateCreated=newjava.util.Date();

}

publicstaticvoidmain(String[]args){

Scannerinput=newScanner(System.in);

inta,b;

Accountaccount1=newAccount();

System.out.println("\n\t\t\t所创建的第一个账户的账户信息:

");

System.out.println("账户ID:

"+account1.id+"\t账户余额:

"+account1.balance+"\t年利率:

"+account1.annualInterestRate+"\t开户时间:

"+account1.dateCreated);

do{

System.out.print("请选择业务:

1.存款;2.取款!

3.修改器");

a=input.nextInt();

if(a==1){

account1.deposit();

System.out.println("月利息为"+accoun

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1