これを行う簡単な方法はありますか
if (1 < x && x < 3) { .... }
私はこのようなものが欲しい:
if (1 < x < 3) { .... }
上記のコードが間違っていることは知っていますが....
ありがとう
これを行う簡単な方法はありますか
if (1 < x && x < 3) { .... }
私はこのようなものが欲しい:
if (1 < x < 3) { .... }
上記のコードが間違っていることは知っていますが....
ありがとう
残念ながら、Java ではそれができません。MathUtils
ただし、次のように、isBetween
メソッドを使用してクラスを作成できます。
public static boolean isBetween(int n, int begin, int end) {
return n > begin && n < end;
}
次に、次を使用できます(仮定import static
):
if (isBetween(x, 1, 3)) {
// ...
}
ただし、これは範囲条件が多い場合にのみ役立ちます。
あなたが整数について話していると仮定すると:
if ( x == 2 ) { .... }
より優れた C++ であることに由来する Java のかなりの部分があります。C または C++ では、ブール値と整数の間の自動変換があるため、C++ では次のようになります。
int x = 5;
std::cout << std::boolalpha;
std::cout << ( 1 < x < 3 ) << std::endl;
std::cout << ( ( 1 < x ) < 3 ) << std::endl;
( 1 < x )
1 として評価され、1 が 3 未満であるため、「true」を 2 回出力します。Java は、ブール型と整数型を変換不可能にすることで 2 つの二項演算子を解析することで、このあいまいさを修正することに集中しているため、それらを別の演算子と結合する必要があります。他の言語は C++ を修正しようとはしませんが、_ < _ < _ が正しいことを行う三項演算子になるように、より複雑な構文解析規則を持っています。
言語組み込みを使用しない; あなたは最初の答えに行く必要があります。
いくつかのライブラリでは、次のようなことができます。
Range range = new ExclusiveRange(1,3);
if (range.contains(x)) { ... }
効率の面で(1 < x && x < 3)
は、あなたが得るのと同じくらい良いです。整数を範囲に入れるには、2 つの比較を行う必要があります。
コードをより読みやすくしたい場合で、これらの範囲が多数ある場合は、contains() 関数を使用して Interval クラスを作成することを検討してください。
ストレートな Java 構文という点で最も単純な形式が得られました。必要に応じてメソッドを導入できます。
public static boolean isBetween(int x, int min, int max) {
return min < x && x < max;
}
次に、次のように呼び出します。
if (isBetween(x, 1, 3))
しかし、それは実際にはそれほど明確ではないと思います-そして、それは引数を間違った順序で配置する可能性がより高いことを意味します. 別の回答で提案されたRange
クラスはその懸念を軽減しますが、さらに混乱を招くという犠牲を払って...
そのステートメントを使用&&
することは、あなたが得ることができる最も簡単な方法です。Java も、私が知っている他のどの C スタイル言語も、連鎖不等式をサポートしています。