import java.util.Scanner;
public class Main {
private int year;
private int month;
private int day;
public boolean checkInputValidity()//检测输入的年、月、日是否合法
{
if(this.year<1820||this.year>2020||this.month<1||this.month>12||this.day<1||this.day>31){
return false;
}
else {
if(isLastDays(this.year,this.month)==30){
if(this.day>=31){
return false;
}
}
if(this.month == 2){
if(isLeapYear(this.year)){
if(this.day>29){
return false;
}
}
else{
if(this.day>28){
return false;
}
}
}
}
return true;
}
public boolean isLeapYear(int year)//判断year是否为闰年
{
if((year%400)==0||((year%4)==0&&(year%100)!=0)){
//if((year%100)!=0&&(year%4)==0){
return true;
}
else {
return false;
}
}
public Main getNextNDays(int add_days)//取得year-month-day的下n天日期
{
Main temp_date=new Main(this);
if(add_days==0)return temp_date;
while (add_days>366&&temp_date.day<29){
//有的月只有28天,往下一年跳会出届
add_days-=NextYear(temp_date.year,temp_date.month);
temp_date.year++;
}
while (add_days>=31&&temp_date.day<29){
add_days-=isLastDays(temp_date.year,temp_date.month);
temp_date=nextMonth(temp_date);
}
while(true) //死循环
{
temp_date = nextDay(temp_date); //计算下一天
add_days--; //要增加的天数--
if(add_days <= 0) //当要增加的天数等于0时,停止循环
break;
}
return temp_date;
}
private int NextYear(int year, int month) {
if(isLeapYear(year)){
if(month<=2){
return 366;
}
else return 365;
}
else {
if(isLeapYear(year+1)){
if(month<=2)return 365;
else return 366;
}
else return 365;
}
}
private Main nextMonth(Main date) {
date.month++; //月份++
if(date.month == 13) //如果是年底
{
date.month = 1; //那么月份置为1
date.year++; //年份加1
}
return date;
}
public Main nextDay(Main date) //计算下一天
{
if(date.day == isLastDays(date.year,date.month)) //如果是月底
{
date.day = 1; //那么下一天则置天数为1
date=nextMonth(date);
}
else //如果不是月底,天数加一即可
date.day++;
return date;
}
public int isLastDays(int year,int month) //返回对应月份的天数
{
if(isLeapYear(year) && month == 2){
//System.out.println("闰年!");
return 29;
}
if(month == 2){
// System.out.println("平2月!");
return 28;}
if(month == 4 || month == 6 || month == 9 || month == 11)
return 30;
return 31;
}
public Main getPreviousNDays(int dec_days)//取得year-month-day的前n天日期
{
Main temp_date=new Main(this);
if(dec_days==0)return temp_date;
while (dec_days>366&&temp_date.day<29){
dec_days-=LastYear(temp_date.year,temp_date.month);
temp_date.year--;
}
while (dec_days>31&&temp_date.day<29){
dec_days-=isStartDays(temp_date.year,temp_date.month);
temp_date=nextPMonth(temp_date);
}
while(true) //死循环
{
temp_date = lastDay(temp_date); //计算下一天
dec_days--; //要增加的天数--
if(dec_days <= 0) //当要增加的天数等于0时,停止循环
break;
}
return temp_date;
}
private int LastYear(int year, int month) {
if(isLeapYear(year)){
if(month<=2)return 365;
else return 366;
}
else {
if(isLeapYear(year-1)){
if(month<=2)return 366;
else return 365;
}
else return 365;
}
}
private Main nextPMonth(Main date) {
date.month--; //月份++
if(date.month == 0) //如果是年底
{
date.month = 12; //那么月份置为1
date.year--; //年份加1
}
return date;
}
private Main lastDay(Main date) {
if(date.day == 1) //如果是月底
{
date.day = isStartDays(date.year,date.month); //那么下一天则置天数为1
date=nextPMonth(date);
}
else //如果不是月底,天数加一即可
date.day--;
return date;
}
private int isStartDays(int year, int month) {
if(isLeapYear(year) && month == 3){
//System.out.println("闰年闰月!");
return 29;}
if(month == 3)
return 28;
if(month == 4 || month == 6 || month == 9 || month == 11||month==1||month==8||month==2)
return 31;
return 30;
}
public boolean compareDates(Main date)//比较当前日期与date的大小(先后)
{
while (!equalTwoDates(date)){
if(this.year>date.year) return true;
else if (this.year<date.year)return false;
else
{
if(this.month>date.month) return true;
else if(this.month<date.month) return false;
else {
if(this.day>date.day) return true;
else return false;
}
}
}
return false;
}
public boolean equalTwoDates(Main date)//判断两个日期是否相等
{
if(this.day==date.day&&this.year==date.year&&this.month==date.month){
return true;
}
else {
return false;
}
}
public int getDaysofDates(Main date)//求当前日期与date之间相差的天数
{
if(this.equalTwoDates(date)){
return 0;
}
else {
if(this.compareDates(date)){
boolean flag=true;int i=1;
i=iStart(date);
while (flag){
if(this.getPreviousNDays(i).equalTwoDates(date)){
flag =false;
return i;
}
i++;
}
}
else {
boolean flag=true;int i=1;
i=iStart(date);
while (flag){
//不要把int i=1;放里边
if(this.getNextNDays(i).equalTwoDates(date)){
flag =false;
return i;
}
i++;
}
}
}
return 0;
}
private int iStart(Main date) {
//确定i的初始值减少运行时间开销
int i=0;
if(this.year==date.year&&this.month==date.month){
return 1;
}
else if(this.year==date.year){
if(this.month>date.month){
i=(this.month-date.month-1)*28+1;
return i;
}
else {
i=(date.month-this.month-1)*28+1;
return i;
}
}
else {
if(this.year>date.year){
i=((this.year-date.year-1)*365);
return i;
}
else {
i=((date.year-this.year-1)*365);
return i;
}
}
}
public String showDate()//以“year-month-day”格式返回日期值
{
return year + "-" + month + "-" + day;
}
public Main() {
}
public Main(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public Main(Main date) {
this(date.year, date.month, date.day);
}
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year = 0;
int month = 0;
int day = 0;
int choice = input.nextInt();
if (choice == 1) {
// test getNextNDays method
int m = 0;
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
Main date = new Main(year, month, day);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
}
m = input.nextInt();
if (m < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " next " + m + " days is:");
System.out.println(date.getNextNDays(m).showDate());
} else if (choice == 2) {
// test getPreviousNDays method
int n = 0;
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
Main date = new Main(year, month, day);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
}
n = input.nextInt();
if (n < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.print(
date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " previous " + n + " days is:");
System.out.println(date.getPreviousNDays(n).showDate());
} else if (choice == 3) {
//test getDaysofDates method
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
int anotherYear = Integer.parseInt(input.next());
int anotherMonth = Integer.parseInt(input.next());
int anotherDay = Integer.parseInt(input.next());
Main fromDate = new Main(year, month, day);
Main toDate = new Main(anotherYear, anotherMonth, anotherDay);
if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {
System.out.println("The days between " + fromDate.showDate() +
" and " + toDate.showDate() + " are:"
+ fromDate.getDaysofDates(toDate));
} else {
System.out.println("Wrong Format");
System.exit(0);
}
}
else{
System.out.println("Wrong Format");
System.exit(0);
}
}
}
写了4天!想他么多写点代码完成感悟,但是我没力气了,”类“!我一直以为是哪里错了呢?我以为是他么(文明)getNextNDays()那两个方法时间优化错了,结果是特么我没有写,0天后是几号!!啊!!不说了,700ms那里我换可以优化一下,但是我就不,别问!问就是玩!
算了,我还是优化一下吧,毕竟哎,肝了四天,我先喘口气!!!
import java.util.Scanner;
public class Main {
private int year;
private int month;
private int day;
public boolean checkInputValidity()//检测输入的年、月、日是否合法
{
if(this.year<1820||this.year>2020||this.month<1||this.month>12||this.day<1||this.day>31){
return false;
}
else {
if(isLastDays(this.year,this.month)==30){
if(this.day>=31){
return false;
}
}
if(this.month == 2){
if(isLeapYear(this.year)){
if(this.day>29){
return false;
}
}
else{
if(this.day>28){
return false;
}
}
}
}
return true;
}
public boolean isLeapYear(int year)//判断year是否为闰年
{
if((year%400)==0||((year%4)==0&&(year%100)!=0)){
//if((year%100)!=0&&(year%4)==0){
return true;
}
else {
return false;
}
}
public Main getNextNDays(int add_days)//取得year-month-day的下n天日期
{
Main temp_date=new Main(this);
if(add_days==0)return temp_date;
while(true) //死循环
{
if(add_days>31&&temp_date.day<29){
add_days-=isLastDays(temp_date.year,temp_date.month);
temp_date=nextMonth(temp_date);
}
temp_date = nextDay(temp_date); //计算下一天
add_days--; //要增加的天数--
if(add_days <= 0) //当要增加的天数等于0时,停止循环
break;
}
return temp_date;
}
private Main nextMonth(Main date) {
date.month++; //月份++
if(date.month == 13) //如果是年底
{
date.month = 1; //那么月份置为1
date.year++; //年份加1
}
return date;
}
public Main nextDay(Main date) //计算下一天
{
if(date.day == isLastDays(date.year,date.month)) //如果是月底
{
date.day = 1; //那么下一天则置天数为1
date=nextMonth(date);
}
else //如果不是月底,天数加一即可
date.day++;
return date;
}
public int isLastDays(int year,int month) //返回对应月份的天数
{
if(isLeapYear(year) && month == 2){
//System.out.println("闰年!");
return 29;
}
if(month == 2){
// System.out.println("平2月!");
return 28;}
if(month == 4 || month == 6 || month == 9 || month == 11)
return 30;
return 31;
}
public Main getPreviousNDays(int dec_days)//取得year-month-day的前n天日期
{
Main temp_date=new Main(this);
if(dec_days==0)return temp_date;
while(true) //死循环
{
if(dec_days>31&&temp_date.day<29){
dec_days-=isStartDays(temp_date.year,temp_date.month);
temp_date=nextPMonth(temp_date);
}
temp_date = lastDay(temp_date); //计算下一天
dec_days--; //要增加的天数--
if(dec_days <= 0) //当要增加的天数等于0时,停止循环
break;
}
return temp_date;
}
private Main nextPMonth(Main date) {
date.month--; //月份++
if(date.month == 0) //如果是年底
{
date.month = 12; //那么月份置为1
date.year--; //年份加1
}
return date;
}
private Main lastDay(Main date) {
if(date.day == 1) //如果是月底
{
date.day = isStartDays(date.year,date.month); //那么下一天则置天数为1
date=nextPMonth(date);
}
else //如果不是月底,天数加一即可
date.day--;
return date;
}
private int isStartDays(int year, int month) {
if(isLeapYear(year) && month == 3){
//System.out.println("闰年闰月!");
return 29;}
if(month == 3)
return 28;
if(month == 4 || month == 6 || month == 9 || month == 11||month==1||month==8||month==2)
return 31;
return 30;
}
public boolean compareDates(Main date)//比较当前日期与date的大小(先后)
{
while (!equalTwoDates(date)){
if(this.year>date.year) return true;
else if (this.year<date.year)return false;
else
{
if(this.month>date.month) return true;
else if(this.month<date.month) return false;
else {
if(this.day>date.day) return true;
else return false;
}
}
}
return false;
}
public boolean equalTwoDates(Main date)//判断两个日期是否相等
{
if(this.day==date.day&&this.year==date.year&&this.month==date.month){
return true;
}
else {
return false;
}
}
public int getDaysofDates(Main date)//求当前日期与date之间相差的天数
{
if(this.equalTwoDates(date)){
return 0;
}
else {
if(this.compareDates(date)){
boolean flag=true;int i=1;
i=iStart(date);
// System.out.println(i);
while (flag){
if(this.getPreviousNDays(i).equalTwoDates(date)){
flag =false;
return i;
}
i++;
}
}
else {
boolean flag=true;int i=1;
i=iStart(date);
//System.out.println(i+"xiao");
while (flag){
//不要把int i=1;放里边
if(this.getNextNDays(i).equalTwoDates(date)){
flag =false;
return i;
}
i++;
}
}
}
return 0;
}
private int iStart(Main date) {
//确定i的初始值减少运行时间开销
int i=0;
if(this.year==date.year&&this.month==date.month){
return 1;
}
else if(this.year==date.year){
if(this.month>date.month){
i=(this.month-date.month-1)*28+1;
return i;
}
else {
i=(date.month-this.month-1)*28+1;
return i;
}
}
else {
if(this.year>date.year){
i=((this.year-date.year-1)*365);
return i;
}
else {
i=((date.year-this.year-1)*365);
return i;
}
}
}
public String showDate()//以“year-month-day”格式返回日期值
{
return year + "-" + month + "-" + day;
}
public Main() {
}
public Main(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public Main(Main date) {
this(date.year, date.month, date.day);
}
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year = 0;
int month = 0;
int day = 0;
int choice = input.nextInt();
if (choice == 1) {
// test getNextNDays method
int m = 0;
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
Main date = new Main(year, month, day);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
}
m = input.nextInt();
if (m < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " next " + m + " days is:");
System.out.println(date.getNextNDays(m).showDate());
} else if (choice == 2) {
// test getPreviousNDays method
int n = 0;
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
Main date = new Main(year, month, day);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
}
n = input.nextInt();
if (n < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.print(
date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " previous " + n + " days is:");
System.out.println(date.getPreviousNDays(n).showDate());
} else if (choice == 3) {
//test getDaysofDates method
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
int anotherYear = Integer.parseInt(input.next());
int anotherMonth = Integer.parseInt(input.next());
int anotherDay = Integer.parseInt(input.next());
Main fromDate = new Main(year, month, day);
Main toDate = new Main(anotherYear, anotherMonth, anotherDay);
if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {
System.out.println("The days between " + fromDate.showDate() +
" and " + toDate.showDate() + " are:"
+ fromDate.getDaysofDates(toDate));
} else {
System.out.println("Wrong Format");
System.exit(0);
}
}
else{
System.out.println("Wrong Format");
System.exit(0);
}
}
}
答:等等。
参考题目集二中和日期相关的程序,设计一个类DateUtil,该类有三个私有属性year、month、day(均为整型数),其中,year∈[1820,2020] ,month∈[1,12] ,day∈[1,31] , 除了创建该类的构造方法、属性的getter及setter方法外,需要编写如下方法:
public boolean checkInputValidity();//检测输入的年、月、日是否合法
public boolean isLeapYear(int year);//判断year是否为闰年
public DateUtil getNextNDays(int n);//取得year-month-day的下n天日期
public DateUtil getPreviousNDays(int n);//取得year-month-day的前n天日期
public boolean compareDates(DateUtil date);//比较当前日期与date的大小(先后)
public boolean equalTwoDates(DateUtil date);//判断两个日期是否相等
public int getDaysofDates(DateUtil date);//求当前日期与date之间相差的天数
public String showDate();//以“year-month-day”格式返回日期值
应用程序共测试三个功能:
求下n天
求前n天
求两个日期相差的天数
注意:严禁使用Java中提供的任何与日期相关的类与方法,并提交完整源码,包括主类及方法(已提供,不需修改)
程序主方法如下:
下面展示一些 内联代码片
。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year = 0;
int month = 0;
int day = 0;
int choice = input.nextInt();
if (choice == 1) {
// test getNextNDays method
int m = 0;
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
DateUtil date = new DateUtil(year, month, day);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
}
m = input.nextInt();
if (m < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " next " + m + " days is:");
System.out.println(date.getNextNDays(m).showDate());
} else if (choice == 2) {
// test getPreviousNDays method
int n = 0;
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
DateUtil date = new DateUtil(year, month, day);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
}
n = input.nextInt();
if (n < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.print(
date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " previous " + n + " days is:");
System.out.println(date.getPreviousNDays(n).showDate());
} else if (choice == 3) {
//test getDaysofDates method
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
int anotherYear = Integer.parseInt(input.next());
int anotherMonth = Integer.parseInt(input.next());
int anotherDay = Integer.parseInt(input.next());
DateUtil fromDate = new DateUtil(year, month, day);
DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay);
if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {
System.out.println("The days between " + fromDate.showDate() +
" and " + toDate.showDate() + " are:"
+ fromDate.getDaysofDates(toDate));
} else {
System.out.println("Wrong Format");
System.exit(0);
}
}
else{
System.out.println("Wrong Format");
System.exit(0);
}
}
}
在idea上能运行但是在pta上就会这样:
有大佬这样解决:
PTA上提交Java程序的一些套路
其中所有的DateUtil都需要改成Main才不会编译错误,之后我就不知道该怎么办了(哭.jpg)
import java.util.Scanner;
public class DateUtil {
private int year;
private int month;
private int day;
public boolean checkInputValidity()//检测输入的年、月、日是否合法
{
if(this.year<1820||this.year>2020||this.month<1||this.month>12||this.day<1||this.day>31){
return false;
}
else {
return true;
}
}
public boolean isLeapYear(int year)//判断year是否为闰年
{
if((year%400)==0||((year%4)==0&&(year%100)!=0)){
//if((year%100)!=0&&(year%4)==0){
return true;
}
else {
return false;
}
}
public DateUtil getNextNDays(int add_days)//取得year-month-day的下n天日期
{
DateUtil temp_date=new DateUtil(this);
while (add_days/366==0){
add_days=yStart(temp_date,add_days);
temp_date.year++;
}
while (add_days/31==0){
add_days=mStart(temp_date,add_days);
temp_date.month++;
}
while(true) //死循环
{
temp_date = nextDay(temp_date); //计算下一天
add_days--; //要增加的天数--
if(add_days == 0) //当要增加的天数等于0时,停止循环
break;
}
return temp_date;
}
private int mStart(DateUtil temp_date, int add_days) {
temp_date.month++;
if(isLastDays(temp_date.year,temp_date.month)==31)
return add_days-31;
else if(isLastDays(temp_date.year,temp_date.month)==30)
return add_days-30;
else if(isLastDays(temp_date.year,temp_date.month)==28)
return add_days-28;
else return add_days-29;
}
private int yStart(DateUtil temp_date,int n) {
//存在问题
if(temp_date.isLeapYear(++temp_date.year)){
return n-366;
}
else {
return n-365;
}
}
public DateUtil nextDay(DateUtil date) //计算下一天
{
if(date.day == isLastDays(date.year,date.month)) //如果是月底
{
date.day = 1; //那么下一天则置天数为1
date.month++; //月份++
if(date.month == 13) //如果是年底
{
date.month = 1; //那么月份置为1
date.year++; //年份加1
}
}
else //如果不是月底,天数加一即可
date.day++;
return date;
}
public int isLastDays(int year,int month) //返回对应月份的天数
{
if(isLeapYear(year) && month == 2){
//System.out.println("闰年!");
return 29;
}
if(month == 2){
// System.out.println("平2月!");
return 28;}
if(month == 4 || month == 6 || month == 9 || month == 11)
return 30;
return 31;
}
public DateUtil getPreviousNDays(int dec_days)//取得year-month-day的前n天日期
{
DateUtil temp_date=new DateUtil(this);
while (dec_days/366==0){
dec_days=yPStart(temp_date,dec_days);
temp_date.year--;
}
while (dec_days/31==0){
dec_days=mPStart(temp_date,dec_days);
temp_date.month--;
}
while(true) //死循环
{
temp_date = lastDay(temp_date); //计算下一天
dec_days--; //要增加的天数--
if(dec_days == 0) //当要增加的天数等于0时,停止循环
break;
}
return temp_date;
}
private int mPStart(DateUtil temp_date, int add_days) {
temp_date.month--;
if(isLastDays(temp_date.year,temp_date.month)==31)
return add_days-31;
else if(isLastDays(temp_date.year,temp_date.month)==30)
return add_days-30;
else if(isLastDays(temp_date.year,temp_date.month)==28)
return add_days-28;
else return add_days-29;
}
private int yPStart(DateUtil temp_date, int n) {
if(temp_date.isLeapYear(--temp_date.year)){
return n-366;
}
else {
return n-365;
}
}
private DateUtil lastDay(DateUtil date) {
if(date.day == 1) //如果是月底
{
date.day = isStartDays(date.year,date.month); //那么下一天则置天数为1
date.month--; //月份++
if(date.month == 0) //如果是年底
{
date.month = 12; //那么月份置为1
date.year--; //年份加1
}
}
else //如果不是月底,天数加一即可
date.day--;
return date;
}
private int isStartDays(int year, int month) {
if(isLeapYear(year) && month == 3){
//System.out.println("闰年闰月!");
return 29;}
if(month == 3)
return 28;
if(month == 4 || month == 6 || month == 9 || month == 11||month==1||month==8||month==2)
return 31;
return 30;
}
public boolean compareDates(DateUtil date)//比较当前日期与date的大小(先后)
{
if(this.year>date.year){
return true;
}
else if(this.year==date.year){
if(this.month>date.month){
return true;
}
else if(this.month==date.month){
if(this.day>date.day){
return true;
}
else if(this.day==date.day){
return false;
}
else {
return false;
}
}
else {
return false;
}
}
else {
return false;
}
}
public boolean equalTwoDates(DateUtil date)//判断两个日期是否相等
{
if(this.day==date.day&&this.year==date.year&&this.month==date.month){
return true;
}
else {
return false;
}
}
public int getDaysofDates(DateUtil date)//求当前日期与date之间相差的天数
{
if(this.equalTwoDates(date)){
return 0;
}
else {
if(this.compareDates(date)){
boolean flag=true;int i=1;
i=iStart(date);
while (flag){
//System.out.println("大!");
//System.out.println(this.getPreviousNDays(i).showDate());
if(this.getPreviousNDays(i).equalTwoDates(date)){
flag =false;
return i;
}
i++;
}
}
else {
boolean flag=true;int i=1;
i=iStart(date);
while (flag){
//不要把int i=1;放里边
// System.out.println("小!");
if(this.getNextNDays(i).equalTwoDates(date)){
flag =false;
return i;
}
i++;
}
}
}
return 0;
}
private int iStart(DateUtil date) {
//确定i的初始值减少运行时间开销
int i=0;
if(this.year>date.year){
i+=(this.year-date.year-1)*365;
if(this.month>date.month){
i+=(this.month-date.month-1)*28;
return i;
}
else if(this.month<date.month){
i+=(this.month-date.month+11);
return i;
}
return i;
}
else if(this.year==date.year){
if(this.month>date.month){
i+=(this.month-date.month-1)*28;
if(this.day>date.day){
i+=(this.day-date.day-1);
return i;
}
else if(this.day<date.day){
i+=(this.day-date.day+27);
return i;
}
return i;
}
}
else if(this.year==date.year){
if(this.month==date.month){
if(this.day>date.day){
i+=(this.day-date.day-1);
return i;
}
else if(this.day<date.day){
i+=(this.day-date.day+27);
return i;
}
}
return i;
}
else {
// System.out.println("再调用!!!");
return date.iStart(this);
}
return i;
}
public String showDate()//以“year-month-day”格式返回日期值
{
String s ="";
s+= this.year;
s+="-";
s+=this.month;
s+="-";
s+=this.day;
return s;
}
public DateUtil() {
}
public DateUtil(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public DateUtil(DateUtil date) {
this(date.year, date.month, date.day);
}
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year = 0;
int month = 0;
int day = 0;
int choice = input.nextInt();
if (choice == 1) {
// test getNextNDays method
int m = 0;
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
DateUtil date = new DateUtil(year, month, day);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
}
m = input.nextInt();
if (m < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " next " + m + " days is:");
System.out.println(date.getNextNDays(m).showDate());
} else if (choice == 2) {
// test getPreviousNDays method
int n = 0;
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
DateUtil date = new DateUtil(year, month, day);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
}
n = input.nextInt();
if (n < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.print(
date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " previous " + n + " days is:");
System.out.println(date.getPreviousNDays(n).showDate());
} else if (choice == 3) {
//test getDaysofDates method
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next());
int anotherYear = Integer.parseInt(input.next());
int anotherMonth = Integer.parseInt(input.next());
int anotherDay = Integer.parseInt(input.next());
DateUtil fromDate = new DateUtil(year, month, day);
DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay);
if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {
System.out.println("The days between " + fromDate.showDate() +
" and " + toDate.showDate() + " are:"
+ fromDate.getDaysofDates(toDate));
} else {
System.out.println("Wrong Format");
System.exit(0);
}
}
else{
System.out.println("Wrong Format");
System.exit(0);
}
}
}
文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99
文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效
文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是
文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件
文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件
文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码
文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware
文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停
文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待
文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析
文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code
文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象