PTA:原来这TM就是惊喜啊

翻译翻译,什么是TMD惊喜
翻译翻译
。。。。
惊喜么
惊喜就是拿空格的阅读性换文件的12KB提交大小
233333333

在这里插入图片描述

比较规整版代码,但是PTA无法提交,原因:文件大小超过12KB限制,但是后面证实,代码正确

DateUtil类

package PTA.Firstquestion;
public class DateUtil {
    private int year;
    private int month;
    private int day;
    public DateUtil(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public boolean checkInputValidity(){
        boolean judgeOfSafe = true;
        if(year > 2020 || year < 1820 || month < 1 || month > 12 || day < 1 || day > 31) {
            judgeOfSafe = false;
        }
        else{
            if(isThirtyDaysOfMonth(month)){
                if(day>=31){
                    judgeOfSafe = false;
                }
            }
            if(month == 2){
                if(isLeapYear(year)){
                    if(day>29){
                        judgeOfSafe = false;
                    }
                }
                else{
                    if(day>28){
                        judgeOfSafe = false;
                    }
                }
            }
        }
        return  judgeOfSafe;
    }
    public boolean isLeapYear(int year){
        if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
            return true;
        }
        else{
            return false;
        }
    }
    public boolean isThirtyDaysOfMonth(int month){
        if(month == 4 || month == 6 || month ==9 || month == 11){
            return true;
        }
        else{
            return false;
        }
    }
    public boolean isThirstyPlusOfMonth(int month) {
        if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
            return true;
        }
        else{
            return false;
        }
    }
    public int getDisOfThisMonthLastDay(int year,int month,int day){
        int disOfThisMonthLastDay = 0;
        if(isThirtyDaysOfMonth(month)){
            disOfThisMonthLastDay = 30 - day;
        }
        if(isThirstyPlusOfMonth(month)) {
            disOfThisMonthLastDay = 31 - day;
        }
        if(month == 2) {
            if(isLeapYear(year)) {
                disOfThisMonthLastDay = 29 - day;
            }
            else{
                disOfThisMonthLastDay = 28 - day;
            }
        }
        return disOfThisMonthLastDay;
    }
    public int getDisOfThisMonthFirstDay(int year,int month,int day){
        return day;
    }
    public int getDistOfThisYearLastDay(int year,int month,int day) {
        int disOfThisYearLastDay = 365;
        if(isLeapYear(year)) {
            disOfThisYearLastDay = 366;
        }
        int xOfDis = getDisOfThisYearFirstDay(year,month,day);
        disOfThisYearLastDay -= xOfDis;
        return disOfThisYearLastDay;
    }
    public int getDisOfThisYearFirstDay(int year,int month,int day){
        int xOfDis = day;
        for(int i = 1; i < month; i++) {
            if(isThirtyDaysOfMonth(i)) {
                xOfDis += 30;
            }
            if(isThirstyPlusOfMonth(i)) {
                xOfDis += 31;
            }
            if(i == 2) {
                if(isLeapYear(year)) {
                    xOfDis += 29;
                } else {
                    xOfDis += 28;
                }
            }
        }
        return xOfDis;
    }
    public int getDayOfThisMonth(int year,int month){
        if(month == 2){
            if(isLeapYear(year)){
                return 29;
            }
            else{
                return 28;
            }
        }
        else
        {
            if(isThirtyDaysOfMonth(month)) {
                return 30;
            } else if(isThirstyPlusOfMonth(month)) {
                return 31;
            }
        }
        return 0;
    }
    public DateUtil getNextNDays(int n){
        int disOfThisMonthLastDay = getDisOfThisMonthLastDay(year,month,day);
        int disOfThisYearLastDay = getDistOfThisYearLastDay(year,month,day);
        if(n <= disOfThisMonthLastDay) {
            day += n;
            return new DateUtil(year,month,day);
        }
        else{
            if(n <= disOfThisYearLastDay) {
                while(n <= disOfThisYearLastDay) {
                    n -= disOfThisMonthLastDay;
                    month++;
                    day = 0;
                    disOfThisMonthLastDay = getDisOfThisMonthLastDay(year, month, day);
                    if(n <= disOfThisMonthLastDay) {
                        day = n;
                        break;
                    }
                }
                return new DateUtil(year,month,day);
            }
            else{
                while(n > disOfThisYearLastDay){
                    n -= disOfThisYearLastDay;
                    year++;
                    month = 1;
                    day = 0;
                    disOfThisYearLastDay = getDistOfThisYearLastDay(year,month,day);
                    if(n <= disOfThisYearLastDay){
                        disOfThisMonthLastDay = getDisOfThisMonthLastDay(year,month,day);
                        while(n <= disOfThisYearLastDay) {
                            n -= disOfThisMonthLastDay;
                            month++;
                            day = 0;
                            disOfThisMonthLastDay = getDisOfThisMonthLastDay(year, month, day);
                            if(n <= disOfThisMonthLastDay) {
                                day = n;
                                break;
                            }
                        }
                        break;
                    }
                }
                return new DateUtil(year,month,day);
            }
        }
    }
    public DateUtil getPreviousNDays(int n){
        int disOfThisMonthFirstDay = getDisOfThisMonthFirstDay(year,month,day);
        if(n <= disOfThisMonthFirstDay) {
            day -= n;
            return new DateUtil(year,month,day);
        }
        else if(n > disOfThisMonthFirstDay) {
            int disOfThisYearFirstDay = getDisOfThisYearFirstDay(year,month,day);
            if(n <= disOfThisYearFirstDay) {
                while(n <= disOfThisYearFirstDay) {
                    n -= disOfThisMonthFirstDay;
                    month--;
                    day = getDayOfThisMonth(year, month);
                    disOfThisMonthFirstDay = getDisOfThisMonthFirstDay(year, month, day);
                    if(n <= disOfThisMonthFirstDay) {
                        day -= n;
                        break;
                    }
                }
                return new DateUtil(year,month,day);
            }
            else
            if(n > disOfThisYearFirstDay) {
                while(n > disOfThisYearFirstDay) {
                    n -= disOfThisYearFirstDay;
                    year--;
                    month = 12;
                    day = getDayOfThisMonth(year,month);
                    disOfThisYearFirstDay = getDisOfThisYearFirstDay(year,month,day);
                    if(n <= disOfThisYearFirstDay) {
                        while(n <= disOfThisYearFirstDay) {
                            disOfThisMonthFirstDay = getDisOfThisMonthFirstDay(year,month,day);
                            if(n <= disOfThisMonthFirstDay) {
                                day -= n;
                                break;
                            }
                            else {
                                n -= disOfThisMonthFirstDay;
                                month--;
                                day = getDayOfThisMonth(year,month);
                                disOfThisYearFirstDay = getDisOfThisYearFirstDay(year,month,day);
                            }
                        }
                        break;
                    }
                }
                return new DateUtil(year,month,day);
            }
        }
        return new DateUtil(year,month,day);
    }
    public boolean compareDates(DateUtil date){
        boolean judge = true;
        if(date.getYear() > year){
            judge = true;
        }
        if(date.getYear()==year){
            if(date.getMonth()>month){
                judge = true;
            }
            if(date.getMonth()<month){
                judge = false;
            }
            if(date.getMonth()==month){
                if(date.getDay()>day){
                    judge = true;
                }
                if(date.getDay()<day){
                    judge = false;
                }
            }
        }
        if(date.getYear() < year){
            judge = false;
        }
        return judge;
    }
    public boolean equalTwoDates(DateUtil date){
        if(date.getYear() == year && date.getMonth() == month && date.getDay() == day){
            return true;
        }
        else{
            return false;
        }
    }
    public int getDaysofDates(DateUtil date) {
        if(equalTwoDates(date)){
            return 0;
        }
        else{
            if(year == date.getYear()) {
                int dis = getDisOfThisYearFirstDay(date.getYear(), date.getMonth(), date.getDay())
                        - getDisOfThisYearFirstDay(year, month, day);
                if(compareDates(date)) {
                    return dis;
                }
                else{
                    return -dis;
                }
            }
            else{
                if(compareDates(date)){
                    int dis = getDistOfThisYearLastDay(year,month,day);
                    while(this.year<date.getYear()){
                        year++;
                        month = 1;
                        day = 0;
                        if(year == date.getYear()){
                            dis += getDisOfThisYearFirstDay(date.getYear(),date.getMonth(),date.getDay());
                            break;
                        }
                        else{
                            dis += getDistOfThisYearLastDay(year,month,day);
                        }
                    }
                    return dis;
                }
                else{
                    int dis = getDisOfThisYearFirstDay(year,month,day);
                    while(year>date.getYear()){
                        year--;
                        month = 12;
                        day = 31;
                        if(year == date.getYear()){
                            dis += getDistOfThisYearLastDay(date.getYear(),date.getMonth(),date.getDay());
                            break;
                        }
                        else{
                            dis += getDistOfThisYearLastDay(year,month,day);
                        }
                    }
                    return dis;
                }
            }
        }
    }
    public String showDate(){
        return year + "-" + month + "-" + day;
    }
    public int  getYear() {
        return year;
    }
    public int getMonth() {
        return month;
    }
    public int getDay() {
        return day;
    }
}

Main类

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);
        }        
    }
}

改动后的代码:把能删减的空格都删减,让开头代码完全丧失阅读性,提交成功

DateUtil类

package PTA.Firstquestion;
public class DateUtil {
    private int year;
    private int month;
    private int day;
    public DateUtil(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}
    public boolean checkInputValidity(){boolean judgeOfSafe = true;
        if(year > 2020 || year < 1820 || month < 1 || month > 12 || day < 1 || day > 31) {judgeOfSafe = false;} else{if(isThirtyDaysOfMonth(month)){if(day>=31){judgeOfSafe = false;}}
            if(month == 2){if(isLeapYear(year)){if(day>29){judgeOfSafe = false;}} else{if(day>28){judgeOfSafe = false;}}}}return  judgeOfSafe;}
    public boolean isLeapYear(int year){if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {return true;} else{return false;}}
    public boolean isThirtyDaysOfMonth(int month){if(month == 4 || month == 6 || month ==9 || month == 11){return true;} else{return false;}}
    public boolean isThirstyPlusOfMonth(int month) {if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {return true;} else{return false;}}
    public int getDisOfThisMonthLastDay(int year,int month,int day){
        int disOfThisMonthLastDay = 0;if(isThirtyDaysOfMonth(month)){disOfThisMonthLastDay = 30 - day;}if(isThirstyPlusOfMonth(month)) {disOfThisMonthLastDay = 31 - day;}
        if(month == 2) {if(isLeapYear(year)) {disOfThisMonthLastDay = 29 - day;} else{disOfThisMonthLastDay = 28 - day;}}return disOfThisMonthLastDay;}
    public int getDisOfThisMonthFirstDay(int year,int month,int day){return day;}
    public int getDistOfThisYearLastDay(int year,int month,int day) {int disOfThisYearLastDay = 365;if(isLeapYear(year)) {disOfThisYearLastDay = 366;}
        int xOfDis = getDisOfThisYearFirstDay(year,month,day);disOfThisYearLastDay -= xOfDis;return disOfThisYearLastDay;}
    public int getDisOfThisYearFirstDay(int year,int month,int day){int xOfDis = day;for(int i = 1; i < month; i++) {if(isThirtyDaysOfMonth(i)) {xOfDis += 30;}
        if(isThirstyPlusOfMonth(i)) {xOfDis += 31;}if(i == 2) {if(isLeapYear(year)) {xOfDis += 29;} else {xOfDis += 28;}}}return xOfDis;}
    public int getDayOfThisMonth(int year,int month){
        if(month == 2){
            if(isLeapYear(year)){
                return 29;
            }
            else{
                return 28;
            }
        }
        else
        {
            if(isThirtyDaysOfMonth(month)) {
                return 30;
            } else if(isThirstyPlusOfMonth(month)) {
                return 31;
            }
        }
        return 0;
    }
    public DateUtil getNextNDays(int n){
        int disOfThisMonthLastDay = getDisOfThisMonthLastDay(year,month,day);
        int disOfThisYearLastDay = getDistOfThisYearLastDay(year,month,day);
        if(n <= disOfThisMonthLastDay) {
            day += n;
            return new DateUtil(year,month,day);
        }
        else{
            if(n <= disOfThisYearLastDay) {
                while(n <= disOfThisYearLastDay) {
                    n -= disOfThisMonthLastDay;
                    month++;
                    day = 0;
                    disOfThisMonthLastDay = getDisOfThisMonthLastDay(year, month, day);
                    if(n <= disOfThisMonthLastDay) {
                        day = n;
                        break;
                    }
                }
                return new DateUtil(year,month,day);
            }
            else{
                while(n > disOfThisYearLastDay){
                    n -= disOfThisYearLastDay;
                    year++;
                    month = 1;
                    day = 0;
                    disOfThisYearLastDay = getDistOfThisYearLastDay(year,month,day);
                    if(n <= disOfThisYearLastDay){
                        disOfThisMonthLastDay = getDisOfThisMonthLastDay(year,month,day);
                        while(n <= disOfThisYearLastDay) {
                            n -= disOfThisMonthLastDay;
                            month++;
                            day = 0;
                            disOfThisMonthLastDay = getDisOfThisMonthLastDay(year, month, day);
                            if(n <= disOfThisMonthLastDay) {
                                day = n;
                                break;
                            }
                        }
                        break;
                    }
                }
                return new DateUtil(year,month,day);
            }
        }
    }
    public DateUtil getPreviousNDays(int n){
        int disOfThisMonthFirstDay = getDisOfThisMonthFirstDay(year,month,day);
        if(n <= disOfThisMonthFirstDay) {
            day -= n;
            return new DateUtil(year,month,day);
        }
        else if(n > disOfThisMonthFirstDay) {
            int disOfThisYearFirstDay = getDisOfThisYearFirstDay(year,month,day);
            if(n <= disOfThisYearFirstDay) {
                while(n <= disOfThisYearFirstDay) {
                    n -= disOfThisMonthFirstDay;
                    month--;
                    day = getDayOfThisMonth(year, month);
                    disOfThisMonthFirstDay = getDisOfThisMonthFirstDay(year, month, day);
                    if(n <= disOfThisMonthFirstDay) {
                        day -= n;
                        break;
                    }
                }
                return new DateUtil(year,month,day);
            }
            else
            if(n > disOfThisYearFirstDay) {
                while(n > disOfThisYearFirstDay) {
                    n -= disOfThisYearFirstDay;
                    year--;
                    month = 12;
                    day = getDayOfThisMonth(year,month);
                    disOfThisYearFirstDay = getDisOfThisYearFirstDay(year,month,day);
                    if(n <= disOfThisYearFirstDay) {
                        while(n <= disOfThisYearFirstDay) {
                            disOfThisMonthFirstDay = getDisOfThisMonthFirstDay(year,month,day);
                            if(n <= disOfThisMonthFirstDay) {
                                day -= n;
                                break;
                            }
                            else {
                                n -= disOfThisMonthFirstDay;
                                month--;
                                day = getDayOfThisMonth(year,month);
                                disOfThisYearFirstDay = getDisOfThisYearFirstDay(year,month,day);
                            }
                        }
                        break;
                    }
                }
                return new DateUtil(year,month,day);
            }
        }
        return new DateUtil(year,month,day);
    }
    public boolean compareDates(DateUtil date){
        boolean judge = true;
        if(date.getYear() > year){
            judge = true;
        }
        if(date.getYear()==year){
            if(date.getMonth()>month){
                judge = true;
            }
            if(date.getMonth()<month){
                judge = false;
            }
            if(date.getMonth()==month){
                if(date.getDay()>day){
                    judge = true;
                }
                if(date.getDay()<day){
                    judge = false;
                }
            }
        }
        if(date.getYear() < year){
            judge = false;
        }
        return judge;
    }
    public boolean equalTwoDates(DateUtil date){
        if(date.getYear() == year && date.getMonth() == month && date.getDay() == day){
            return true;
        }
        else{
            return false;
        }
    }
    public int getDaysofDates(DateUtil date) {
        if(equalTwoDates(date)){
            return 0;
        }
        else{
            if(year == date.getYear()) {
                int dis = getDisOfThisYearFirstDay(date.getYear(), date.getMonth(), date.getDay())
                        - getDisOfThisYearFirstDay(year, month, day);
                if(compareDates(date)) {
                    return dis;
                }
                else{
                    return -dis;
                }
            }
            else{
                if(compareDates(date)){
                    int dis = getDistOfThisYearLastDay(year,month,day);
                    while(this.year<date.getYear()){
                        year++;
                        month = 1;
                        day = 0;
                        if(year == date.getYear()){
                            dis += getDisOfThisYearFirstDay(date.getYear(),date.getMonth(),date.getDay());
                            break;
                        }
                        else{
                            dis += getDistOfThisYearLastDay(year,month,day);
                        }
                    }
                    return dis;
                }
                else{
                    int dis = getDisOfThisYearFirstDay(year,month,day);
                    while(year>date.getYear()){
                        year--;
                        month = 12;
                        day = 31;
                        if(year == date.getYear()){
                            dis += getDistOfThisYearLastDay(date.getYear(),date.getMonth(),date.getDay());
                            break;
                        }
                        else{
                            dis += getDistOfThisYearLastDay(year,month,day);
                        }
                    }
                    return dis;
                }
            }
        }
    }
    public String showDate(){
        return year + "-" + month + "-" + day;
    }
    public int  getYear() {
        return year;
    }
    public int getMonth() {
        return month;
    }
    public int getDay() {
        return day;
    }
}

Main类

package PTA.Firstquestion;
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) {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) {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) {
            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);
        }
    }
}


posted @ 2021-09-20 23:35  在天边偷看小天使  阅读(28)  评论(0)    收藏  举报  来源