一、实验目的 :
(1) 了解Java 的预定义类;
(2) 学习使用Java 的常用类;
(3) 掌握方法覆盖的使用。
二、实验任务 :
在该实验中包含 3 个练习 , 分别是针对Java 中的 Math 类, 基本类型的包装类, 日期类Date 和 Calendar 以及动态数组 Vector 类, 通过这些练习仔细体会这些常用的Java 类的使用方法。
三、实验步骤 :
1. 练习 1 Math 类和基本类型的包装类
在这个练习里, 将练习使用 Math 类和基本类型的包装类 ,Math 类中包含有许多常用的数学方法如求绝对值abs() 、正弦值sin() 、两数当中的较大者 max(x, y), 而基本类型的包装类则允许将基本的数据类型包装成一个类, 并访问其中的方法。程序的运行结果如图 7-3所示。
(1) 请按程序清单1-10-1, 输入下面的 MathTest.java 源程序。
程序清单1-10-1 MathTest.java
// MathTest.java
import java.util.*;
public class MathTest {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
int intData;
double doubleData;
String intString, doubleString;
System.out.print("请输入整数x和实数y: ");
intData = scanner.nextInt();
// 以字符串方式输入实数
doubleString = scanner.next();
// 创建整数对象intObject
Integer intObject = new Integer(intData);
// 返回字符串所对应的数值
doubleData = Double.parseDouble(doubleString);
intData = intObject.intValue();
// 将整数对象的值以字符串形式输出
intString = intObject.toString();
System.out.println("你的输入是:" + intString + ", " + doubleData);
// 开始调用Math类的方法进行运算
int intData1 = Math.abs(intData);
System.out.println("abs(x)x的绝对值: " + Math.abs(intData));
System.out.println("ceil(y)y向上取整: " + Math.ceil(doubleData));
System.out.println("floor(y)y向下取整:" + Math.floor(doubleData));
System.out.println("exp(x)e的x次幂: " + Math.exp(intData));
System.out.println("log(x)x的自然对数:" + Math.log(intData1));
System.out.println("max(x,y)x和y中的较大者:" + Math.max(intData, doubleData));
System.out.println("min(x,y)x和y中的较小者:" + Math.min(intData, doubleData));
System.out.println("sin(x)x的正弦值:" + Math.sin(intData));
System.out.println("cos(x)x的余弦值:" + Math.cos(intData));
System.out.println("以x为半径的圆面积:" + Math.PI * intData * intData);
}
}
(2) 编辑Birthday.java 程序并保存, 然后在Eclipse 环境中编译运行它 ,观察程序运行结果。
思考
(1) 请问程序中Math类中的方法为什么可以直接用类名来访问?
(2) 请调用Math类的方法以产生一个随机数,然后求随机数的正弦值和余弦值。
2.练习2 日期类Date和Calendar
在这个练习里用户将会学习使用Java中常用的操纵时间的类Date和Calendar以及控制日期输入输出格式的类DateFormat,程序会要求用户以规范的格式输入自己的生日日期,然后将使用Date类和Calendar类和Calendar类中的方法计算出用户的生日是星期几,用户的年龄以及出声的年份是否是闰年。
(1) 请按程序清单1-10-2 输入下面的Birthday.java源程序。
程序清单1-10-2 Birthday.javai
mport java.util.*; // Date,Calendar,Scanner
import java.text.*; // SimpleDateFormat
public class Birthday {
public static void main(String args[]) throws ParseException {
String birthday, dayOfWeek = " ";
Date date;
Calendar calendar;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的生日日期:yyyy-MM-dd");
birthday = scanner.next();
// 创建一个日期格式对象
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// 获得一个包含当前日期和时间的Calendar子类的实例
calendar = Calendar.getInstance();
int currentYear = calendar.get(Calendar.YEAR);
// 按输入的birthday产生一个Date对象
date = dateFormat.parse(birthday);
// 将date对象的值传递给calendar对象
calendar.setTime(date);
int days = calendar.get(Calendar.DAY_OF_WEEK);
switch (days) {
case 1:
dayOfWeek = "星期日";
break;
case 2:
dayOfWeek = "星期一";
break;
case 3:
dayOfWeek = "星期二";
break;
case 4:
dayOfWeek = "星期三";
break;
case 5:
dayOfWeek = "星期四";
break;
case 6:
dayOfWeek = "星期五";
break;
case 7:
dayOfWeek = "星期六";
break;
}
System.out.println("你的生日是:" + dayOfWeek);
int birthYear = calendar.get(Calendar.YEAR);
if (((birthYear % 4 == 0) && (birthYear % 100 != 0))
|| (birthYear % 400 == 0))
System.out.println(birthYear + "年: 是闰年");
else
System.out.println(birthYear + "年: 不是闰年");
int age = currentYear - birthYear;
System.out.println("你现在是: " + age + "岁");
}
}
(2) 编辑Birthday.java源程序并保存,然后在Eclipse 环境中编译运行它,观察程序运行结果。
思考
(1) 请问程序Brithday.java中的语句 :
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd);的作用是什么, 请查询 DateFormat 类中是否还有其他的日期格式。
(2) 程序中的 switch 语句用于判断星期几 , 现在请将该 switch 语句中的break 语句全部删除, 然后编译运行程序 , 观察会有什么结果 , 并说明原因。
(3) 在输入了正确的生日日期后, 程序能返回用户的年龄, 现在请修改程序, 以返回用户的生日日期与当前日期之间相距多少天。
(4) 请查询 Calendar 类的相关方法以显示出当前的精确日期和时间( 包括年、月、日、小时、分钟、秒 )。
3. 练习 3 动态数组 Vector 类
在这个练习里, 用户将练习使用Vector 类,Vector 类是一个动态数组, 能根据实际需要动态地扩充数组的大小 , 同时 Vector 类中还包含许多方法来操纵数组中的元素 , 程序中有一个Vector 数组, 里面包含有几个事先定义的城市名, 同时, 可以在该数组中增加几个新的城市名 , 并进行一些交互性的操作。在这一过程中 , 仔细体会 Vector 数组的用法。该程序的运行结果如图 7-5 所示。
(1) 请按程序清单1-10-3 输入下面的 CityVector.java 源程序。
程序清单1-10-3 CityVector.java
// CityVector.java
import java.util.*;
public class CityVector {
static String city[] = { "北京", "上海", "广州", "深圳" };
public CityVector() {
Vector vector = new Vector(6);
Scanner scanner = new Scanner(System.in);
String cityName;
int index;
for (int i = 0; i < city.length; i++) {
vector.add(city[i]);
}
;
// 显示出数组信息
displayVector(vector);
System.out.print("\n请输入数组索引号: ");
index = scanner.nextInt();
cityName = (String) vector.get(index);
System.out.println("数组[" + index + "]的元素值是: " + cityName);
System.out.print("\n请再输入3个你喜欢的城市: ");
for (int i = 0; i < 3; i++) {
cityName = scanner.next();
vector.add(cityName);
}
displayVector(vector);
System.out.print("\n请输入一个你想查询的城市名: ");
cityName = scanner.next();
if (vector.contains(cityName))
System.out.println(" 在数组中找到: " + cityName + " 下标是:"
+ vector.indexOf(cityName));
else
System.out.println("在数组中没有找到: " + cityName);
System.out.print("\n请输入一个你想删除的城市名: ");
cityName = scanner.next();
vector.remove(cityName);
System.out.println(cityName + " 已被删除");
displayVector(vector);
}
public void displayVector(Vector vector) {
System.out.println("\n数组大小: " + vector.size() + "\n数组容量: "
+ vector.capacity());
if (vector.isEmpty())
System.out.print("数组为空");
else {
System.out.print("数组包含: ");
Enumeration contents = vector.elements();
while (contents.hasMoreElements())
System.out.print(contents.nextElement() + " ");
}
System.out.println("\n");
}
public static void main(String args[]) {
CityVector application = new CityVector();
}
}