1 商品促销日期计算程序

用户输入商品生产日期和保质期,通过程序计算促销日期。计算规则为:到保质期前14天所在周的周三为促销日。控制台交互情况如图-1所示。

图- 1

参考答案

实现此案例需要按照如下步骤进行。

步骤一:构建测试方法

在课上案例的TestCalendar类中添加测试方法testDiscountDate,代码如下所示:

package day03;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
import org.junit.Test;

public class TestCalendar {
#cold_bold /**
#cold_bold  * 使Date表示的日期与Calendar表示的日期进行互换
#cold_bold  * @throws ParseException 
#cold_bold  */
#cold_bold	@Test
#cold_bold	public void testDiscountDate() throws Exception {
#cold_bold		
#cold_bold	}
}

步骤二:接收用户输入

接收用户输入的商品生产日期和保质期,代码如下所示:

package day03;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
import org.junit.Test;

public class TestCalendar {
/**
  * 使Date表示的日期与Calendar表示的日期进行互换
	 * @throws ParseException 
  */
	@Test
	public void testDiscountDate() throws Exception {
#cold_bold		Scanner scanner = new Scanner(System.in);
#cold_bold		System.out.println("请输入生产日期(yyyy-MM-dd):");
#cold_bold		String dateStr = scanner.nextLine();
#cold_bold		
#cold_bold		System.out.println("请输入保质期(天数):");
#cold_bold		int days = scanner.nextInt();
	}	
}

步骤三:对日期类型进行转换

首先,使用SimpleDateFormat类的parse方法将字符串日期转换为Date表示的日期;然后,使用Calendar类的setTime方法将Date表示的日期转换为Calendar表示的日期,代码如下所示:

package day03;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
import org.junit.Test;

public class TestCalendar {
 /**
  * 使Date表示的日期与Calendar表示的日期进行互换
 * @throws ParseException 
  */
	@Test
	public void testDiscountDate() throws Exception {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入生产日期(yyyy-MM-dd):");
		String dateStr = scanner.nextLine();
		
		System.out.println("请输入保质期(天数):");
		int days = scanner.nextInt();
		
#cold_bold		//将字符串日期转换为Date表示的日期
#cold_bold		SimpleDateFormat sdf
#cold_bold			= new SimpleDateFormat("yyyy-MM-dd");
#cold_bold		Date date = sdf.parse(dateStr);
#cold_bold		
#cold_bold		//将Date表示的日期转换为Calendar表示的日期
#cold_bold		Calendar calendar = Calendar.getInstance();
#cold_bold		calendar.setTime(date);
	}
	
}

步骤四:计算促销日期

使用Calendar类的add方法和set方法来计算促销日期,代码如下所示:

package day03;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
import org.junit.Test;

public class TestCalendar {
 /**
  * 使Date表示的日期与Calendar表示的日期进行互换
* @throws ParseException 
  */
	@Test
	public void testDiscountDate() throws Exception {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入生产日期(yyyy-MM-dd):");
		String dateStr = scanner.nextLine();
		
		System.out.println("请输入保质期(天数):");
		int days = scanner.nextInt();
		
		//将字符串日期转换为Date表示的日期
		SimpleDateFormat sdf
			= new SimpleDateFormat("yyyy-MM-dd");
		Date date = sdf.parse(dateStr);
		
		//将Date表示的日期转换为Calendar表示的日期
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		
#cold_bold		//计算促销日期
#cold_bold		calendar.add(Calendar.DAY_OF_YEAR, days);
#cold_bold		calendar.add(Calendar.DAY_OF_YEAR, -14);
#cold_bold		calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
	}
	
}

步骤五:将促销日期格式化输出

首先,使用Calendar类的getTime方法将Calendar表示的日期转换为Date表示的日期;然后,使用SimpleDateFormat类的format方法对日期进行格式化,代码如下所示:

package day03;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
import org.junit.Test;

public class TestCalendar {
	/**
  * 使Date表示的日期与Calendar表示的日期进行互换
 * @throws ParseException 
  */
	@Test
	public void testDiscountDate() throws Exception {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入生产日期(yyyy-MM-dd):");
		String dateStr = scanner.nextLine();
		
		System.out.println("请输入保质期(天数):");
		int days = scanner.nextInt();
		
		//将字符串日期转换为Date表示的日期
		SimpleDateFormat sdf
			= new SimpleDateFormat("yyyy-MM-dd");
		Date date = sdf.parse(dateStr);
		
		//将Date表示的日期转换为Calendar表示的日期
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		
		//计算促销日期
		calendar.add(Calendar.DAY_OF_YEAR, days);
		calendar.add(Calendar.DAY_OF_YEAR, -14);
		calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
		
#cold_bold		//将Calendar表示的日期转换为Date表示的日期
#cold_bold		date = calendar.getTime();
#cold_bold		
#cold_bold		//对日期进行格式话
#cold_bold		dateStr = sdf.format(date);
#cold_bold		System.out.println("促销日为:"+dateStr);
	}
}

本案例的完整代码如下所示:

package day03;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
import org.junit.Test;

public class TestCalendar {
 /**
  * 使Date表示的日期与Calendar表示的日期进行互换
 * @throws ParseException 
  */
	@Test
	public void testDiscountDate() throws Exception {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入生产日期(yyyy-MM-dd):");
		String dateStr = scanner.nextLine();
		
		System.out.println("请输入保质期(天数):");
		int days = scanner.nextInt();
		
		//将字符串日期转换为Date表示的日期
		SimpleDateFormat sdf
			= new SimpleDateFormat("yyyy-MM-dd");
		Date date = sdf.parse(dateStr);
		
		//将Date表示的日期转换为Calendar表示的日期
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		
		//计算促销日期
		calendar.add(Calendar.DAY_OF_YEAR, days);
		calendar.add(Calendar.DAY_OF_YEAR, -14);
		calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
		
		//将Calendar表示的日期转换为Date表示的日期
		date = calendar.getTime();
		
		//对日期进行格式话
		dateStr = sdf.format(date);
		System.out.println("促销日为:"+dateStr);
	}	
}

2 下面代码输出结果是?

Cell类的代码如下所示:

public class Cell{
	int row;
	int col;
	public Cell(int row, int col) {
		this.row = row;
		this.col = col;
	}
	public void drop() {
		row++;
	}
	@Override
	public String toString() {
		return "(" + row + "," + col + ")";
	}
}

运行testRef方法,程序的输出结果是:()。

	public void testRef() {
		Collection<Cell> cells = new ArrayList<Cell>();
		Cell c0 = new Cell(5, 6);
		Cell c1 = new Cell(7, 9);
		cells.add(c0);
		cells.add(c1);
		System.out.println(c0 + "," + c1);
		System.out.println(cells);  
		c0.drop();
		c1.drop();
		System.out.println(c0 + "," + c1);
		System.out.println(cells); 
	}

A.(5,6),(7,9)

[(5,6), (7,9)]

(6,6),(8,9)

[(6,6), (8,9)]

B.(5,6),(7,9)

[(5,6), (7,9)]

(5,6),(7,9)

[(5,6), (7,9)]

C.(5,6),(7,9)

[(5,6), (7,9)]

(6,6),(8,9)

[(5,6), (7,9)]

D.(6,6),(8,9)

[(6,6), (8,9)]

(6,6),(8,9)

[(6,6), (8,9)]

参考答案

本题正确答案为A。

集合中存储的都是引用类型元素,并且集合只保存每个元素对象的引用,而并非将元素对象本身存入集合。本题中,当改变对象c0和c1行列坐标时,对应在集合中的元素的属性也会随之改变。

3 简述contains方法和equals方法的关系

参考答案

contains方法用于判断给定的元素是否被包含在集合中。若包含则返回true,否则返回false。另外,在判断给定的元素是否被包含在集合中,要使用元素的equals方法进行比较的,比较规则如下:

(o==null ? e==null : o.equals(e))

其中e是集合中的元素。上述代码表示当某对象与集合中的某对象使用equals方法进行比较返回true,那么contains方法返回true,否则,返回false。

4 下面代码输出的结果是?

请看如下代码:

	public void testSizeAndClearAndIsEmpty() {
		Collection<String> c = new ArrayList<String>();
		System.out.println("isEmpty:"+c.isEmpty()); 
		c.add("terry");
		c.add("allen");
		c.add("jerry");
		c.add("smith");
		System.out.println("isEmpty:" + c.isEmpty() + ",size: " + c.size());
		c.clear();
		System.out.println("isEmpty:" + c.isEmpty() + ", size: " + c.size());
	}

运行testSizeAndClearAndIsEmpty方法,程序的输出结果是:()。

A.isEmpty:false

isEmpty:true,size: 4

isEmpty:false, size: 0

B.isEmpty:true

isEmpty:false,size: 4

isEmpty:true, size: 4

C.isEmpty:false

isEmpty:true,size: 4

isEmpty:false, size: 4

D.isEmpty:true

isEmpty:false,size: 4

isEmpty:true, size: 0

参考答案

本题正确答案为D。

本题涉及到Collection接口的isEmpty方法、size方法以及clear方法应用。其中size方法用于返回当前集合中的元素总数; clear方法用于清空当前集合; isEmpty方法用于判断当前集合中是否不包含任何元素。