Java数组与对象实验报告.docx
- 文档编号:24278773
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:17
- 大小:20.06KB
Java数组与对象实验报告.docx
《Java数组与对象实验报告.docx》由会员分享,可在线阅读,更多相关《Java数组与对象实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
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)); } } 【实验小结】 实验准备和过程 实验结果 实验报告 总分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 数组 对象 实验 报告