实验 10 Java的常用工具类

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验 10 Java的常用工具类
实验目的 :
(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类中的方法为什么可以直接用类名来访问?
答:因为Math的方法定义为静态类型的所以可以通过类名或者类的实例对象来访问!
(2)请调用Math类的方法以产生一个随机数,然后求随机数的正弦值和余弦值。

答:改源代码为:
1.public class MathTest {
2.
3.public static void main(String args[]) {
4.
5.//Scanner scanner = new Scanner(System.in);
6.
7.int intData;
8.double doubleData;
9. String intString, doubleString;
10.
11. System.out.print("请输入整数x和实数y: ");
12. intData=(int)(Math.random()*100);
13. doubleData=Math.random()*100;
14.//创建整数对象intObject
15. Integer intObject = new Integer(intData);
16. intData = intObject.intValue( );
17.//将整数对象的值以字符串形式输出
18. intString = intObject.toString( );
19.……(部分代码省略)
输出结果:
2.练习2 日期类Date和Calendar
在这个练习里用户将会学习使用Java中常用的操纵时间的类Date和Calendar以及控制日期输入输出格式的类DateFormat,程序会要求用户以规范的格式输入自己的生日日期,然后将使用Date类和Calendar类和
Calendar类中的方法计算出用户的生日是星期几,用户的年龄以及出声的年份是否是闰年。

(1)请按程序清单1-10-2 输入下面的Birthday.java源程序。

程序清单1-10-2 Birthday.java
import 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 类中是否还有其他的日期格式。

答:SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd);
的作用是创建一个日期格式对象;DateFormat 类中其他的日期格式如下表:
Date and Time Pattern Result
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700 "yyMMddHHmmssZ" 010*********-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
(1)程序中的 switch 语句用于判断星期几 , 现在请将该 switch 语句中
的 break 语句全部删除 , 然后编译运行程序 , 观察会有什么结果 , 并说明原因。

答:输入不同的出生时间,生日输出结果都会是星期六。

原因是switch 语句中的没有break语句,就不能执行一次case后跳出switch语句,程序就会一直执行到switch最后的语句dayOfWeek = "星期六";。

(2)在输入了正确的生日日期后 , 程序能返回用户的年龄 , 现在请修改
程序 , 以返回用户的生日日期与当前日期之间相距多少天。

答:在switch语句后增加代码:
long daysOfYear = Calendar.getInstance().getTimeInMillis()/86400000 - date.getTime()/86400000-1; //用立即数,减少乘法计算的开销
以及在代码行System.out.println("你现在是: "+ age + "岁");后紧跟代码System.out.println("你的生日日期与当前日期之间相距"+daysOfYear+"天。

");结果如下:
(4) 请查询 Calendar 类的相关方法以显示出当前的精确日期和时间( 包括年、月、日、小时、分钟、秒 )。

import java.util.*; // Date,Calendar,Scanner
import java.text.*; // SimpleDateFormat
……(省略部分代码)
//获得一个包含当前日期和时间的Calendar子类的实例
calendar = Calendar.getInstance();
int currentYear = calendar.get(Calendar.YEAR);
int currentMonth = calendar.get(Calendar.MONTH)+1;
int currentDayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
int currentHour = calendar.get(Calendar.HOUR);
int currentMinute = calendar.get(Calendar.MINUTE);
int currentSencond = calendar.get(Calendar.SECOND);
//按输入的birthday产生一个Date对象
date = dateFormat.parse(birthday);
……(省略部分代码)
System.out.println("你现在是: " + age + "岁");
System.out.println("当前的精确时间是: "+currentYear+"年"+ currentMonth+"月"+currentDayOfMonth+"日"+ currentHour+":"+ currentMinute+":"+currentSencond);
}
3. 练习 3 动态数组 Vector 类
在这个练习里 , 用户将练习使用 Vector 类 ,Vector 类是一个动态数组 , 能根据实际需要动态地扩充数组的大小 , 同时 Vector 类中还包含许多方法来操纵数组中的元素 , 程序中有一个 Vector 数组 , 里面包含有几个事先定义的城市名 , 同时 , 可以在该数组中增加几个新的城市名 , 并进行一些交互性的操作。

在这一过程中 , 仔细体会Vector 数组的用法。

该程序的运行结果如图 7-5 所示。

请按程序清单 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( );
}
}
编辑 CityVector.java 源程序并保存 , 然后在Eclipse 环境中编译
运行它, 观察程序运行结果。

结果如下:
思考
(1)程序中 Vector 数组的原始大小是 4, 容量是 6, 而当新增加 3 个
新的城市名后 ,Vector 数组的容量变成了多少 , 请修改程序以便允许用户增加更多的城市 , 例如 :6 个、 8 个 , 观察增加之后 ,Vector 数组的容量变化。

答:当新增加 3 个新的城市名后 ,Vector 数组的容量变成了12. 允许用户增加更多的城市只需要把下面对应的代码3为6,8即可。

System.out.print("\n请再输入3个你喜欢的城市: ");
for ( int i = 0; i < 3; i++ ) {
cityName = scanner.next();
}
(2)查询 Vector 类的方法 , 以输出数组的第一个和最后一个元素。

答:通过在displayVector方法中加入语句:
System.out.println("vector数组的第一个元素为:"+vector.firstElement()); System.out.println("vector数组的最后一个元素为:"+stElement());即可。

结果如下:。

相关文档
最新文档