基本回报和课堂问题

时间:2011-09-01 17:42:00

标签: java

我是Java的新手,在学习C之后尝试学习它,但语法有些麻烦。这是我教授给我看的一个代码,我基本上可以理解它正在接受的最后一节[public boolean isAfter(Date b)]。 Date b来自哪里,什么是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))
            return 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;
    }

2 个答案:

答案 0 :(得分:2)

compareTo是实现Comparable的所有类都应该实现的方法。该语句可以简单地解释为this.compareTo(b),这意味着如果compareTo的结果在此实例上调用大于1,则此日期更大或位于传入日期之后。查看compareTo接口的Comparable方法的合同以获取更多详细信息。

顺便说一下,我认为你错过了班级中compareTo的定义,看来你必须亲自实现它?

答案 1 :(得分:2)

isAfter是一个实例方法,它接受一个Date参数,该函数在函数范围内的引用为b

如果这是完整的代码,则无效,因为方法compareTo未在任何地方定义。