よりエレガントなものを望んでいる
if (i>0 && i<100)
間隔を追加できます;)
if (i > 0 && i < 100)
おもう
if (0 < i && i < 100)
よりエレガントです。数学の方程式のように見えます。
あなたが特別な何かを探しているなら、あなたは試すことができます:
Math.max(0, i) == Math.min(i, 100)
少なくともライブラリを使用します。
Commons langを使用する場合、オプションは Range を使用することです。
Range<Integer> myRange = Range.between(100, 500);
if (myRange.contains(200)){
// do something
}
以下も参照してください: Apache commons 3.1 Range <Integer>オブジェクトの構築方法
どのようにエレガントではないのかわかりませんが、表現を頻繁に繰り返す場合は、メソッドに入れることをお勧めします。
class MathUtil
{
public static boolean betweenExclusive(int x, int min, int max)
{
return x>min && x<max;
}
}
これは、排他的比較と包括的比較を混在させる場合に特に当てはまります。メソッド名は、<=を使用する必要があるときに<を使用するなど、タイプミスを回避するのに役立ちます。メソッドは、min <maxなどを保証することもできます。
ただし、汎用クラスであるため、使用してもNiceコードは生成されません。次のように入力する必要があります。
if (new Range<Integer>(0, 100).contains(i))
または(最初に実装する場合は多少良くなります):
class IntRange extends Range<Integer>
....
if (new IntRange(0,100).contains(i))
意味的には、どちらもデフォルトでJavaが提供するものよりも優れていますが、メモリオーバーヘッド、パフォーマンスの低下、および全体的なタイピングの価値は十分にあります。個人的には、 mdmaのアプローチ の方が好きです。
より独創的なものを探しているなら
if (i > 0 && i < 100)
これを試すことができます
import static Java.lang.Integer.compare;
...
if(compare(i, 0) > compare(i, 100))
範囲を比較するための既にエレガントな方法だと思います。ただし、このアプローチでは、すべての&&
ケースを満たすために、追加の単体テストを作成することになります。
そのため、以下のアプローチのいずれかを使用して、余分な単体テストを記述することを回避できます。
Java 8ストリームを使用:
if(IntStream.rangeClosed(0,100).boxed().collect(Collectors.toList()).contains(i))
Mathクラスを使用:
if(Math.max(0, i) == Math.min(i, 100))
個人的には、確認したい範囲に等しいサイズの配列を作成しないため、2番目の方法をお勧めします。
ValueRange range = Java.time.temporal.ValueRange.of(minValue, maxValue);
range.isValidIntValue(x);
minValue <= x <= MaxValue-範囲内であればtrueを返します
x <minValue or x> maxValue-つまりoutofrangeの場合はfalseを返します
以下に示すようにif条件とともに使用します。
int value = 10;
if(ValueRange.of(0, 100).isValidIntValue(value)) {
System.out.println("Value is with in the Range.");
} else {
System.out.println("Value is out of the Range.");
}
hasTeenメソッドで渡された整数値のいずれかが13(包括的)から19(包括的)の範囲内にある場合、以下のプログラムチェック
import Java.time.temporal.ValueRange;
public class TeenNumberChecker {
public static void main(String[] args) {
System.out.println(hasTeen(9, 99, 19));
System.out.println(hasTeen(23, 15, 42));
System.out.println(hasTeen(22, 23, 34));
}
public static boolean hasTeen(int firstNumber, int secondNumber, int thirdNumber) {
ValueRange range = ValueRange.of(13, 19);
System.out.println("*********Int validation Start ***********");
System.out.println(range.isIntValue());
System.out.println(range.isValidIntValue(firstNumber));
System.out.println(range.isValidIntValue(secondNumber));
System.out.println(range.isValidIntValue(thirdNumber));
System.out.println(range.isValidValue(thirdNumber));
System.out.println("**********Int validation End**************");
if (range.isValidIntValue(firstNumber) || range.isValidIntValue(secondNumber) || range.isValidIntValue(thirdNumber)) {
return true;
} else
return false;
}
}
******出力******
19は範囲の一部であるためtrue
15は範囲の一部であるためtrue
3つの値すべてが範囲外に渡されたためfalse
if ( 0 < i && i < 100)
if ( 'a' <= c && c <= 'z' )
if(i <= 0 || i> = 100)
それが動作します。
このコードを使用してください:
if (lowerBound <= val && val < upperBound)
or
if (lowerBound <= val && val <= upperBound)
試してください:
if (i>0 && i<100) {}
少なくとも動作します;)
数値が2の補数形式で保存されていると確信している場合:
return ((x-low) <= (high-low));
より一般的で安全なソリューションは次のとおりです。
return ((x-high)*(x-low) <= 0);
springデータを使用している場合は、SpringのRangeオブジェクトも使用できます。
range = new org.springframework.data.domain.Range(3、8); range.contains(5)はtrueを返します。
Range<Long> timeRange = Range.create(model.getFrom(), model.getTo());
if(timeRange.contains(systemtime)){
Toast.makeText(context, "green!!", Toast.LENGTH_SHORT).show();
}
これは、整数が範囲内にあることを確認する方法です。下限よりも大きく、上限よりも小さい。減算で賢いことをしようとすると、おそらくあなたが望むことを行いません。