用户输入商品生产日期和保质期,通过程序计算促销日期。计算规则为:到保质期前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); } }
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行列坐标时,对应在集合中的元素的属性也会随之改变。
参考答案
contains方法用于判断给定的元素是否被包含在集合中。若包含则返回true,否则返回false。另外,在判断给定的元素是否被包含在集合中,要使用元素的equals方法进行比较的,比较规则如下:
(o==null ? e==null : o.equals(e))
其中e是集合中的元素。上述代码表示当某对象与集合中的某对象使用equals方法进行比较返回true,那么contains方法返回true,否则,返回false。
请看如下代码:
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方法用于判断当前集合中是否不包含任何元素。