实验二数组面向对象程序设计入门.docx

上传人:b****2 文档编号:3219184 上传时间:2023-05-05 格式:DOCX 页数:26 大小:169.93KB
下载 相关 举报
实验二数组面向对象程序设计入门.docx_第1页
第1页 / 共26页
实验二数组面向对象程序设计入门.docx_第2页
第2页 / 共26页
实验二数组面向对象程序设计入门.docx_第3页
第3页 / 共26页
实验二数组面向对象程序设计入门.docx_第4页
第4页 / 共26页
实验二数组面向对象程序设计入门.docx_第5页
第5页 / 共26页
实验二数组面向对象程序设计入门.docx_第6页
第6页 / 共26页
实验二数组面向对象程序设计入门.docx_第7页
第7页 / 共26页
实验二数组面向对象程序设计入门.docx_第8页
第8页 / 共26页
实验二数组面向对象程序设计入门.docx_第9页
第9页 / 共26页
实验二数组面向对象程序设计入门.docx_第10页
第10页 / 共26页
实验二数组面向对象程序设计入门.docx_第11页
第11页 / 共26页
实验二数组面向对象程序设计入门.docx_第12页
第12页 / 共26页
实验二数组面向对象程序设计入门.docx_第13页
第13页 / 共26页
实验二数组面向对象程序设计入门.docx_第14页
第14页 / 共26页
实验二数组面向对象程序设计入门.docx_第15页
第15页 / 共26页
实验二数组面向对象程序设计入门.docx_第16页
第16页 / 共26页
实验二数组面向对象程序设计入门.docx_第17页
第17页 / 共26页
实验二数组面向对象程序设计入门.docx_第18页
第18页 / 共26页
实验二数组面向对象程序设计入门.docx_第19页
第19页 / 共26页
实验二数组面向对象程序设计入门.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

实验二数组面向对象程序设计入门.docx

《实验二数组面向对象程序设计入门.docx》由会员分享,可在线阅读,更多相关《实验二数组面向对象程序设计入门.docx(26页珍藏版)》请在冰点文库上搜索。

实验二数组面向对象程序设计入门.docx

实验二数组面向对象程序设计入门

湖北工业大学工程技术学院实验报告

课程名称:

JAVA实验内容:

实验二数组面向对象的课程设计入门

学院:

工程技术学院专业班级:

11gb软件2班

教师:

程学先成绩:

一、实验目的:

1、学习与掌握内部类、外部类、抽象类、静态方法、实例化、this、接口等的概念与应用方法

2、掌握作用域的概念,protected、private、private各自影响范围

3、学习数组定义与程序设计方法

4、掌握判断素数、使用Calendar日历类、产生随机数、矩阵及其乘法、杨辉三角形等基本算法及程序设计方法

5、学习并掌握递归程序设计方法

6、学习选择法排序、直接选择法排序、插入法排序、冒泡法排序的方法与程序设计方法

二、实验内容:

1、执行下述程序,说明各程序功能,如果题后有问题,按问题进行设计并总结。

将每题运行结果复制粘贴到一个Word文件中。

1)判断从100到500之间的数那些是素数,那些不是素数。

如果***是素数,就显示***是素数,否则显示***不是素数。

importjava.util.*;

publicclassa1{

staticlongPrimenumber(intn){

longs1=0,i=2,m=(long)Math.sqrt(n);

while(i<=m&&s1==0){

if((n%i)==0)s1=1;

elsei=i+1;

}

returns1;

}

publicstaticvoidmain(String[]args){

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

if(Primenumber(i)==0)System.out.println(""+i+"是一个素数");

elseSystem.out.println(""+i+"不是素数");

}

}

//掌握静态方法的基本结构及是如何调用的。

将判断素数的程序改写为方法,再在主程序中调用完成本题

2)对如下程序进行实验,试去掉this.运行,再改用cClass1.,看报错的情况,总结this.的使用方法,什么时候不加前缀?

什么时候加类名.或对象名.?

什么时候必须用this.?

classcClass1{

publicstaticintx;//类变量

voidcClass1(intn){//构造方法

this.x=0;//this.x表示类变量x,如果成员方法非static,就要用this.

}

staticlongcClass1(intn,intk){//重构构造方法

x=n;returnx*3;}

publicstaticvoidsetPoint(intx,inty){

x=x;//setPoint被申明为static,就不能用this.

//左、右面x都是形式参数,若局部变量与类的成员变量同名,则类的成员变量被隐藏。

System.out.println("x1="+x+"cClass1.x="+cClass1.x);}

publicstaticvoidmain(String[]args){

setPoint(100,200);

System.out.println("x2="+cClass1.x+"x="+x);

cClass1.cClass1(50,30);//调用重构构造方法

System.out.println("x3="+x+"cClass1.x="+cClass1.x+"cClass1.cClass1(50,30)="+cClass1.cClass1(50,30));

//前面如果有cClass1.x=x,显示100,否则显示0

}}

3)关于作用域的实验。

将第一句的protected改为private或private,总结各自影响范围。

classPoint0{

protectedintx;

privateinty;

publicvoidsetPoint(intx,inty){

this.x=x;//x为非静态变量,不能用Point.x

this.y=y;

Point0Point1=newPoint0();//新建对象,尚未调用setPoint

System.out.println(“Point1.x=“+Point1.x);

}}

publicclassEx4_6_1{

publicstaticvoidmain(String[]args){

Point0point2=newPoint0();//新生成对象,该对象下面调用setPoint

point2.x=200;//在Point中如果x被定义为private,将报错

//Point.y=100;//错误

point2.setPoint(100,100);//如果point2改为point将报错

System.out.println(“Point2.x=“+point2.x);

}}//结果显示Point1.x=0Point2.x=100

4)执行下列程序,总结抽象类的定义方法,使用要点。

abstractclassA{//抽象类,不能实例化

abstractintmin(intx,inty);//抽象类可以有抽象方法,不能定义方法体

intmax(intx,inty){

returnx>y?

x:

y;

}}

classBextendsA{//建立抽象类的子类

intmin(intx,inty){

//在A中min被声明为abstract,且因此未有实现语句,在子类中必须实现

returnx>y?

x:

y;

}}

publicclassEx4_11{

publicstaticvoidmain(String[]args){

Bb1=newB();//由抽象类的子类派生对象

System.out.println(b1.max(3,19));//调用该子类继承的抽象类的方法

}}

2、参考上面的程序,编写程序使完成下列题目要求的功能并上机实现。

将程序代码集中存放到一个WORD文件中,同时将运行结果的显示内容复制粘贴附在程序代码后面。

1)求100以内的所有素数。

要求只显示所有素数,每行显示10个素数整齐排列。

以下是程序核心部分,请补充完整后调试并运行。

for(intn=2;n<=50;n++){

inti=0;

longm=(long)Math.sqrt(n);

for(i=2;i<=(int)m;i++)if((n%i)==0)break;

if(i>(int)m)System.out.print(""+n+"");

}

2)下面是选择法排序的主要部分,求编写程序随机生成100个整型数据,再用选择法排序。

以下是程序核心部分,请补充完整后调试并运行。

for(inti=0;i

{

intk=i;

for(intj=i+1;j

{

if(n[j]>n[k])//选择i之后最大的

{

inttemp=n[k];

n[k]=n[j];

n[j]=temp;

}

}

}

3)将本程序修改为直接选择法排序的程序。

写出实现程序。

4)下面是插入法排序的主要部分,求编写程序随机生成100个整型数据,再用插入法排序。

int[]arr=newint[100];

arr[0]=n[0];

for(intj=1;j

arr[j]=n[j];

for(inti=j;i>0;i--)

{

if(arr[i]>arr[i-1])break;

inta=arr[i];

arr[i]=arr[i-1];

arr[i-1]=a;

}

}

5)Calendar类是有关日历数据的类。

参考3-11题(包括题后说明),利用Calendar类设计一个程序,显示程序当前执行时间的时、分、秒值。

3、执行以下程序,总结其算法与程序设计方法。

将每题运行结果复制粘贴到同一个Word文件中。

1)编程求满足下列不等式的最小自然数n的值。

importjava.util.*;

publicclassEx2_14{

publicstaticvoidmain(String[]args){

doubles=0;intn=1;Stringstr;

do{

s=s+1.0/n;

n++;

}while(s<=5);

str="和数s="+Double.toString(s)+"\n\n";

str=str+"循环次数n="+Integer.toString(n);

System.out.println(str);

}

}

2)随机生成一组整型数据,再用冒泡法将数组排序显示。

publicclassEx3_2{

publicstaticvoidmain(Stringargs[])

{

int[]n=newint[100];

for(inti=0;i

n[i]=(int)(Math.random()*90)+10;

//产生随机数并强制转为二位整型数

for(inti=0;i

for(intj=0;j<(n.length-i-1);j++)

if(n[j]>n[j+1]){

intk=n[j];//次序不对交换位置

n[j]=n[j+1];

n[j+1]=k;

}

}

for(inti=0;i

if((i+1)%10!

=0)

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

elseSystem.out.println(n[i]);

}

}

}

3)随机生成两个矩阵,然后将两个矩阵相乘。

矩阵乘法:

设A=[aij]m×n,B=[bij]n×s;其中,m×n中m表示a行数,n表示列数;n×s中n表示b行数,s表示列数;

那么,A×B的积为:

C=[cij]m×s

其中,Cij=ai1b1j+ai2b2j+……+ainbnj

(i=1,2,……,m;j=1,2,……,s)

例如,C11=a11b11+a12b21+……+a1nbn1

又例如,C12=a11b12+a12b22+……+a1nbn2

C21=a21b11+a22b21+……+a2nbn1

如果改为从0开始计数,那么:

C00=a00b00+a01b10+……+a0nbn0

C01=a00b01+a01b11+……+a0nbn1

C10=a10b00+a11b10+……+a1nbn0

首先看懂上面算法,再思考程序应当如何设计,之后上机操作,最后看懂程序设计方法。

publicclassa1

{

publicstaticvoidmain(Stringargs[])

{

inta[][]=newint[3][4];//动态初始化一个二维数组

intb[][]=newint[4][3];//动态初始化一个二维数组

intc[][]=newint[3][3];//动态初始化一个二维数组

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

for(intj=0;j<4;j++){//随机生成矩阵数据

a[i][j]=(int)(Math.random()*90)+10;

}

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

for(intj=0;j<3;j++){

b[i][j]=(int)(Math.random()*90)+10;

}

System.out.println("第一个矩阵数据:

");

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

for(intj=0;j<4;j++)

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

System.out.println("");

}

System.out.println("第二个矩阵数据:

");

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

for(intj=0;j<3;j++)

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

System.out.println("");

}

for(inti1=0;i1<3;i1++)//0到m-1;

for(intj=0;j<3;j++){//0到s-1;

c[i1][j]=0;//计算乘积

for(intk=0;k<4;k++)c[i1][j]=c[i1][j]+a[i1][k]*b[k][j];

}

System.out.println("二个矩阵之积:

");//显示结果

for(inti1=0;i1<3;i1++){

for(intj=0;j<3;j++)System.out.print(""+c[i1][j]+"");

System.out.println("");

}

}

}

4)创建杨辉三角形。

分析:

杨辉三角形中的各行是二项式(a+b)n展开式中各项的系数。

注意到

注意到第一列全1

如果用i表示行,j表示列,那么每行从第2列起有:

aij=a(i-1)(j-1)+a(i-1)j

importjava.util.Scanner;

publicclassEx3_5{

publicstaticvoidmain(String[]args){

int[][]a=newint[9][9];//假设打印9行,各元素自动初始化为0

a[0][0]=1;//最上面第一个数

for(inti=1;i<9;i++){//从第2行开始递推

a[i][0]=1;//第i行的数据个数等于i

for(intj=1;j

}

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

for(intj=0;j

System.out.println("");

}

}

}

5)将上面程序改由递归求解,分析递归的可能性及程序实现方法

importjava.util.Scanner;

publicclassEx3_5_1{//非主方法必须声明静态

staticlongc(intn,intk){

if(k<=0||k>=n)return1;

return(c(n-1,k)+c(n-1,k-1));

}

publicstaticvoidmain(String[]args){//主方法,可以不加publicstatic

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

for(intj=0;j<=i;j++)System.out.print(c(i,j)+"\t");

System.out.print("\n");

}}}

6)将上题中方法c设计为内部类的方法

publicclassEx3_5_4{//主类

staticclassc0{//类Ex3_5_4的内部类,加static

staticlongc0(intn,intk){//构造方法,也可改为非构造方法

if(k<=0||k>=n)return1;

return(c0(n-1,k)+c0(n-1,k-1));

}

}

publicstaticvoidmain(String[]args){

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

for(intj=0;j<=i;j++)System.out.print(c0.c0(i,j)+"\t");

System.out.print("\n");//上面引用c0(i,j)要求c0(i,j)为静态

}

}

}

//将方法c改为内部类c0的方法c0(静态方法),类c0的前面也要加static。

编译时生成Ex3_5_1$c0.class。

7)将内部类改为外部类

classc0_1{//外部类,不加static

staticlongc0_1(intn,intk){

if(k<=0||k>=n)return1;

return(c0_1(n-1,k)+c0_1(n-1,k-1));

}

}

publicclassEx3_5_5{//主类

publicstaticvoidmain(String[]args){

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

for(intj=0;j<=i;j++)System.out.print(c0_1.c0_1(i,j)+"\t");

System.out.print("\n");//上面引用c0(i,j)要求c0(i,j)为静态

}

}

}

//将内部类c0改外部类c0_1,方法c0_1设计为静态方法。

8)同一目录下建二个类文件,调用静态方法(类方法)递归。

源程序文件Ex3_5_2.java:

publicclassEx3_5_2{

publicstaticvoidmain(String[]args){

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

for(intj=0;j<=i;j++)System.out.print(c.c(i,j)+"\t");

System.out.print("\n");//上面引用c(i,j)要求c(i,j)为静态

}}}

源程序文件c.java

classc{

staticlongc(intn,intk){

if(k<=0||k>=n)return1;

return(c(n-1,k)+c(n-1,k-1));

}}

对Ex3_5_1.java编译,生成Ex3_5_1.class和c.class二个类文件

9)实例化

classcClass{

longc1(intn,intk){

if(k<=0||k>=n)return1;

return(c1(n-1,k)+c1(n-1,k-1));

}}

publicclassEx3_5_3{

publicstaticvoidmain(String[]args){

cClasscObject=newcClass();//实例化:

建立类cClass的对象

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

for(intj=0;j<=i;j++)System.out.print(cObject.c1(i,j)+"\t");

System.out.print(“\n”);//上面引用c(i,j)不再要求c(i,j)为静态

}}}

10)改为接口实现

interfacecface{//定义接口

longc(intn,intk);

//方法不许实现,即不能有方法体,用分号结束

}

publicclassEx3_5_6implementscface{//调用接口

//必须实现接口中所有方法,且方法的名字、类型、参数个数及类型必须与接口中的完全一致

publiclongc(intn,intk){//不要忘了public

if(k<=0||k>=n)return1;

return(c(n-1,k)+c(n-1,k-1));

}

publicstaticvoidmain(String[]args){

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

for(intj=0;j<=i;j++)

System.out.print(c.c(i,j)+"\t");

//上面引用接口中c(n,k)要求c(n,k)为public

System.out.print("\n");

}}}

比较以上各题,全面了解面向对象的程序设计主要的语言元素,学习各概念的意义、应用方法,特别注意其区别与设计要点。

11)画出实验当天所在月的日历表。

importjava.util.Calendar;

publicclassEx4_27{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

System.out.println("日一二三四五六");

Calendarcalendar=Calendar.getInstance();

intm=9;

calendar.set(2012,m-1,1);//设置日历表起始年月日的值

//在表中该日期算作该月1日在列出日历

intday_of_week=calendar.get(Calendar.DAY_OF_WEEK)-1;

System.out.print(day_of_week);//该日期是星期几?

Stringa[]=newString[day_of_week+31];

for(inti=0;i

a[i]="*";

}

for(inti=day_of_week,n=1;i

if(n<=9)

a[i]=String.valueOf(n)+"";

else

a[i]=String.valueOf(n);

n++;

}

for(inti=0;i

if(i%7==0)

System.out.println("");

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

}

}

}

//返回当前时间小时数:

calendar.get(Calendar.HOUR_OF_DAY)

//例如显示当前小时数语句:

System.out.println(calendar.get(

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2