Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA-无法检查用户输入的日期是否正确_Java_Validation - Fatal编程技术网

JAVA-无法检查用户输入的日期是否正确

JAVA-无法检查用户输入的日期是否正确,java,validation,Java,Validation,我有两个类,Main1和一个date(我自己定义的date类)。我正在尝试获取用户输入的日期、月份和年份,然后尝试使用date类检查这是否是有效的日期。我真的很困惑,不确定这是不是正确的方式 以下是Main1类的代码: public class Main1 { public static void main(String[] args){ int myDay = 0, myMonth = 0, myYear = 0; boolean dataCorrect = fals

我有两个类,Main1和一个date(我自己定义的date类)。我正在尝试获取用户输入的日期、月份和年份,然后尝试使用date类检查这是否是有效的日期。我真的很困惑,不确定这是不是正确的方式

以下是Main1类的代码:

public class Main1 {
public static void main(String[] args){     
    int myDay = 0, myMonth = 0, myYear = 0;
    boolean dataCorrect = false;
    date travelDate; // travelDate will hold the date entered
    do {
        try {
            do {
                myDay = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter the day: "));
                myMonth = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter the month: "));
                myYear = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter the year: "));                   
                travelDate = new date(myDay,myMonth,myYear);                    
            } while (travelDate.checkInputs(travelDate.formDate()) == false); // keeps looping until the date entered is correct                    
            dataCorrect = true;                 
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(null, "Error! Enter a correct date");
        }
    } while (dataCorrect == false); 
    JOptionPane.showMessageDialog(null, myDay + "-" + myMonth + "-" + myYear);
}   
}

这是我自己定义的日期类的代码:

import java.text.SimpleDateFormat;
import java.text.ParseException;

public class date {
private int day;
private int month;
private int year;
private String userTravel;

// Constructor 
public date(int d, int m, int y) {
    setDate(d,m,y);     
}

// Methods
public void setDate(int d, int m, int y) {
    setDay(d);
    setMonth(m);
    setYear(y);
}

public String formDate() {
    userTravel = day + "-" + month + "-" + year;
    return userTravel;
}

public boolean checkInputs(String inDate) {
    if (inDate == null)
      return false;
    //set the format to use as a constructor argument
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");

    if (inDate.trim().length() != dateFormat.toPattern().length())
      return false;

    dateFormat.setLenient(false);

    try {
      //parse the inDate parameter
      dateFormat.parse(inDate.trim());
    }
    catch (ParseException pe) {
      return false;
    }
    return true;
}

public void setDay(int d) {
    day = d;
}

public void setMonth(int m) {
    month = m; 
}

public void setYear(int y) {
    year = y; 
}
我也不确定checkInputs方法的代码是否正确

编辑:我已经删除了下面答案中的IF语句,谢谢。
只是想问一下,我是否可以强制用户始终输入四位数的年份YYYY,或者它将一直循环,直到发生这种情况

您不必根据日期格式模式检查输入日期
字符串
长度:

if (inDate.trim().length() != dateFormat.toPattern().length())
   return false;
例如,输入日期可以是
2-3-2013
,但模式是
dd-MM-yyyy
,因此这两个
字符串的长度将不匹配,从
checkInputs
返回
false
,保持循环。当然,像2013年12月10日这样的日期不会引起无限循环

仅使用
SimpleDataFormat
本身进行解析即可提供所需的必要验证。

此部分中的方法checkInputs失败:

if (inDate.trim().length() != dateFormat.toPattern().length())
  return false;
如果日期或月份整数没有两位数(如1,2,3..9),则inDate的长度将不等于模式长度。例如,日期1-1-2013有8个字符,而模式需要10个字符


我相信,如果删除此条件,代码将按预期工作。

那么,到底出了什么问题?你在期待什么?每当我运行这个,它都会无限循环地问我日期、月份和年份。我期待它来验证一个日期,然后把它输出到屏幕。谢谢,我删除了if语句,现在它似乎起作用了。同时考虑一下……这似乎是一个非常整洁的特性,但是我想对于这个代码,我将在我的错误处理/陷阱特性上进行测试。我想我会保持原样。谢谢,谢谢,现在好像行了。请问,我有没有办法强制用户输入四位数的年份yyyy?没有办法使用JOptionPane输入对话框。您应该使用swing屏蔽输入。