早教吧 育儿知识 作业答案 考试题库 百科 知识分享

用java编写实现:输出为输入日期后一天的日期。注意边界值问题,不要有bug。函数包含三个变量:month、day和year,函数的输出为输入日期后一天的日期。例如,输入为2006年3月7日,则

题目详情
用java编写实现:输出为输入日期后一天的日期。注意边界值问题,不要有bug。
函数包含三个变量:month 、 day 和 year ,函数的输出为输入日期后一天的日期。 例如,输入为 2006年3月 7日,则函数的输出为 2006年3月8日 。要求输入变量 month 、 day 和 year 均为整数值,并且满足下列条件:
①1≤month≤12
②1≤day≤31
③1920≤year≤2050
▼优质解答
答案和解析
日期的判断修改了一下,日期的最大值是本月的最大天数,不是31
------------------------------------------------------------------------------------
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
public class T {
public static int[] dates = new int[3];
public static void main(String[] args) throws Exception {
String[] input = { "input year :", "input month :", "input day :" };
Scanner sc = new Scanner(System.in);
for (int i = 0; i < input.length; i++) {
dates[i] = input(input[i], sc, i);
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, dates[0]);
calendar.set(Calendar.MONTH, dates[1] - 1);
calendar.set(Calendar.DATE, dates[2] + 1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(calendar.getTime()));
}
public static int input(String message, Scanner sc, int index) {
while (true) {
System.out.print(message);
String str = sc.nextLine();
try {
int result = Integer.parseInt(str);
if (index == 0 && !(result >= 1920 && result <= 2050)) {
System.out.println("1920≤year≤2050");
continue;
}
if (index == 1 && !(result >= 1 && result <= 12)) {
System.out.println("1≤month≤12");
continue;
}
if (index == 2) {
int end = endDay(dates[0], dates[1]);
if (!(result >= 1 && result <= end)) {
System.out.println("1≤day≤" + end);
continue;
}
}
return result;
} catch (Exception e) {
System.out.println("input error!");
}
}
}
public static int endDay(int year, int month) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DATE, 0);
return c.get(Calendar.DATE);
}
}