求Java高手写道题
设intyear,month,day分别表示一个日期中的年月日,试编程求a)对于任意三个整数,判断其是否为一个合法的日期值。b)给定一个日期值,计算若干天后的日期值c)如...
设int year,month,day分别表示一个日期中的年月日,试编程求
a) 对于任意三个整数,判断其是否为一个合法的日期值。
b) 给定一个日期值,计算若干天后的日期值
c) 如果有两个日期值,计算他们相距的天数。
要用MyEclipse写的代码 谢谢谢 展开
a) 对于任意三个整数,判断其是否为一个合法的日期值。
b) 给定一个日期值,计算若干天后的日期值
c) 如果有两个日期值,计算他们相距的天数。
要用MyEclipse写的代码 谢谢谢 展开
展开全部
import java.util.*;
public class Test24 {
public static void main(String[] args) {
int year1, month1, day1;
int num;
Scanner scan = new Scanner(System.in);
MyDate d1, d2;
System.out.println("请输入一个日期");
System.out.print("年:");
year1 = scan.nextInt();
System.out.print("月:");
month1 = scan.nextInt();
System.out.print("日:");
day1 = scan.nextInt();
try{
d1 = new MyDate(year1, month1, day1);
System.out.println(d1.toString() + " 是一个合法日期");
}
catch(Exception e){
System.out.println(" 非法日期");
}
System.out.println("请输入一个日期");
System.out.print("年:");
year1 = scan.nextInt();
System.out.print("月:");
month1 = scan.nextInt();
System.out.print("日:");
day1 = scan.nextInt();
System.out.println("时间间隔:");
num = scan.nextInt();
try{
d1 = new MyDate(year1, month1, day1);
d2 = d1.dateAdd(num);
System.out.println(d1.toString() + " 在" + num + "天后就是 " + d2.toString());
}
catch(Exception e){
System.out.println(" 非法日期");
}
try{
d1 = new MyDate(2009, 2, 27);
d2 = new MyDate(2011, 3, 1);
num = d1.dateDiff(d1, d2);
System.out.println(d1.toString() + " ~ " + d2.toString() + " 相隔 " + num + " 天");
}
catch(Exception e){
System.out.println(" 非法日期");
}
}
}
class MyDate{
private int year;
private int month;
private int day;
private int[] days = new int[]{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
public MyDate(){
}
public MyDate(int year, int month, int day) throws Exception{
if(year < 0 || month<1 || month>12 || day<1 || day>days[month-1]){
throw new Exception("非法日期");
}
if(month == 2){
if(isLeapYear(year)==true && day>29){
throw new Exception("非法日期");
}
if(isLeapYear(year)==false && day>28){
throw new Exception("非法日期");
}
}
this.year = year;
this.month = month;
this.day = day;
}
//给定一个日期值,计算若干天后的日期值
public MyDate dateAdd(int num) throws Exception{
MyDate d = new MyDate(this.year, this.month, this.day);
days[1] = isLeapYear(d.year) ? 29 : 28;
d.day += num;
if(num > 0){
while(d.day > days[d.month-1]){
d.day -= days[d.month-1];
d.month++;
if(d.month > 12){
d.month = 1;
d.year++;
days[1] = isLeapYear(d.year) ? 29 : 28;
}
}
}
else{
while(d.day <= 0){
d.day += days[(d.month+10)%12];
d.month--;
if(d.month < 1){
d.month = 12;
d.year--;
days[1] = isLeapYear(d.year) ? 29 : 28;
}
}
}
return d;
}
//如果有两个日期值,计算他们相距的天数。
public int dateDiff(MyDate d1, MyDate d2) throws Exception {
MyDate date1 = new MyDate(d1.year, d1.month, d1.day);
MyDate date2 = new MyDate(d2.year, d2.month, d2.day);
int i;
date1.days[1] = isLeapYear(date1.year) ? 29 : 28;
for(i=1; i<date1.month; i++){
date1.day += date1.days[i-1];
}
date2.days[1] = isLeapYear(date2.year) ? 29 : 28;
for(i=1; i<date2.month; i++){
date2.day += date2.days[i-1];
}
if(date1.year < date2.year){
for(i=date1.year; i<date2.year; i++){
date2.day += isLeapYear(i) ? 366 : 365;
}
}
else if(date1.year > date2.year){
for(i=date2.year; i<date1.year; i++){
date1.day += isLeapYear(i) ? 366 : 365;
}
}
return date2.day - date1.day;
}
public boolean isLeapYear(int year){
return ((year%400==0) || (year%4==0 && year%100!=0)) ? true : false;
}
public String toString(){
StringBuffer buff = new StringBuffer();
if(year < 10){
buff.append("000" + year);
}
else if(year < 100){
buff.append("00" + year);
}
else if(year < 1000){
buff.append("0" + year);
}
else{
buff.append(year);
}
if(month < 10){
buff.append("-0" + month);
}
else{
buff.append("-" + month);
}
if(day < 10){
buff.append("-0" + day);
}
else{
buff.append("-" + day);
}
return buff.toString();
}
}
运行测试:
请输入一个日期
年:2011
月:2
日:29
非法日期
请输入一个日期
年:2011
月:2
日:27
时间间隔:
2
2011-02-27 在2天后就是 2011-03-01
2009-02-27 ~ 2011-03-01 相隔 732 天
public class Test24 {
public static void main(String[] args) {
int year1, month1, day1;
int num;
Scanner scan = new Scanner(System.in);
MyDate d1, d2;
System.out.println("请输入一个日期");
System.out.print("年:");
year1 = scan.nextInt();
System.out.print("月:");
month1 = scan.nextInt();
System.out.print("日:");
day1 = scan.nextInt();
try{
d1 = new MyDate(year1, month1, day1);
System.out.println(d1.toString() + " 是一个合法日期");
}
catch(Exception e){
System.out.println(" 非法日期");
}
System.out.println("请输入一个日期");
System.out.print("年:");
year1 = scan.nextInt();
System.out.print("月:");
month1 = scan.nextInt();
System.out.print("日:");
day1 = scan.nextInt();
System.out.println("时间间隔:");
num = scan.nextInt();
try{
d1 = new MyDate(year1, month1, day1);
d2 = d1.dateAdd(num);
System.out.println(d1.toString() + " 在" + num + "天后就是 " + d2.toString());
}
catch(Exception e){
System.out.println(" 非法日期");
}
try{
d1 = new MyDate(2009, 2, 27);
d2 = new MyDate(2011, 3, 1);
num = d1.dateDiff(d1, d2);
System.out.println(d1.toString() + " ~ " + d2.toString() + " 相隔 " + num + " 天");
}
catch(Exception e){
System.out.println(" 非法日期");
}
}
}
class MyDate{
private int year;
private int month;
private int day;
private int[] days = new int[]{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
public MyDate(){
}
public MyDate(int year, int month, int day) throws Exception{
if(year < 0 || month<1 || month>12 || day<1 || day>days[month-1]){
throw new Exception("非法日期");
}
if(month == 2){
if(isLeapYear(year)==true && day>29){
throw new Exception("非法日期");
}
if(isLeapYear(year)==false && day>28){
throw new Exception("非法日期");
}
}
this.year = year;
this.month = month;
this.day = day;
}
//给定一个日期值,计算若干天后的日期值
public MyDate dateAdd(int num) throws Exception{
MyDate d = new MyDate(this.year, this.month, this.day);
days[1] = isLeapYear(d.year) ? 29 : 28;
d.day += num;
if(num > 0){
while(d.day > days[d.month-1]){
d.day -= days[d.month-1];
d.month++;
if(d.month > 12){
d.month = 1;
d.year++;
days[1] = isLeapYear(d.year) ? 29 : 28;
}
}
}
else{
while(d.day <= 0){
d.day += days[(d.month+10)%12];
d.month--;
if(d.month < 1){
d.month = 12;
d.year--;
days[1] = isLeapYear(d.year) ? 29 : 28;
}
}
}
return d;
}
//如果有两个日期值,计算他们相距的天数。
public int dateDiff(MyDate d1, MyDate d2) throws Exception {
MyDate date1 = new MyDate(d1.year, d1.month, d1.day);
MyDate date2 = new MyDate(d2.year, d2.month, d2.day);
int i;
date1.days[1] = isLeapYear(date1.year) ? 29 : 28;
for(i=1; i<date1.month; i++){
date1.day += date1.days[i-1];
}
date2.days[1] = isLeapYear(date2.year) ? 29 : 28;
for(i=1; i<date2.month; i++){
date2.day += date2.days[i-1];
}
if(date1.year < date2.year){
for(i=date1.year; i<date2.year; i++){
date2.day += isLeapYear(i) ? 366 : 365;
}
}
else if(date1.year > date2.year){
for(i=date2.year; i<date1.year; i++){
date1.day += isLeapYear(i) ? 366 : 365;
}
}
return date2.day - date1.day;
}
public boolean isLeapYear(int year){
return ((year%400==0) || (year%4==0 && year%100!=0)) ? true : false;
}
public String toString(){
StringBuffer buff = new StringBuffer();
if(year < 10){
buff.append("000" + year);
}
else if(year < 100){
buff.append("00" + year);
}
else if(year < 1000){
buff.append("0" + year);
}
else{
buff.append(year);
}
if(month < 10){
buff.append("-0" + month);
}
else{
buff.append("-" + month);
}
if(day < 10){
buff.append("-0" + day);
}
else{
buff.append("-" + day);
}
return buff.toString();
}
}
运行测试:
请输入一个日期
年:2011
月:2
日:29
非法日期
请输入一个日期
年:2011
月:2
日:27
时间间隔:
2
2011-02-27 在2天后就是 2011-03-01
2009-02-27 ~ 2011-03-01 相隔 732 天
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询