结果未显示,日期验证

时间:2014-01-02 11:30:22

标签: java class validation date boolean

知道我的代码为什么不显示结果?也许我搞砸了一些东西,顺便说一下。

该计划的目标是查看主类提供的日期是否有效,它与2月份和闰年等详细信息的具体情况不同,所以非常简单。

这是我的DataRec.java

public class DateRec {
    int month, day, year;
    boolean good;

    public DateRec (){

        month = 1;
        day = 1;
        year = 2008;
        good = true;
    }

    public DateRec (int setMonth, int setDay, int setYear){
        month = setMonth;
        day = setDay;
        year = setYear;
    }

    public void validate (){
        if ((month < 0) || (month > 12)){
            good = false;

            if (year == 0) 
                good = false;

            if ((day < 0) || (day > 31))
            good = false;
        }
    }

    @Override
    public String toString() {
        if (good = true) {
            return String.format("%dd/%dd/%dddd", month, day, year);
        } else {
            return String.format("%dd/%dd/%dddd", month, day, year);
        }
    }
}

这是我的主要课程DataRecTest.java

public class DateRecTest {
    public static void main (String[] args){
        DateRec today = new DateRec(1,2,2014);
        DateRec anyDay = new DateRec();
        DateRec noDay = new DateRec(13,31,2014);
        anyDay.validate();
        today.validate();
        noDay.validate();
        today.toString();
        anyDay.toString();
        noDay.toString();    
    }
}

2 个答案:

答案 0 :(得分:1)

  1. boolean (good)的默认值为false,因此您需要在goodconstructor函数中初始化validate(),即

    good = true; // in constructor or validate function
    
  2. 要查看打印所需的结果。

    //To print in java use System.out.print() or println();
    System.out.println(today.toString());
    //or simply
    System.out.println(today); // println will call today.toString() internally
    

  3. [编辑] 由于您将结果存储在good中,我建议如下:

     public DateRec (int setMonth, int setDay, int setYear){
        month = setMonth;
        day = setDay;
        year = setYear;
        good = true;
        validate();
     }
    

    现在您不需要每次都致电validate();只需检查good

    的值

答案 1 :(得分:0)

你的validate()是错误的....每当你使用3参数构造函数时,它总是被设置为t false(默认值)。当日期正确时,您不会将其设置为true。

将其更改为,

public void validate (){
if ((month <= 0) || (month > 12) || (year==0) || (day<=0) || (day>31)){
    good = false;
}
else
{
 good=true;
}