date验证失败

zpqajqem  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(274)

这个问题在这里已经有答案了

如果语句给出的条件始终为真(4个答案)
5个月前关门了。
我对java编程完全陌生,我正在尝试创建一个JavaFX项目。我遵循了有关日期验证方法的教程,但似乎失败了。在这一部分中,我必须列出用户在文本字段中插入的对象。包括日期,但必须有效。
在下面这段代码中,我需要验证的对象是datep。我创建了一个方法,在这个方法中,如果字符串有效,它应该将我的标志设置为true并返回它。在创建列表之前,我插入了一个if语句来检查我的标志是否设置为true,这意味着日期是根据格式验证的。当我运行它时,它会创建列表,即使日期无效。我是否将if语句放在错误的部分?因为我觉得这个方法很好。

@Override
public void handle(MouseEvent event) {
    if (event.getSource() == NewrentBtn) {

    String vehiclen =OximaTxT.getText();
    String clientn = ClientTxT.getText();
    String store = StoreTxT.getText();
    String storer = StorerTxT.getText();
    String timerp = TimeTxT.getText();
    String timer = TimerTxT.getText();
    String datep = DateTxT.getText(); // <-------------
    String dater = DaterTxT.getText();
    Integer sum = Integer.parseInt(SumTxT.getText());    
    if(flag = true) { // <------------
        createRental(id, vehiclen, store, datep, timerp, clientn, storer, dater, timer, sum);
        clearTextFields();
    }
}

public boolean Checkdate(String datep) { // <-------------

    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    Date BOD = null;
    df.setLenient(false);

    try
    {
        BOD = df.parse(datep); // <----------------
        flag = true;
    }
    catch(Exception e)
    {
        flag = false;
    }
    return flag;
}

public void createRental(int id,String vehiclen,String store,String datep,String timerp,String clientn,String storer,String dater,String timer,int sum ) {
    Rental m = new Rental(id,vehiclen,store,datep,timerp,clientn,storer,dater,timer,sum);
    RentalList.add(m);
    rentalTableView.getItems().add(m);

}
axzmvihb

axzmvihb1#

从您试图实现的目标来看,我建议您修改代码。
首先让我向您解释我发现的两个问题:第一个问题是您缺少对日期的验证方法的调用,即对 CheckDate(datep) 当您接收到文本输入并存储flag变量时,或者看起来我们没有完整的代码(这是可以的);第二,你错过了一个 =if(flag = true) ,应该是 if(flag == true) 下面是完整的代码:

@Override
public void handle(MouseEvent event) {
    if (event.getSource() == NewrentBtn) {

        String vehiclen =OximaTxT.getText();
        String clientn = ClientTxT.getText();
        String store = StoreTxT.getText();
        String storer = StorerTxT.getText();
        String timerp = TimeTxT.getText();
        String timer = TimerTxT.getText();
        String dater = DaterTxT.getText();
        Integer sum = Integer.parseInt(SumTxT.getText());
        String datep = DateTxT.getText();

        boolean flag = Checkdate(datep);
        if(flag == true) {
            createRental(id,vehiclen,store,datep,timerp,clientn,storer,dater,timer,sum);
            clearTextFields();
        }
    }
}

通过这种方式,您可以验证日期的格式是否正确,如果符合您的方案,则继续此过程。
最后,由于您是java编程新手,我有三条建议:
对于所有的方法,第一个字母都应该是小写的 public boolean checkDate() 这样您就可以区分方法和类,它们总是以大写字母开头 public class Product . 唯一的例外是类的构造函数。
你不应该把这些东西混在一起 graphical interface 逻辑,和 logical processing 逻辑。这是:您应该将处理部分放在一个包中,将图形组件放在另一个包中,并通过创建 processing logicgraphical interface .
用户输入验证应该直接在handler方法中使用try-catch子句进行,如下所示。
在这里:

public void handle(MouseEvent event) {
    if (event.getSource() == NewrentBtn) {

        String vehiclen =OximaTxT.getText();
        String clientn = ClientTxT.getText();
        String store = StoreTxT.getText();
        String storer = StorerTxT.getText();
        String timerp = TimeTxT.getText();
        String timer = TimerTxT.getText();
        String dater = DaterTxT.getText();
        Integer sum = Integer.parseInt(SumTxT.getText());
        try {
            String datep = DateTxT.getText();
            SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
            df.parse(date);
            createRental(id,vehiclen,store,datep,timerp,clientn,storer,dater,timer,sum);
            clearTextFields();
        } catch (ParseException e) {
            /* Here you handle what happens when if fails, you can create a JDialog to show
            the error or create an alert, whatever you need */
            e.printStackTrace();
        }
    }
}

瞧,一个更干净的版本

相关问题