Java选实验四:常用集合类使用

一、 实验目的

1. 掌握常用的集合类,能够较为熟练的查阅Java提供的常见的类,并进行程序设计。

、实验内容与要求

(1). 编写Java应用程序,根据用户输入的5个日期(每行一个日期),计算相邻两个日期之间间隔的时数,共4个结果(时数)。注:用户输入的日期格式为“××××年××月××日××时”。在报告中附上程序截图、完整的运行结果截图和简要文字说明。(40分)

(2). 某车站有检查危险品的机器(machine),如果发现危险品会发出警告。编程Java应用程序来模拟该机器发现危险品时发出警告的情景。具体:(i) 编写一个Exception的子类DException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“属于危险品”;(ii) 编写一个Machine类,该类的方法checkBag(Goods goods)如果发现参数goods是危险品(goods的isDange属性是true)就抛出DException异常;(iii) 程序在主类的main()方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)方法,如果发现危险品就在try-catch语句的catch部分处理危险品。在报告中附上程序截图、完整的运行结果截图和简要文字说明。(40分)

三、实验过程及结果

1.  编写Java应用程序,根据用户输入的5个日期(每行一个日期),计算相邻两个日期之间间隔的时数,共4个结果(天数)。注:用户输入的日期格式为“××××年××月××日××时”。

package date;
import java.util.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Compute {
	static public void main(String []args) throws ParseException{
		ArrayList<String> list = new ArrayList<String>();//创建List类型的数组列表对象list,list元素均为String类型
		Scanner in = new Scanner(System.in);
		System.out.println("请输入日期个数:");
		int n = in.nextInt();//从键盘获取日期个数n
		
		String []str = new String[n];//创建一个长度为n的String数组str
		for(int i = 0; i < n; i ++) {
			System.out.printf("请输入第%d个日期(格式为:xxxx年xx月xx日xx时):\n", i + 1);
			str[i] = in.next();
			list.add(str[i]);//将str数组的元素添加进list
		}
		for(int i = 0; i < n - 1; i ++) {
			test(list.get(i), list.get(i + 1));//list.get()获取列表元素,调用test()函数计算并输出相邻日期的间隔时数与天数
		}
		test(list.get(n - 2), list.get(n - 1));  
		in.close();
	}
	
	public static void test(String date1, String date2) throws ParseException{
		  DateFormat df = DateFormat.getDateInstance();   //DateFormat抽象类不能实例化,用getDateInstance()得到格式化对象
		  df= new SimpleDateFormat("yyyy年MM月dd日hh时");//获得格式化日期
		  
		  Date date_1 = df.parse(date1);
		  Date date_2 = df.parse(date2);//parse()将字符串类型的日期解析为Date类型
		  
		  long time1 = date_1.getTime();
		  long time2 = date_2.getTime();//getTime()返回Date对象中的时间值,单位为毫秒
		  long time3 = Math.abs(time1-time2);//计算两个时间值(单位为毫秒)的差的绝对值
		  
		  int hour = getHour(time3);//调用getHour()方法转化为小时数
		  System.out.println(date1 + "与" + date2 + "间隔" + hour + "小时");
		  int day = getDay(time3);//调用getDay()方法转化为天数
		  System.out.println(date1 + "与" + date2 + "间隔" + day + "天");
		  System.out.println();
	}
	//将时间(毫秒)转化为小时数
	private static int getHour(long time){
		int hour = (int)(time/1000/60/60);
		return hour;
	}
	//将时间(毫秒)转化为天数
	private static int getDay(long time){
		int day = (int)(time/1000/60/60/24);
		return day;
	}
}

 

 2.  某车站有检查危险品的机器(machine),如果发现危险品会发出警告。编程Java应用程序来模拟该机器发现危险品时发出警告的情景。具体:(i) 编写一个Exception的子类DException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“属于危险品”;(ii) 编写一个Machine类,该类的方法checkBag(Goods goods)如果发现参数goods是危险品(goods的isDange属性是true)就抛出DException异常;(iii) 程序在主类的main()方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)方法,如果发现危险品就在try-catch语句的catch部分处理危险品。

package exception;

class Goods{								//定义Goods类
	public boolean isDange;				//定义商品危险属性isDange
	public Goods(boolean isDange){		//带参构造方法
		this.isDange = isDange;
	}
}
class DException extends Exception{	//自定义异常类
	private static final long serialVersionUID = 1L;
	Goods goods;			//定义Goods类对象goods为自定义异常类的成员变量
	public DException(Goods goods){		//自定义异常类的构造方法
		this.goods = goods;
	}
	public void toShow() {				//toShow()方法
		System.out.println("属于危险品");
	}
}

class Machine{							//定义Machine类
	public void checkBag(Goods goods) throws DException{//由方法抛出异常
        //若isDange属性为true,即为危险品,抛出DException异常
		if(goods.isDange == true) {		
			throw new DException(goods);
		}
        //若不是危险品,输出对应信息
		else {
			System.out.println("不属于危险品");
		}
	}
}

public class Test {						//主类
	static public void main(String []args) {
		Goods goods = new Goods(false);  //创建goods对象,设置isDange属性
		Machine machine = new Machine();  //创建machine对象
		try {
			machine.checkBag(goods);  //调用Machine类的checkBag()方法,判断参数goods是否为危险品
		}
		catch(DException de) {  //捕获由checkBag()方法抛出的DException异常
			de.toShow();  //调用toShow()方法处理危险品or输出非危险品的提示信息
		}
		
		Goods goods2 = new Goods(true);
		try {
			machine.checkBag(goods2);
		}
		catch(DException de){
			de.toShow();
		}
	}
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值