首页 > 解决方案 > 如何建立依赖于一个语句的条件

问题描述

所以我得到了这个作业来为一个类建立一个接触器Date,检查数据是否有效,在我的检查中,我应该考虑闰年的可能性。所以我得到了变量IsValidInJan

 boolean IsValidInJan = month != 8 || 
 (year % 4 == 0 && year % 100 != 0 &&  year % 400 == 0);

然后我有一个 if 语句来检查数据是否无效(请注意,如果数据无效,则应该激活 if 语句的主体,而不是相反)

if(year > current_year || (daysByMonth[month] < day && !IsValidInJan)|| day < 0 )

忽略大部分。问题是在括号内(在 if 语句的中间)我想要以下条件逻辑:

如果!IsValidInJan为真,则整个语句为true(仅在括号内)

if !IsValidInJanis false,然后检查是否daysByMonth[month] < day 为真并将其作为结果(仅在括号内)

我不想把它分成更小的if陈述。

我怎样才能实现这样的逻辑?

标签: javaif-statementlogicconditional-statements

解决方案


如果 !IsValidInJan 为真,则整个语句为真(仅在括号内)

如果 !IsValidInJan 为假,则检查 daysByMonth[month] < day 是否为真并将其作为结果(仅在括号内)

您可以使用条件或运算符||来实现这一点。

条件运算符 (||&&) 表现出“短路”行为,这意味着仅在需要时才评估第二个操作数。文档中的更多信息。

所以,你可以把你的表达写成!IsValidInJan || daysByMonth[month] < day

在这里,如果第一个操作数!IsValidInJantrue,则不计算第二个操作数。

如果!IsValidInJanfalse,则仅daysByMonth[month] < day计算 then 并将其结果作为整个表达式的结果传递。

因此,您的if陈述可以写成:

if(year > current_year || (!IsValidInJan || daysByMonth[month] < day) || day < 0)

推荐阅读