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

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

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

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

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

类,参考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){

}

publicstaticvoidmethod1(){

method2();

doubleradius;

//错误:

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

Circle(){

radius=5.0;

Circle(doublenewRadius){

radius=newRadius;

publicstaticvoidmethod2(){

Circlec=newCircle();

System.out.println("

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);

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{

Circle3circle1=newCircle3

(1);

Circle3circle2=newCircle3

(2);

swap1(circle1,circle2);

Afterswap1:

circle1="

+circle1.radius

+"

circle2="

+circle2.radius);

swap2(circle1,circle2);

Afterswap2:

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{

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{

swap(a);

a[0]="

publicstaticvoidswap(int[]a){

inttemp=a[0];

a[0]=a[1];

a[1]=temp;

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

Tt=newT();

swap(t);

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.

Tt1=newT();

Tt2=newT();

t1'

si="

+t1.i+"

andj="

+t1.j);

t2'

+t2.i+"

+t2.j);

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代码:

Datedate=newDate(1234567);

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

date=newDate(7654321);

截图:

结果分析:

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

C代码:

date.setTime(7654321);

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

D代码:

date=null;

结果分析:

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

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

原出错程序

publicclassBE8_20{

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:

publicstaticvoidmain(String[]args){

java.util.Datedates=newjava.util.Date();

//用普通变量代替数组,并赋初值

System.out.println(dates);

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

正确程序2:

publicclassTest{

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

for(inti=0;

10;

i++){

dates[i]=newjava.util.Date();

//为数组的每个元素赋初值

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

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

1.课本P238第八章编程题8.4(使用Random 

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

(1)程序:

publicclassRandom8_4{

/**

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

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

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

*/

Randomrd=newRandom(1000);

for(inti=0;

50;

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

"

);

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

}

(2)运行截图:

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

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){

请设置您的账户余额:

this.balance=input.nextDouble();

publicdoublegetAnnualInterestRate(){returnannualInterestRate;

publicvoidsetAnnualInterestRate(doubleannualInterestRate){

请输入年利率:

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();

Scannerinput=newScanner(System.in);

inta,b;

Accountaccount1=newAccount();

\n\t\t\t所创建的第一个账户的账户信息:

"

账户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();

月利息为"

+accoun

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

当前位置:首页 > 初中教育

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

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