gpt4 book ai didi

java - 计算表达式 1 <= month <= 12

转载 作者:搜寻专家 更新时间:2023-11-01 01:06:05 24 4
gpt4 key购买 nike

我正在尝试计算表达式 (1 <= month <= 12)在 if 条件下。

这条语句在 javascript 中似乎有效,但在 Java 中无效。

在 Java 中,

int month = 0;
boolean flag = (1 <= month <= 12);

它抛出以下错误:

The operator <= is undefined for the argument type(s) boolean, int

在 JavaScript 中,

var month = 0;
console.log('Expression evaluates to: ', (1 <= month <= 12));

It always returns true no matter what the value of month is.

谁能解释一下:

  • 它是否是一个有效的表达式?
  • 为什么它总是屈服于true在 javascript 中?
  • 为什么 java 将其视为无效表达式?

我也知道我可以让它以这种方式工作 (1 <= month && month <= 12) .所以,不是在寻找解决方案,而是在寻找解释。

谢谢。如果我的问题不清楚,也请告诉我。

最佳答案

<=是非关联的,所以你不能重复使用它。您可以指定它:

1 <= month && month <= 12

原因是JavaScript 解析器 解析1 <= month <= 12作为:

(1 <= month) <= 12

这是 JavaScript 语法的结果,他们本可以用其他方式定义它,但这会使事情复杂化一些。大多数语法将表达式定义为:

expr -> [0-9]+
expr -> identifier
expr -> expr '<=' expr

(使用 LALR)解析器。

Java 使用以下(近似)语法:

expr -> numExpr '<=' numExpr
expr -> numExpr
numExpr -> identifier
numExpr -> [0-9]+
(...and so on...)

因此在 Java 中甚至不可能解析这样的表达式(除非您执行强制转换使其再次成为 numExp)。


对于JavaScript部分,为什么总是返回true ?

现在(1 <= month)是一个 boolean 值(true/1 或 false/0 ),并且该值不能(合理地)与 12 进行比较( 01 总是小于或等于 12 )。只有非常有限的编程语言支持此功能。

关于java - 计算表达式 1 <= month <= 12,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29415399/

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