public class TestIfElse {
public static void main(String args[]) {
boolean leap; int year=2005;
if ((year%4==0 && year0!=0) || (year@0==0)) // 方法1 System.out.println(year+\年是闰年\else
System.out.println(year+\年不是闰年\
}
(3)编译运行程序,其结果如图3.1 所示。
图3.1
2.使用switch 语句
(1)程序功能:在不同温度时显示不同的解释说明。 (2)程序源代码如下。
class TestSwitch{
public static void main(String args[]) {
int c=38;
switch (c<10?1:c<25?2:c<35?3:4) { case 1:
System.out.println(\℃ 有点冷。要多穿衣服。\case 2:
System.out.println(\℃ 正合适。出去玩吧。\case 3:
System.out.println(\℃ 有点热。\default:
System.out.println(\℃ 太热了!开空调。\} } }
(3)编译运行程序,其结果如图3.2 所示。
图3.2
三.使用循环语句 1. for 循环语句练习
(1) 程序功能:将1至100之间所有的整数求和。 (2) 程序源代码如下。
public class TestFor{
public static void main(String []args){ int sum=0;
10
for(int i=1;i<=100;i++) sum=sum+i;
System.out.println(sum); //i 不再有效 }
}
2. while 循环语句练习
(1)程序功能:已知sum(k)?1?2?3???k,问k最小为什么值能够使得sum(k)?2000? (2)程序源代码如下。
public class FindMinimalK{
public static void main(String []args){ int sum=1; int k=1;
while(sum<=2000){ k++;
sum=sum+k; }
System.out.println(\ } }
3.do?while 循环语句练习
(1) 程序功能:求1+2+?+100 之和,并将求和表达式与所求的和显示出来。 (2) 程序源代码如下。
class Demo2_10 {
public static void main(String args[]) {
int n=1, sum=0; do { sum+=n++; }while (n<=100);
System.out.println(\+...+100 =\} }
(3)编译并运行程序,结果如图3.6 所示。
图3.3
【完成实验项目】
1. 输入一个整数,输出该数的二进制表示形式的字符串
2. 编写Java应用程序,把100~1000的自然数中能够被3整除的数输出到屏幕上。 3. 打印小于1000的斐波纳契数
4. 输入一个梯形的上底、下底和高,求其面积
11
实验三 面向对象基础编程
【开发语言及实现平台或实验环境】 Windows2000 或XP,JDK1.6与Eclipse 【实验目的】
1.掌握类的定义和生成机制 2.了解构造函数的作用 【实验要求】
1. 简单类的定义。 2. 对象创建和使用。 3. 访问控制修饰符的作用。
4. 掌握静态属性、方法和初始化器的特点。 【实验内容】
一.创建对象
new 构造函数(构造方法参数列表)
二.使用修饰符
常用的修饰符如下。[public] [private] [protected] [package] [static] [final] [transient] [volatile]不同修饰符的访问控制权限如表5.1 所示。
表5.1
三.方法中参数传递的练习 在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。在Java 中,方法中的参数传递可以分为传值调用或对象方法调用等方式。传值调用即传递的参数是基本数据类型,调用方法时在方法中将不能改变参数的值,这意味着只能使用它们。对象调用是指先调用对象,再调用对象的方法,这种方式可以修改允许存取的成员变量。所以,如果不想改变参数的值,可以采用传值调用的方法。如果想改变参数的值,可采用对象调用的方法,间接修改参数的值。
1.编写一个传值调用的程序文件TestParamTransfer1.java。
(1)程序功能:程序首先给整型变量x 和y 赋一个初值10,然后使用传值调用方式调用方法ff1对x 和y 做乘方及输出x 和y 的乘方值,最后再输出x 和y 的乘方值。
(2)程序源代码如下。
class TestParamTransfer1 {
public static void main(String[] args) { int x=10, y=10; ff1(x, y);
System.out.println(\}
static void ff1(int passX, int passY) { passX=passX*passX;
12
passY=passY*passY;
System.out.println(\}
}
(3)编译TestParamTransfer1.java,其运行结果如图5.4 所示。
图5.4
(4)分析其运行结果
这个程序没有实现预期的结果,原因是ff1 方法采用了传值调用。调用ff1 方法时,将产生两个参数passX 和passY,x 和y 的值被传递给这两个参数。尽管在方法中计算了参数的平方,但从ff1方法返回后,参数消失,此时x 和y 的值仍是初值。
2.编写一个调用对象方法的程序文件TestParamTransfer2.java。
(1)程序功能:通过调用对象的方法在方法调用后修改了成员变量的值。 (2)TestParamTransfer2.java 程序源代码如下。
class TestParamTransfer1 {
public static void main(String[] args) { Power p=new Power(); p.ff2(10,10);
System.out.println(\方法调用后 x=\} }
class Power{
int x=10, y=10;
void ff2(int passX, int passY) {
System.out.println(\初始时 x=\x=passX*passX; y=passY*passY;
System.out.println(\方法调用中 x=\} }
(3)编译LX3_6.java,其运行结果如图5.5 所示。
图5.5
3.一个Fan有自己的品牌和型号,其功能有start,stop,speed,start和stop可以改变Fan的状态status(on/off),speed可以调整Fan的速度(档级在0、1、2、3),请分析并提供Fan类的定义。并编写程序对其进行测试。
public class Fan {
private String band; private String type; private String status ;
13
private int speed;
public Fan(String band,String type,String status,int speed){ this.band=band; this.type=type; this.status=status; this.speed=speed; }
public String start(){ return status; }
public String stop(){ return status; }
public void speed(int a){ this.speed=a; }
public static void main(String[]args){ Fan t=new Fan(\,\,\,1);
System.out.printf(\,t.band,t.type,t.status,t.speed); }
【完成实验项目】
1. 写一个名为Rectangle的类表示矩形。其属性包括宽width、高height和颜色color,width和height都是double型的,而color则是String类型的。要求该类提供计算面积的方法getArea()方法,以及修改width和height的值及获得width和height当前值的方法。要求:
(1) 使用构造函数完成各属性的初始赋值 (2) 使用getter和setter的形式完成属性的访问及修改 2. . 请定义一个名为Card的扑克牌类,该类有两个private访问权限的字符串变量face和suit:face描述一张牌的牌面值(如:\\\\\\\);suit描述一张牌的花色(如:\\)。定义Card类中的public访问权限的构造方法,为类中的变量赋值;定义protected访问权限的方法getFace(),得到扑克牌的牌面值; 定义protected访问权限的方法getSuit(),得到扑克牌的花色; 定义方法toString(),返回表示扑克牌的花色和牌面值字符串(如“Ace of Hearts”、“Ten of Clubs”等)。
14