gpt4 book ai didi

java 。限制日期的值

转载 作者:行者123 更新时间:2023-11-30 04:25:59 26 4
gpt4 key购买 nike

对于你们来说,这似乎是一个愚蠢的问题,但我是一个 java 菜鸟,并且仍在尝试掌握整个概念。所以,我基本上有一个简单的剧院管理系统,它允许我向数据库添加组。您可以向每个组添加学生,每个学生都有唯一的学生 ID 和姓名。您还可以将排练日期添加到组中。这两者都存储在单独的链表中。这是我的排练对象:

public Rehearsal(int d, int m, int y) {
day = d;
month = m;
year = y;
}

这是group类中的addRehearsal方法:

public void addRehearsal(int d, int m, int y) {
Rehearsal newrehearsal = new Rehearsal(d, m, y);
if (!RehearsalDates.contains(newrehearsal)) {
RehearsalDates.add(newrehearsal);
}
else
JOptionPane.showMessageDialog(null, "Rehearsal already exists for this group!", "Error", JOptionPane.WARNING_MESSAGE);
}

我的问题是,如何以及在哪里限制可以输入哪些值。这意味着,如果为 int d > 31 或 int m > 12 输入的值,程序会以消息对话框的形式给出错误。这对于年份来说并不是真正必要的,因为允许用户创建排练日期过去以及 future 。

谢谢你们的帮助:)

最佳答案

验证日期比检查每个参数更复杂。例如,使用 (29, 2, 2000) 调用它是无效的(回想一下 2000 年不是闰年),即使所有参数都“在范围内” .

唯一明智的检查方法是尝试从参数中解析日期并捕获异常。有几种方法可以做到这一点,但最简单的是:

public Rehearsal(int d, int m, int y) {
try {
sdf = new SimpleDateFormat("d-M-yyyy");
sdf.setLenient(false);
sdf.parse(d + "-" + m + "-" + y);
} catch (ParseException e) {
// the parameters are not valid
}
// rest of code
}

请注意调用 setLenient() ,这是必需的,否则无效输入将“滚动”到下一个可用的有效日期 - 例如 36-12-2012 将被解析为 05-01-2013

放置此代码的最佳位置是在构造函数中,抛出异常:

public Rehearsal(int d, int m, int y) {
try {
sdf = new SimpleDateFormat("d-M-yyyy");
sdf.setLenient(false);
sdf.parse(d + "-" + m + "-" + y);
} catch (ParseException e) {
// the parameters are not valid
throw new IllegalArgumentException();
}
day = d;
month = m;
year = y;
}

无论它在哪里被调用,你都会发现它。

Rehearsal newrehearsal;
try {
newrehearsal = new Rehearsal(1, 2, 3);
} catch (IllegalArgumentException ex) {
JOptionPane.showMessageDialog(null, "Invalid date input!", "Error", JOptionPane.WARNING_MESSAGE);
return;
}
// rest of method
<小时/>

更好的设计是传递一个 Date 对象,让调用者负责验证输入,并且会减少 throw 和 catch 代码。

关于 java 。限制日期的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15867088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com