检查int是否在两个数字之间

如果你试图找出int是否在数字之间,为什么不能这样做:

if(10 < x < 20) 

而不是它,你将不得不这样做

 if(10<x && x<20) 

这似乎有点开销。

一个问题是三元关系结构会引入严重的解析器问题:

  ::=    | ... |      

当您尝试使用典型的PGS表达使用这些作品的语法时,您会发现在第一个点处存在shift-reduce冲突。 解析器需要预先查找任意数量的符号,以查看是否存在第二个然后才能决定是否使用了二进制或三元forms。 在这种情况下,您不能简单地忽略冲突,因为这会导致不正确的分析。

我不是说这个语法是致命的歧义。 但我认为你需要一个回溯解析器才能正确处理它。 对于编程语言来说,这是一个严重的问题,快速编译是一个主要的卖点。

因为那个语法根本没有定义? 此外, x < y评估为bool,那么bool < int是什么意思? 这不是真正的开销; 此外,你可以写一个实用工具方法,如果你真的想 - isBetween(10,x,20) - 我不会自己 ,但嘿......

这只是语法。 ‘<'是二进制操作,大多数语言都不会使其传递。 他们本可以像你说的那样做,但是有人会问你为什么不能在trinary中做其他的操作。 “if(12

语法总是在复杂性,表达性和可读性之间进行权衡。 不同的语言设计师有不同的选择 例如,SQL具有“x BETWEEN y AND z”,其中x,y和z可以单独或全部为列,常量或绑定变量。 我很高兴在SQL中使用它,我也很高兴不要担心为什么它不在Java中。

如果允许10 < x < 20 ,则输入10 < x && x < 20的不便与语言复杂性的增加相比是最小的,因此Java语言的设计者决定不支持它。

你可以做自己的

 public static boolean isBetween(int a, int b, int c) { return b > a ? c > a && c < b : c > b && c < a; } 

编辑:抱歉检查c是否在a和b之间

COBOL允许(我相信其他一些语言也可以)。 Java从Cinheritance了大部分语法,但不允许它。

你是人,因此你理解“10

例如,如果x = 15,它将计算:

(10 正确

“TRUE <20”=> ???

在C编程中,它会更糟,因为没有True \ False值。 如果x = 5,则计算结果为:

10 0(值为假)

0 <20 =>非0数(真)

因此“10 <5 <20”将返回True! :S

因为< operator(和大多数其他)是二元运算符(它们有两个参数),而且(true true)不是有效的布尔表达式。

Java语言设计者可以设计语言以允许类似您喜欢的类型的语法,但(我猜)他们认为不值得更复杂的解析规则。

简化:

 a = 10; b = 15; c = 20 public static boolean check(int a, int b, int c) { return a<=b && b<=c; } 

这检查b是否在a和c之间

if (10 < x || x < 20)

对于10到20之间的数字,该陈述将评估为真。这相当于10 < x < 20