intが2つの数値の間にあるかどうかをチェックする
intが数字と数字の間にあるかどうかを調べようとすると、なぜこれができないのでしょうか。
if(10 < x < 20)
そのかわり、次のようにしなければなりません。
if(10<x && x<20)
というのは、ちょっとオーバーヘッドな気がします。
30
10
intが数字と数字の間にあるかどうかを調べようとすると、なぜこれができないのでしょうか。
if(10 < x < 20)
そのかわり、次のようにしなければなりません。
if(10<x && x<20)
というのは、ちょっとオーバーヘッドな気がします。
1つの問題は、三元関係の構築が深刻なパーサーの問題を引き起こすことです。
典型的なPGSを使用してこれらのプロダクションで文法を表現しようとすると、最初の
< rel-op>
の時点でシフト削減の競合があることがわかります。 解析では、任意の数の記号を検索して、バイナリ形式と三元形式のどちらを使用したかを決定する前に、2番目の「< rel-op>」があるかどうかを確認する必要があります。 この場合、誤った解析が発生するため、単に競合を無視することはできません。この文法が致命的に曖昧であると言っているのではありません。 しかし、正しく処理するにはバックトラッキングパーサーが必要だと思います。 そして、それは高速編集が主要なセールスポイントであるプログラミング言語にとって深刻な問題です。
'
その構文は単に定義されていないから?その上、
x < y
は bool として評価されるので、bool < int
は何を意味するのでしょうか?さらに、本当に必要ならユーティリティメソッドを書くことができます -isBetween(10,x,20)
- 私自身はそうしませんが、ちょっと...。あなたは自分で作ることができます。
編集:cがaとbの間にあるかどうかを申し訳ありません。
`10
COBOLはそれを可能にします(他のいくつかの言語でも同様だと思います)。 Javaは、その構文のほとんどをCから継承しましたが、許可していません。
あなたは人間なので、「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
なぜなら、`
簡略化:
if(10< x | x< 20)
。このステートメントは、10〜20の数値に当てはまります。 これは `10