河海大学文天学院java课程设计操政.docx

上传人:b****6 文档编号:7986654 上传时间:2023-01-27 格式:DOCX 页数:55 大小:451.30KB
下载 相关 举报
河海大学文天学院java课程设计操政.docx_第1页
第1页 / 共55页
河海大学文天学院java课程设计操政.docx_第2页
第2页 / 共55页
河海大学文天学院java课程设计操政.docx_第3页
第3页 / 共55页
河海大学文天学院java课程设计操政.docx_第4页
第4页 / 共55页
河海大学文天学院java课程设计操政.docx_第5页
第5页 / 共55页
点击查看更多>>
下载资源
资源描述

河海大学文天学院java课程设计操政.docx

《河海大学文天学院java课程设计操政.docx》由会员分享,可在线阅读,更多相关《河海大学文天学院java课程设计操政.docx(55页珍藏版)》请在冰豆网上搜索。

河海大学文天学院java课程设计操政.docx

河海大学文天学院java课程设计操政

 

JAVA课程实践报告

 

指导老师:

张亦辰

班级:

15计算机1班

学号:

150310117

姓名:

操政

 

2016年12月

例2-8Exam2_8,java是一个位操作运算符的程序,请分析它的输出结果。

代码:

publicclassExam2_8

{

publicstaticvoidmain(Stringargs[])

{

shortx=0257,y=(short)0xEA00,n=3;

intz;

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

System.out.println("y="+y);

z=x<

System.out.println("x<

z=y>>n;

System.out.println("y>>n="+z);

z=y>>>n;

System.out.println("y>>>n="+z);

}

}

调试结果:

例2-10Exam2_10.java程序是一个有逻辑表达式的程序,请分析它的输出结果。

代码:

publicclassExam2_10

{

publicstaticvoidmain(Stringargs[])

{

inti=2,j=3,k=4;

booleanb1=++i==j&ik;

System.out.println("i="+i+",j="+j+",k="+k);

booleanb2=i

System.out.println("i="+i+",j="+j+",k="+k);

booleanb3=i

=k&&j>k;

booleanb4=i

=k&j

System.out.println("b1="+b1);

System.out.println("b2="+b2);

System.out.println("b3="+b3);

System.out.println("b4="+b4);

}

}

调试结果:

 

P74页2-2编程求出一个一维int型数组的元素最大值、最小值、平均值和所有元素之和。

算法分析:

该程序首先定义一个一维int型数组变量,然后使用便利的方法找出数组中的最大值、最小值,并且将其保存下来。

然后定义一个变量计算数组中所有元素的和,再除以数组的元素量,得出数组的平均值。

代码:

publicclassTest2_2{

publicstaticvoidmain(String[]args){

int[]arr=newint[10];

intmax=0,min=0;

intsum=0;

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

arr[i]=2*i;

}

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

max=arr[0];

if(arr[i]>max){

max=arr[i];

}

if(arr[i]

min=arr[i];

}

sum+=arr[i];

}

System.out.println("最大数:

"+max);

System.out.println("最小数:

"+min);

System.out.println("和:

"+sum);

System.out.println("平均值:

"+Double.parseDouble(String.valueOf(sum))/arr.length);

}

}

调试结果:

2-5编程求出自然数101~205中所有的素数

算法设计:

该程序中定义了两个int型的变量,分别是i,j。

其中,i的值从101到205逐个增加,且j从2逐个增加但不能超过i的值。

当i%j==0,结束并输出i的值。

代码:

publicclassTest2_5{

publicstaticvoidmain(String[]args){

System.out.println("101~205内的素数为:

");

intk=0;

loop:

for(inti=101;i<205;i++){

for(intj=2;j

if(i%j==0){

continueloop;}

}

k++;

if(k/5==k/5.0){System.out.println(""+i);}

else{

System.out.print(""+i);

}

}

}

}

调试结果:

2-7百鸡百钱问题。

公鸡每只3元,母鸡每只5元,小鸡3只1元,用100元钱买100只鸡,公鸡、母鸡、小鸡应各买多少?

算法设计:

程序定义了3个int型变量,分别是i,j,k。

其中,i的值从1开始逐个增加,且不能超过33;j的值从1开始逐个增加,且不能超过50;k的值从3开始增加,每次增加3,且不超过100,如果满足条件(i*3+j*5+k/3==100&&(i+j+k)==100),输出i,j,k的值。

代码:

publicclassTest2_7{

publicstaticvoidmain(String[]a){

for(inti=0;i<=33;i++){//公鸡

for(intj=0;j<=20;j++){//母鸡

intk=100-i-j;//小鸡

if(3*i+5*j+k/3==100&&k%3==0){

System.out.println("百鸡百钱问题:

公鸡"+i+"母鸡"+j+"小鸡"+k);

}

}

}

}

}

调试结果:

2-8编程输出如下图所示的图形。

*

***

*****

*******

*********

算法设计:

该程序定义了3个变量,分别为i,j,k.其中,i从1逐个增加,且不超过5.每增加1,j就自减一次,从5开始,且输出一个空格键;k从1自加,每自加一次输出一个*,当k>=2*i-1时,换行输出。

代码:

importjava.io.*;

publicclassTest2_8

{

publicstaticvoidmain(Stringargs[])

{

chars1[][]=newchar[6][10];

for(inti=1;i<6;i++)

for(intj=1;j<10;j++)

{

if(j-i<5&&j>5-i)

s1[i][j]='*';

}

for(inti=1;i<6;i++)

for(intj=1;j<10;j++)

{

if(j==9)

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

else

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

}

}

}

调试结果:

杨辉三角的设计

算法设计:

该程序使用循环的方式,将每一行的第一个元素和最后一个元素设置为1,其余的元素等于上一行同位置的元素和上一行该位置上一个位置的元素。

代码:

publicclassNumDrmo

{

publicstaticvoidmain(String[]args)

{

inti,j;

finalintK=10;

intone[][];

System.out.println("杨辉三角形:

");

one=newint[K][];

for(i=0;i

one[i]=newint[i+1];

one[0][0]=1;

for(i=1;i

{

one[i][0]=1;

for(j=1;j

one[i][j]=one[i-1][j-1]+one[i-1][j];

one[i][i]=1;

}

for(i=0;i

{

for(j=0;j

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

System.out.println();

}

}

}

调试结果:

P75页2-5分析下列程序段有何错误,改正后上机验证。

(1)inti=5;

do

{

System.out.println(i);

i--;

}

while(i=2);

调试结果:

改正后:

publicclassTest1

{

publicstaticvoidmain(Stringargs[])

{

inti=5;

do

{

System.out.println(i);

i--;

}

while(i>2);

}

}

调试结果:

原因:

在java语言中=意思是赋值,while(i=2)不成立。

如果要使用该循环,while语句里面必须是判断语句。

(2)intsum=0;

for(inti=10;i<0;i--)

sum+=i;

调试结果:

改正后:

classTest2

{

publicstaticvoidmain(Stringargs[])

{

intsum=0;

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

sum+=i;

System.out.println(sum);

}

}

调试结果:

原因:

在for循环中i的初始值并不符合for循环中的判断条件,该循环并不会执行。

(3)

classTest3

{

publicstaticvoidmain(Stringargs[])

{

intfac=1;

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

{

while(i>1)

fac*=i--;

System.out.println(fac);

}

调试结果:

改正后:

classTest3

{

publicstaticvoidmain(Stringargs[])

{

intfac=1;

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

{

if(i>=1)

fac*=i;

}

System.out.println(fac);

}

}

调试结果:

原因:

程序中的while语句会在i>2的情况下多次执行,从而将i的值变得更小,不符合期望。

(4)

classTest4

{

publicstaticvoidmain(Stringargs[])

{

inta=3,b=5;

switch(b-a)

{

case2:

System.out.println(“2”);break;

case1:

System.out.print(“1”);break;

casea+b:

System.out.println(“a+b”);break;

casea:

System.out.println(“a”);

}

调试结果:

改正后:

classTest4

{

publicstaticvoidmain(Stringargs[])

{

inta=3,b=5;

switch(b-a)

{

case2:

System.out.println("2");break;

case1:

System.out.print("1");break;

case8:

System.out.println("a+b");break;

case3:

System.out.println("a");

}

}

}

调试结果:

原因:

case中只能使用常量,不能使用变量。

(5)

classTest5

{

publicstaticvoidmain(Stringargs[])

{

longd=0;

for(inti=10;i>=1;i++)

d*=i;

System.out.println(d);

}

}

这是求10!

的程序段。

调试结果:

改正后:

classTest5

{

publicstaticvoidmain(Stringargs[])

{

longd=1;

for(inti=1;i<=10;i++)

d*=i;

System.out.println(d);

}

}

调试结果:

原因:

原循环中i=10,本身大于等于1,循环结束后再对i进行递增,该循环就变成永远执行。

例3-2列举一个关于不同变量的例子。

通过分析Exam3_2.java程序,回答所提出的问题。

程序Exam3_2.java

classvar

{

staticinta;

intb;

publicvoidintprint()

{

intc=0;

++a;

++b;

++c;

System.out.print(“a=”+a);

System.out.print(“b=”+b);

System.out.println(“c=”+c);

}

publicvoidallprint()

{

intprint();

intprint();

}

}

publicclassExam3_2

{

publicstaticvoidmain(Stringargs[])

{

varv1=newvar();

varv2=newvar();

v1.allprint();

v2.allprint();

}

}

通过分析该程序,回答如下4个问题:

1类var中定义了两个变量a和b。

这两个变量有什么不同?

答:

a属于静态整形变量,b属于整形变量

2类var中变量b和方法intprint()中变量c有何不同?

答:

变量b的作用于var整个类中,c仅作用于print()这个函数内

3类var的访问控制权限如何?

如果加上访问控制符private,会出现什么结果?

答:

具有包访问性,。

可被同一个包的其他类访问,加上private,则编译出错

4分析输出结果。

分析如下:

当程序进入到varv1=newvar();时,执行++a,b++,c++,此时a=1b=1并输出a=1b=1c=1;

当程序进入到varv2=newvar();由于a是静态变量所以a由1增加到2,b的由1到2(仍属于var类,创建另一个对象v2),c的值仍是++c,等于1;

当程序进入到v1.allprint();调用var类中的allprint()方法输入v1对象的值a=3,b=1c=1

当程序进入到v2.allprint();调用var类中的allprint()方法输入v2对象的值a=4,b=2c=1

 

例3-7分析Exam3_7.java程序的输出结果。

熟悉程序关于静态变量和静态方法的定义和使用。

程序Exam3_7.java:

classA

{

inta;

staticintb;

voidseta(inti)

{

a=i;

b=i+1;

}

intgeta()

{

returna;

}

staticvoidsetb(inti)

{

b+=i;

}

staticintgetb()

{

returnb;

}

}

publicclassExam3_7

{

publicstaticvoidmain(Stringargs[])

{

Ax=newA();

Ay=newA();

x.seta(5);

y.seta(10);

System.out.println("x.a="+x.geta()+",y.a="+y.geta());

x.setb(-5);

y.setb(-10);

System.out.println("x.b="+x.getb()+",y.b="+y.getb());

}

}

调试结果:

通过分析该程序,回答如下3个问题:

(1)如何在程序中定义静态变量和静态方法?

答:

静态变量的定义格式:

static<类型><变量名>;

静态方法只能用来处理静态变量或调用静态方法。

它不能用来处理对象变量或对象方法。

在创建对象时,由于非静态方法是属于对象的,因此在对象占用的内存中有该方法的代码。

而静态方法是属于整个类的,因此在对象占用的内存中没有该方法。

静态方法在内存中的代码是随着类的定义而进行分配的,它不被某个对象所占用。

调用静态方法通常使用类名,也可以使用某个对象名。

(2)在静态方法中是否可以引用非静态变量?

在非静态方法中是否可以引用静态变量?

答:

都不能。

因为程序最终都将在内存中执行,变量只有在内存中占有一席之地时才能被访问。

类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。

(3)如何将该程序中使用对象引用静态方法修改可使用类名引用静态方法?

并上机调试。

答:

在该类的静态方法中额外添加一个参数,参数类型便为该类。

然后使用参数类型对该类的对象进行操作。

例3-17分析Exam3_17.java程序的输出结果,了解子类和父类对象之间的相互转换。

程序Exam3_17.java:

classA

{

Stringa="classA";

}

classBextendsA

{

Stringb="classB";

}

classExam3_17

{

publicstaticvoidmain(Stringargs[])

{

Aa1,a2=newA();

Bb1,b2=newB();

a1=b2;

b1=(B)a1;

System.out.println(a1.a);

System.out.println(b1.b);

}

}

调试结果:

思考上述问题,上机验证。

将main()方法中,a1=b2;语句改为a1=(A)b2;并且将b1=(B)a1;改为b1=a1;是否可以?

为什么?

答:

不可以。

因为java语言允许父类和子类对象之间相互转换。

但规定:

子类对象可以直接赋值给父类对象;父类对象给子类对象赋值时,必须要强制类型转换。

P150页3-1已知如下一个类:

classA

{

inta1,a2;

A(inti,intj)

{

a1=I;a2=j;

}

}

要求编一个方法swap()用来交换A类的两个对象的成员变量的值。

答:

问题分析:

由题知,首先创建A类的对象obj1,obj2,

然后分别初始化obj1,obj2;

在编写swap()程序,交换俩对象的成员变量

即是将将obj1中的a1和a2与obj2中的a1和a2互换

代码:

classA

{

inta1,a2;

publicA(inta1,inta2){

this.a1=a1;

this.a2=a2;

}

publicstaticvoidmain(Stringargs[])

{

Aobj1,obj2;

obj1=newA(4,5);

System.out.println("obj1的值分别是"+obj1.a1+"和"+obj1.a2);

obj2=newA(2,3);

System.out.println("obj2的值分别是"+obj2.a1+"和"+obj2.a2);

swap(obj1,obj2);

System.out.println("obj1的值分别是"+obj1.a1+"和"+obj1.a2);

System.out.println("obj2的值分别是"+obj2.a1+"和"+obj2.a2);

}

staticvoidswap(Aobj1,Aobj2)

{

inta,b;

a=obj1.a1;

b=obj1.a2;

obj1.a1=obj2.a1;

obj1.a2=obj2.a2;

obj2.a1=a;

obj2.a2=b;

}

}

调试结果:

3-2已知一个类如下所示:

classS

{

Doubler

}

编写S类的一个子类,改子类中包含一个计算圆面积的方法area()和一个使用super()初始化S类成员的构造方法。

程序分析:

1,编写一个classCircle继承S,

2,class类中包含:

计算area()和super()初始化S类成员的构造方法

代码:

classS{doubler;}

publicclassCircleextendsS{

privatefinaldoublePI=3.14;

publicCircle(doubler){

super();

super.r=r;

}

publicvoidarea(){

System.out.println(r*r*PI);

}

publicstaticvoidmain(String[]args){

Circlec=newCircle(2.5);

c.area();

}

}

调试结果:

3-4定义一个复数类complex,内有两个成员变量:

实部和虚部,还有两个方法:

求两个复数和以及求两个复数差。

编程验证该程序的复数加减运算是正确的。

程序分析:

在程序中新建一个类,该类代表复数,类中有两个变量,分别代表着复数的实部和虚部。

在进行加减运行时只需该类中的实部和虚部相加减便可达到所要效果。

代码:

importjava.io.*;

importjava.util.Scanner;

publicclassComplex

{

privateintshibu;

privateintxubu;

Complex()

{

}

Complex(intm,intn)

{

shibu=m;

xubu=n;}

publicComplexplus(Complexc)

{

Complexresult

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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