开发者

Basic returns and class question

I'm new to Java and trying to learn it after having learn C, having some trouble with the syntax. This is a code my professor gave me to look at and I can understand basically what it's doing accept for the last section with [public boolean isAfter(Date b)]. Where did the Date b come from, and what is compareTo?

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Date implements Proj1Constants {

    private static final int[] DAYS = { 0, 31, 29, 31, 30, 31, 30, 31, 31,
            30, 31, 30, 31 };
    private static final int LEAP_YEAR = 366;
    private static final int NON_LEAP_YEAR = 365;

    private final int month; // month (between 1 and 12)
    private final int day; // day (between 1 and DAYS[month])
    private final int year; // year



    /**
     * Constructor: default; returns today's date
     */
    // creates today's date as the date; obtaines it from Java library

    public Date() 

    {
        GregorianCalendar c = new GregorianCalendar();
        month = c.get(Calendar.MONTH)+1; //our month starts from 1
        day = c.get(Calendar.DAY_OF_MONTH);
        year = c.get(Calendar.YEAR);
    }



    /**
     * Constructor: Does bounds-checking to ensure object represents a valid
     * date
     *
     * @param m represents the month between 1 and 12
     * @param d represents the date between 1 and the corresponding number
     * from array DAYS
     * @param y represents the year
     * @exception RuntimeException
     * if the date is invalid
     */
    public Date(int m, int d, int y) 

        {
        if (!isValid(m, d, y))
            throw new RuntimeException("Invalid date");
        month = m;
        day = d;
        year = y;
    }


    /**
     * Constructor: Does bounds-checking to ensure string represents a valid
     * date
     *
     * @param sDate represents a date given in format mm-dd-yyyy
     * @exception RuntimeException if the date is invalid
     */

    public Date(String sDate)

        {
        int m, d, y;
        String[] chopDate = sDate.split("-");
        m = Integer.parseInt(chopDate[ZEROI]);
        d = Integer.parseInt(chopDate[ONEI]);
        y = Integer.parseInt(chopDate[TWOI]);
        if (!isValid(m, d, y))
            throw new RuntimeException("Invalid date");
        month = m;
        day = d;
        year = y;
    }


    /**
     * constructor: creates a date with a given year; fills in valid month and day;
     * as december 31st.
     *
     * @param y represents a date given in year as integer
     */


    public Date(int y) 

        {

        month = 12;
        day = DAYS[12];
        year = y;
    }


    /**
     * create a date with a given month and year; fills in valid day;
     *
     * @param m represents the month between 1 and 12
     * @param y represents the year
     * @exception RuntimeException if the date is invalid
     */

    public Date(int m, int y) 

    {

        if (!isValid(m, DAYS[m], y))
            throw new RuntimeException("Invalid date; correct input");
        month = m;
        day = DAYS[m];
        year = y;
    }


    /**
     * Is the given date valid?
     *
     * @param month, day, and year
     * @return false if month exceeds 12 or is less than 1
     * @return false if day exceeds the corresponding days for a month from
     * array DAYS
     * @return false if the year is not a leap year and has 29 days
     */

    private static boolean isValid(int m, int d, int y) 

    {
        if (m < 1 || m > 12)
            return false;
        if (d < 1 || d > DAYS[m])
            return false;
        if (m == 2 && d == 29 && !isLeapYear(y))
            return false;
        return true;
    }


    /**
     * is y a leap year?
     *
     * @param y
     * represents the year specified
     * @return true if year divisible by 400
     * @return false if year divisible by 100 and not by 400
     */

    private static boolean isLeapYear(int y) 

    {
        if (y % 400 == 0)
            return true;
        if (y % 100 == 0)
            return false;
        return (y % 4 == 0);
    }


    /**
     * is (m, y) a leap month?
     *
     * @param m represents the month specified
     * @param y represents the year specified
     * @return true if it is a leap month
     * @return false otherwise
     */

    private static boolean isLeapMonth(int m, int y) 
    {
        if (isLeapYear(y)) return ((m == 2) ? true : false);
        return false;
    }


    // return the next Date
    /**
     * adds a day and returns a new Date object
     *
     * @return returns a new Date object adding a day
     */

    public Date next() 

    {
        if (isValid(month, day + 1, year))
            ret开发者_运维百科urn new Date(month, day + 1, year);
        else if (isValid(month + 1, 1, year))
            return new Date(month + 1, 1, year);
        else
            return new Date(1, 1, year + 1);
    }


    // is this Date after b?
    /**
     * compares two Date objects
     *
     * @param b Date object
     * @return true if this Date is after Date b
     */

    public boolean isAfter(Date b)

    {
        return compareTo(b) > 0;
    }


isAfter is an instance method that takes on argument, a Date, the reference to which is b in the scope of the function.

If that is the complete code, it is not valid, because the method compareTo is not defined anywhere.


compareTo is the method which all classes which implement Comparable should implement. The statement can be simply interpreted as this.compareTo(b) which means that if the result of compareTo called on this instance greater than 1, then this date is greater or lies after the passed in date. Look into the contract of the compareTo method of the Comparable interface for more details.

BTW, I think you are missing the definition of compareTo in your class and it seems that you have to implement it yourself?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜