intが2つの数値の間にあるかどうかをチェックする

intが数字と数字の間にあるかどうかを調べようとすると、なぜこれができないのでしょうか。

if(10 < x < 20)

そのかわり、次のようにしなければなりません。

if(10<x && x<20)

というのは、ちょっとオーバーヘッドな気がします。

質問へのコメント (9)
ソリューション

1つの問題は、三元関係の構築が深刻なパーサーの問題を引き起こすことです。

 ::=    |
           ... |

典型的なPGSを使用してこれらのプロダクションで文法を表現しようとすると、最初の < rel-op>の時点でシフト削減の競合があることがわかります。 解析では、任意の数の記号を検索して、バイナリ形式と三元形式のどちらを使用したかを決定する前に、2番目の「< rel-op>」があるかどうかを確認する必要があります。 この場合、誤った解析が発生するため、単に競合を無視することはできません。

この文法が致命的に曖昧であると言っているのではありません。 しかし、正しく処理するにはバックトラッキングパーサーが必要だと思います。 そして、それは高速編集が主要なセールスポイントであるプログラミング言語にとって深刻な問題です。

解説 (3)

その構文は単に定義されていないから?その上、x < y は bool として評価されるので、bool < int は何を意味するのでしょうか?さらに、本当に必要ならユーティリティメソッドを書くことができます - isBetween(10,x,20) - 私自身はそうしませんが、ちょっと...。

解説 (7)

あなたは自分で作ることができます。

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)

`10

解説 (0)

COBOLはそれを可能にします(他のいくつかの言語でも同様だと思います)。 Javaは、その構文のほとんどをCから継承しましたが、許可していません。

解説 (7)

あなたは人間なので、「10< x< 20」という用語の意味を理解しています。 コンピュータにはこの直感がないので、次のように解釈されます。 「(10< x)< 20」。

たとえば、x = 15の場合、次のように計算されます。

(10< x)=>正しい。

"TRUE< 20" =>。 ???

Cプログラミングでは、True \ False値がないため、状況はさらに悪化します。 x = 5の場合、計算は次のようになります。

10< x => 0(Falseの値)。

0< 20 =>非0番号(真)。

したがって、「10

解説 (7)

なぜなら、`

解説 (0)

簡略化:


a = 10; b = 15; c = 20

public static boolean check(int a, int b, int c) {
    return a
解説 (1)

if(10< x | x< 20)

このステートメントは、10〜20の数値に当てはまります。 これは `10

解説 (3)