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

时间:2010-01-02 21:45:51

标签: java integer conditional-operator

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

if(10 < x < 20)

而不是它,你必须做

if(10<x && x<20)

这似乎有点开销。

10 个答案:

答案 0 :(得分:21)

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

<expr> ::= <expr> <rel-op> <expr> |
           ... |
           <expr> <rel-op> <expr> <rel-op> <expr>

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

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

答案 1 :(得分:10)

这只是语法。 '&LT;'是一个二进制操作,大多数语言都不会使它传递。他们本可以像你说的那样做,但是后来有人会问为什么你不能在trinary做其他的操作。 “if(12&lt; x!= 5)”?

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

答案 2 :(得分:9)

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

答案 3 :(得分:8)

你可以自己制作

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

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

答案 4 :(得分:7)

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

答案 5 :(得分:6)

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

答案 6 :(得分:4)

你是人,因此你明白术语“10&lt; x&lt; 20”的含义。 计算机没有这种直觉,因此它将其读作: “(10

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

(10&lt; x)=&gt; TRUE

“TRUE&lt; 20”=&gt; ???

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

10&lt; x =&gt; 0(值为假)

0&lt; 20 =&gt;非0号(真)

因此“10&lt; 5&lt; 20”将返回True! :S

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

简化:

a = 10; b = 15; c = 20

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

检查b是否在a和c

之间

答案 9 :(得分:-5)

if (10 < x || x < 20)

对于10到20之间的数字,此语句将评估为true。 这相当于10 < x < 20