value*=power;
}
returnvalue;
}
}
四、实验结果与分析
(1)比较Java语言与C的程序结构
Java是一种面向对象的程序设计语言而C语言则是一种面向过程的程序设计语言
(2)Java语言中的数组与C语言中的数组相比有什么不同,它的优点是什么?
c的数组名是指向该数组首地址的指针,而JAVA的数组名,是一个引用而已。
(3)比较Java各种流程控制语句的特点,它们的适用场合
if语句是java中的条件分支语句,它能让程序在两个不同的路径中执行。
if语句的执行过程如下:
如果条件为真,就执行语句1(statement1),否则就执行语句2(statement2)(如果它存在),不存在两条语句都执行的情况。
在使用if语句时,利用花括号是很方便的,甚至当有每条子句中仅有一条语句时也如此。
嵌套(nested)的if语句是指另一条if或else的目标,当使用嵌套if语句时要记住,else语句总是对应着和此else在同一个块内的最近的if语句,而且该if语句没有和其它else语句相关联。
Switch语句是java的多路分支语句。
它提供了一种简单的方法,使程序根据表达式的值来执行不同的程序部分,是一个比if—else—if语句更好的选择。
表达式expresson必须是byte,shout,int,或char类型,在case语句中指定的每个值value必须是和表达式兼容的类型(枚举值也可用于控制switch),将在以后讨论,每case值必须是惟一的字面量(即它必须是一个常量,而不是一个变量),不允许重复使用case值。
Switch语句的执行过程如下:
表达式的值与case语句中的每个字面量值相比,如果发现一个与之相匹配的,则执行该case语句后的代码,如果不存在匹配表达式值的常量,那么执行default语句,当然,default语句是可选的,如果没有相匹配的case语句,也没有default语句,则什么也不执行。
有3个重要的特征需要注意:
1、switch语句与if语句不同之处在于:
switch语句仅能测试相等的情况,而if语句能够计算任何类型的布尔表达式,也就是switch语句仅能查找表达式值与某个case常量是否匹配。
2、在任何一个switch语句中不能有两个相同的case常量,当然嵌套的是可以的。
3、switch语句比一组嵌套的if语句更高效。
while循环是java的最基本的循环语句,当控制条件为真时,它重复执行一条语句或一个语句块。
当有时我们希望至少执行一次while循环时,即使表达式在开始时就为假也如此,即在循环的末尾而不是循环的开始处测试终止表达式,java提供了这样的循环:
do—while.do—while循环至少执行它的循环体一次,因为它的条件表达式在循环的结尾。
for循环的执行过程是:
当循环第一次开始时,执行循环的初始化部分(initialization)。
这是一个设置循环控制变量值的表达式,其中的循环控制变量作为控制循环的计数器使用(即初始化只执行一次)。
接下来,计算条件(condition)的值,这必须是一个布尔表达式,它通常依据一个目标值来测试循环控制变量。
如果表达式为真,那么执行循环体,如果为假,则循环终止。
接下来,执行循环的迭代(iteration)部分。
这通常是一个表达式,该表达式可增加或减小循环控制变量。
然后迭代循环:
首先计算条件表达式,执行循环体,然后在每次传递时执行迭代表达式,重复该过程,直到控制表达式为假。
控制for循环的变量通常只用于该循环,而不在程序其他地方使用,,当for语句结束时,该变量的作用域也就结束了,(即变量的作用域限定在for循环内),在for循环外,该变量就不存在了,如果我们要两个或更多的变量控制for循环,java允许在for循环的初始部分和迭代部分包括多条语句,每条语句用逗号分开.
实验项目名称:
类与对象实验学时:
2
同组学生姓名:
实验地点:
A205
实验日期:
实验成绩:
批改教师:
批改时间:
一、实验目的
(1)熟练掌握Java语言类定义的基本语法
(2)熟练掌握类数据成员的访问控制,对象建立的方法
(3)熟练掌握类构造函数的定义,类方法的访问控制重载
(4)掌握静态成员的特点
(5)了解Java语言的垃圾回收机制。
(6)熟练掌握类继承的基本、语法包和接口的使用,掌握protected成员的特点,了解抽象方法和抽象类。
二、实验要求
(1)调试程序要记录调试过程中出现的问题及解决办法;
(2)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验;
(3)做完实验后给出本实验的实验报告。
三、实验设备、环境
奔腾以上计算机,Windows2000、J2SDK、IE浏览器
四、实验步骤及内容
(1)3-32完善例3.2的日期类MyDate。
publicvoidset(intyear,intmonth,intday)
{//3-32.1
if(year>=0&&month>=1&&month<=12&&day>0&&day<=31)
{
if(month==2&&day<=29)
if(MyDate.isLeapYear(year)&&day<=28)
{
this.year=year;
this.month=month;
this.day=day;
}
}
}
publicbooleanequals(MyDated)
{//3-32.2.4
returnthis==d||d!
=null&&this.year==d.year&&this.month==d.month&&this.day==d.day;
}
publicvoidgetweek()
{//3-32.2.1
inttotal=this.year-1980+(this.year-1980+3)/4;
for(inti=this.month-1;i>0;i--)
{
total+=daysofMonth(this.year,i);
}
total+=this.day;
intweek=1;
week=(week+total)%7;
System.out.printf(this.year+"年"+this.month+"月"+this.day+"日星期");
switch(week)
{
case0:
System.out.println("日");
case1:
System.out.println("一");
case2:
System.out.println("二");
case3:
System.out.println("三");
case4:
System.out.println("四");
case5:
System.out.println("五");
case6:
System.out.println("六");
}
}
publicStringtoWeek()
{
inttotal=this.year-1980+(this.year-1980+3)/4;
for(inti=this.month-1;i>0;i--)
{
total+=daysofMonth(this.year,i);
}
total+=this.day;
intweek=1;
week=(week+total)%7;
switch(week)
{
case0:
returnnewString(this.year+"年"+this.month+"月"+this.day+"日星期日");
case1:
returnnewString(this.year+"年"+this.month+"月"+this.day+"日星期一");
case2:
returnnewString(this.year+"年"+this.month+"月"+this.day+"日星期二");
case3:
returnnewString(this.year+"年"+this.month+"月"+this.day+"日星期三");
case4:
returnnewString(this.year+"年"+this.month+"月"+this.day+"日星期四");
case5:
returnnewString(this.year+"年"+this.month+"月"+this.day+"日星期五");
case6:
returnnewString(this.year+"年"+this.month+"月"+this.day+"日星期六");
}
return"error!
";
}
publicbooleanbefore(MyDated)
{
if(d.getYear()>this.year)
{
returnfalse;
}
if(d.getYear()==this.year)
{
if(d.getMonth()>this.month)
returnfalse;
else
{
if(d.getMonth()==this.month)
{
returnd.getDay()<=this.day;
}
}
}
returntrue;
}
publicintdaysBetween(MyDated)
{
inttotal=this.year-d.year+(this.year-d.year+3)/4;
for(inti=this.month-1;i>0;i--)
{
total+=daysofMonth(this.year,i);
}
total+=this.day;
returntotal;
}
(2)3-34设计一个复数类,成员包括实部和虚部,成员方法包括复数加法、减法、比较、转换成字符串等运算或操作。
publicclassComplex
{
privateintreal,imaginary;
publicComplex(Strings)
{
inti,k=1;
chara;
Strings2;
for(i=0;i{
a=s.charAt(i);
if(a=='+')
{
break;
}
if(a>='0'&&a<='9')
{
s2=String.valueOf(a);
this.real=Integer.parseInt(s2)*k;
k*=10;
}
k=1;
for(;i{
a=s.charAt(i);
if(a=='i')
{
break;
}
if(a>='0'&&a<='9')
{
s2=String.valueOf(a);
this.imaginary=Integer.parseInt(s2)*k;
k*=10;
}
}
}
}
publicComplex()
{
this.real=0;
this.imaginary=0;
}
publicComplex(intr,inti)
{
this.real=r;
this.imaginary=i;
}
publicComplexplus(Complexn)
{
returnnewComplex(n.real+this.real,n.imaginary+this.imaginary);
}
publicComplexsub(Complexn)
{
returnnewComplex(n.real-this.real,n.imaginary-this.imaginary);
}
publicbooleanCompare(Complexn)
{
if(this.real==n.real&&this.imaginary==n.imaginary)
returntrue;
returnfalse;