一道JAVA编程题

2024-11-28 23:03:02
推荐回答(2个)
回答1:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
* 编写一个Java应用程序,当用户在输入对话框中输入两个日期后(日期格式为YYYYMMDD,
* 如1999年1月12日应输入为19990112),程序将判断两个日期的先后顺序,
* 以及两个日期之间的间隔天数(例如1999年1月1日和1999年1月2日之间的间隔是1天)。
*
* @author Administrator
*/
public class DateManipulation {
public static void main(String[] args ) {
BufferedReader in = null;

try {
// user input Date
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
in = new BufferedReader(new InputStreamReader(System.in));
String dateStr = in.readLine();
Date udate = sf.parse(dateStr);

// Current Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
Date curr = cal.getTime();

StringBuilder msg = new StringBuilder();

if (udate.before(curr))
msg.append("在本日之前: ");
else if (udate.after(curr))
msg.append("在本日之后");

System.out.println(msg.append(compareDate(udate, curr)));
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if (in != null)
in.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}

private static int compareDate(Date one , Date two ) {
return (one.getYear() - two.getYear()) * 365 + (one.getMonth() - two.getMonth()) * 30 + one.getDay() - two.getDay();
}
}

回答2:

java和其他编程语言一样,double类型的运算是有误差的,但是误差是很小的,你计算的精确位是0.1,所以误差不会超过0.01,你可以这样写Math.abs(i-0.3)<0.01||Math.abs(i-0.8)<0.01,abs是Math类中的一个求绝对值的函数,这个你应该是能够看懂了吧