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 {
- /**
- * 使Date表示的日期与Calendar表示的日期进行互换
- * @throws ParseException
- */
- @Test
- public void testDiscountDate() throws Exception {
- }
- }
步骤二:接收用户输入
接收用户输入的商品生产日期和保质期,代码如下所示:
- 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();
- }
- }
步骤三:对日期类型进行转换
首先,使用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();
- //将字符串日期转换为Date表示的日期
- SimpleDateFormat sdf
- = new SimpleDateFormat("yyyy-MM-dd");
- Date date = sdf.parse(dateStr);
- //将Date表示的日期转换为Calendar表示的日期
- Calendar calendar = Calendar.getInstance();
- 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);
- //计算促销日期
- calendar.add(Calendar.DAY_OF_YEAR, days);
- calendar.add(Calendar.DAY_OF_YEAR, -14);
- 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);
- //将Calendar表示的日期转换为Date表示的日期
- date = calendar.getTime();
- //对日期进行格式话
- dateStr = sdf.format(date);
- 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方法用于判断当前集合中是否不包含任何元素。