Java数组与对象实验报告.docx

上传人:b****4 文档编号:24278773 上传时间:2023-05-26 格式:DOCX 页数:17 大小:20.06KB
下载 相关 举报
Java数组与对象实验报告.docx_第1页
第1页 / 共17页
Java数组与对象实验报告.docx_第2页
第2页 / 共17页
Java数组与对象实验报告.docx_第3页
第3页 / 共17页
Java数组与对象实验报告.docx_第4页
第4页 / 共17页
Java数组与对象实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

Java数组与对象实验报告.docx

《Java数组与对象实验报告.docx》由会员分享,可在线阅读,更多相关《Java数组与对象实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

Java数组与对象实验报告.docx

Java数组与对象实验报告

实验六Java对象和数组

一实验目的

1.掌握Java中对象和引用变量的概念

2.掌握Java数组的使用和本质

3.掌握数组相关常用算法

二实验内容

1.类的定义和对象创建

定义类MyPoint用以包含属性x,y表示一个点的坐标。

在类中编写main()方法,在其中声明两个MyPoint类型的对象start和end,分别创建对象并赋值给对象名start和end。

将对象start的成员x和y分别赋值为10,将对象end的成员x和y分别赋值为20。

【程序代码】

packageexp6;

publicclassMyPoint{

intx,y;

publicMyPoint(intx,inty){

this.x=x;

this.y=y;

}

publicstaticvoidmain(String[]args){

MyPointstart;

MyPointend;

start=newMyPoint(10,10);

end=newMyPoint(20,20);

}

}

1.1输出两个对象的字符串表示。

用两种方法实现

(1)System.out.println("StartMyPoint=x:

"+start.x+"y"+start.y);

(2)通过改写toString()方法来实现,然后使用System.out.println(start);

【写出toString()方法的全部代码】

publicStringtoString(){

return"x="+x+""+"Y="+y;

}

1.2在main()方法中增加代码,以完成下列操作:

声明一个新的MyPoint类型对象stray。

将对象end的赋值给stray,随后输出end和stray变量的成员x和y的值。

将对象stray的成员x和y赋任意新值,输出end和stray的成员的值。

将start对象的成员x和y赋予新的值(任意),再次输出start和end的成员值。

分析程序输出结果,得出相应结论。

【程序代码和分析:

填写增加部分的代码即可】

MyPointstart=newMyPoint(10,10);

MyPointend=newMyPoint(20,20);

MyPointstray;

stray=end;

System.out.println(end);

System.out.println(stray);

 

stray=end;

stray.x=30;

stray.y=30;

System.out.println(end);

System.out.println(stray);

 

start.x=50;

start.y=50;

System.out.println(end);

System.out.println(start);

运行结果:

x=20Y=20

x=20Y=20

x=30Y=30

x=30Y=30

x=30Y=30

x=50Y=50

分析程序:

(1)、将对象end的赋值给stray,则将引用变量end的内存地址赋给stray,两者指向同一数组。

所以输出X=20Y=20

(2)、将对象stray的成员x和y赋任意新值,则将引用变量stray指向新的内存,输出X=30Y=30

(3)、将start对象的成员x和y赋予新的值(任意),则将引用变量start指向新的内存,输出X=50Y=50

2.一维数组的使用

2.1定义一个BasicArray类,在main()方法中声明(非创建)两个整型数组,thisArray和thatArray。

创建一个数组,它的初值是1至10。

将这个数组的引用赋值给变量thisArray。

使用for循环输出thisArray数组的所有值。

如何控制循环的次数?

编译并运行程序,记下输出结果。

【程序代码和分析】

packageexp6;

publicclassBasicArray{

publicstaticvoidmain(String[]args){

intthisArray[];

intthatArray[];

intarrayNew[]={1,2,3,4,5,6,7,8,9,10};

thisArray=arrayNew;

for(inti=0;i

System.out.println(thisArray[i]);

}

}

}

运行结果:

12345678910

分析程序:

声明数组thisArray,thatArray,声明数组arrayNew并初始化。

将arrayNew赋给thisArray,则将arrayNew的内存地址赋给thisArray,两者指向同一数组。

最后用for循环输出thisArray指向的数组。

2.2对每个thisArray的元素,把它的值赋值为下标值的阶乘。

并输出数组的所有元素。

重新编译并运行程序。

【程序代码和分析:

填写增加部分的代码即可】

for(inti=0;i

intj;

for(j=1,thisArray[i]=1;j<=i;j++){

thisArray[i]*=j;

}

System.out.println("thisArray["+i+"]="+thisArray[i]);

}

运行结果:

thisArray[0]=1

thisArray[1]=1

thisArray[2]=2

thisArray[3]=6

thisArray[4]=24

thisArray[5]=120

thisArray[6]=720

thisArray[7]=5040

thisArray[8]=40320

thisArray[9]=362880

分析程序:

因为将thisArray的赋值为下标的阶乘,所以thisArray指向的数组其元素将被重新赋值。

2.3将thisArray赋值给thatArray。

输出thatArray的所有元素。

编译并运行程序,分析程序运行结果。

【程序代码和分析:

填写增加部分的代码即可】

thatArray=thisArray;

intlength=thatArray.length;

for(i=0;i

System.out.println("thatArray[i]"+thatArray[i]);

运行程序:

thatArray[0]=1

thatArray[1]=1

thatArray[2]=2

thatArray[3]=6

thatArray[4]=24

thatArray[5]=120

thatArray[6]=720

thatArray[7]=5040

thatArray[8]=40320

thatArray[9]=362880

分析程序:

因为thisArray赋值给thatArray,所以thisArray,thatArray将指向同一数组。

2.4任意修改thisArray数组的某些元素,输出thatArray数组的值。

编译并运行程序,分析运行结果。

【程序代码和分析:

填写增加部分的代码即可】

thisArray[4]=4444;

thatArray=thisArray;

intlength=thatArray.length;

for(i=0;i

System.out.println("thatArray[i]"+thatArray[i]);

2.5创建一个长度为20个元素的整型数组。

将新数组的引用给变量thatArray,输出thatArray的值。

编译并运行程序,记录输出结果并分析原因。

【程序代码和分析:

填写增加部分的代码即可】

int[]otherArray=newint[20];

thatArray=otherArray;

for(inti=0;i

System.out.print(thatArray[i]+"");

}

运行结果:

00000000000000000000

分析程序:

因为创建了一个数组但是没有初始化,所以输出的时候输出的是该数组的数据类型的默认值

2.6使用arraycopy方法将thisArray数组的值给thatArray数组。

输出thatArray数组中元素的值。

编译并运行程序。

分析程序运行结果。

【程序代码和分析:

填写增加部分的代码即可】

intthisArray[];

intthatArray[];

intarraynew[]={1,2,3,4,5,6,7,8,9,10};

thisArray=arraynew;

int[]otherArray=newint[20];

thatArray=otherArray;

System.arraycopy(thisArray,0,thatArray,1,thisArray.length);

for(inti=0;i

System.out.print(thatArray[i]+"");

}

运行结果:

012345678910000000000

分析程序:

使用arraycopy()方法将thisArray的值赋给thatArray,arraycopy()方法中的参数的意思是:

将thisArray数组从下标为0的元素开始,复制到thatArray数组的下标为1的元素,一共复制thisArray.length个元素,其余的元素不变。

2.7改变thatArray数组中某些元素的值,输出thisArray和thatArray数组的所有元素。

编译并运行程序。

分析程序运行结果。

【程序代码和分析:

填写增加部分的代码即可】

thatArray[15]=15;

System.out.print("thisArray:

");

for(inti=0;i

System.out.print(thisArray[i]+"");

}

System.out.println("");

System.out.print("thatArray:

");

for(inti=0;i

System.out.print(thatArray[i]+"");

}

运行结果:

thisArray:

12345678910

thatArray:

01222345678910000000000

3.在文本文件中存放着一系列的整数,整数与整数之间用逗号分隔。

编写程序将这些整数读入程序,然后对数组进行特定处理后输出。

提示:

可以使用Scanner类的nextLine()方法得到一个字符串line,其中存放着所有的整数。

然后用Stringarr[]=line.split(“,”);可将逗号作为分隔符分离出一个数组,数组的长度即为整数的个数,每一个数组元素可通过Integer.parseInt()转换为整型数据存放到新创建的整型数组中(数组长度即为arr的长度)。

3.1将数据读取分析功能单独设计为一个方法

publicstaticint[]readData();

【写出方法代码】

importjava.io.BufferedReader;

importjava.io.BufferedWriter;

importjava.io.FileReader;

importjava.io.FileWriter;

importjava.io.BufferedWriter;

importjava.io.IOException;

importjava.util.Scanner;

publicstaticint[]readData()throwsFileNotFoundException{

Scannersc=newScanner(newBufferedReader(newFileReader("E:

\\实验备份\\XX云同步盘\\Java\\workspace\\source.txt")));

Stringst=sc.nextLine();

Stringarr[]=st.split(",");

intarrLength=arr.length;

intintArr[]=newint[arrLength];

inti;

for(i=0;i

intArr[i]=Integer.parseInt(arr[i]);

}

returnintArr;

}

3.2将读取到的整数使用冒泡排序法按升序排序,写出方法代码。

方法原型为

publicstaticvoidbubbleSort(inta[],intn);//n为元素个数

publicstaticvoidbubbleSort(inta[],intn)throwsFileNotFoundException{

intj;

for(j=0;j

booleanflag=true;

for(inti=0;i

if(a[i]>a[i+1]){

inttemp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

flag=false;

}

}

if(flag==true)break;

}

for(j=0;j

System.out.print(a[j]+"");

}

}

publicstaticvoidmain(String[]args)throwsFileNotFoundException{

bubbleSort(readData(),readData().length);

}

运行结果:

98949190898988787560

3.2将读取到的整数使用选择排序法按升序排序,写出方法代码。

方法原型为

publicstaticvoidselectSort(inta[],intn);//n为元素个数

publicstaticvoidselectSort(inta[],intn)throwsFileNotFoundException{

inti;

for(i=0;i

intlowIndex=i;

for(intj=i+1;j

if(a[j]>a[lowIndex]){

lowIndex=j;

}

}

inttemp=a[i];

a[i]=a[lowIndex];

a[lowIndex]=temp;

}

for(i=0;i

System.out.print(a[i]+"");

}

}

运行结果:

60757888898990919498

3.3将读取到的整数使用Arrays类中的sort方法进行排序,写出方法代码。

publicstaticvoidArraySort(intx[])throwsFileNotFoundException{

Arrays.sort(x);

for(inti=0;i

}

publicstaticvoidmain(String[]args)throwsFileNotFoundException{

ArraySort(readData());

}

3.4对读取到的整数进行分析,求出最大值、最小值、平均值并输出。

同样设计为一个单独的方法。

publicstaticvoidaboutArray(inta[],intn){

intmax=0,min=100,sum=0;

inti;

floatave;

for(i=0;i

if(a[i]>max)

max=a[i];

if(a[i]

sum+=a[i];

//System.out.print("最大值"+max+""+"最小值"+min);

}

ave=sum/(float)n;

System.out.println("最大值:

"+max+""+"最小值:

"+min+""+"平均值:

"+ave);

}

4.定义MyDate类,包含year,month,day三个成员。

在MyDate类中改写toString()方法,equals方法并实现Compareable接口。

在大小比较时,返回两个日期相差的天数。

为了计算相差的天数,设计方法intorder()返回日期在该年的序号,设计函数intdiff(MyDatead)计算本日期和ad日期之间相差的天数。

packageexp6;

publicclassMyData{

intyear;

intmonth;

intday;

publicMyData(intx,inty,intz){

year=x;

month=y;

day=z;

}

publicvoidsetYear(intx){

year=x;

}

publicvoidsetMonth(inty){

month=y;

}

publicvoidsetDay(intz){

day=z;

}

publicintgetYear(){

returnyear;

}

publicintgetMonth(){

returnmonth;

}

publicintgetDay(){

returnday;

}

publicStringtoString(){//重写toString()

returnyear+"年"+month+"月"+day+"日";

}

publicbooleanisLeapYear(){

if((year%4==0&&year%100!

=0)||year%400==1)

returntrue;

elsereturnfalse;

}

publicintorder(){

intj=0;

intnumOfMonth[]={0,0,31,28,31,30,31,30,31,31,30,31,30};

intnumOfMonth2[]={0,0,31,29,31,30,31,30,31,31,30,31,30};

if(isLeapYear()){//计算这天在这年中的次序

for(inti=1;i<=month;i++)//闰年的计算方法

j+=numOfMonth2[i];

}

else

for(inti=1;i<=month;i++)//平年的计算方法

j+=numOfMonth[i];

returnj+day;

}

publicintnumOfYear(MyDatamd){

if(md.isLeapYear())

return366;

elsereturn365;

}

publicstaticintdiff(MyDatamd1,MyDatamd2){

intsd=md1.getYear()-md2.getYear();

intnumOfLeap=(sd-2)/4;//两个日期之间的闰年个数

intdifferent;

different=numOfLeap*366+(sd-numOfLeap-1)*365+md1.order()+(md2.numOfYear(md2)-md2.order());

returndifferent;

}

publicstaticvoidmain(String[]args){

MyDatamd=newMyData(2008,3,1);

MyDatamd2=newMyData(2004,3,1);

System.out.println(diff(md,md2));

}

}

【实验小结】

实验准备和过程

实验结果

实验报告

总分

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

当前位置:首页 > 工程科技 > 建筑土木

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

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