web-dev-qa-db-ja.com

整数が指定された範囲内にあるかどうかを確認する方法は?

よりエレガントなものを望んでいる

if (i>0 && i<100) 
60
herpderp

間隔を追加できます;)

if (i > 0 && i < 100) 
165
Jakub Hampl

おもう

if (0 < i && i < 100) 

よりエレガントです。数学の方程式のように見えます。

あなたが特別な何かを探しているなら、あなたは試すことができます:

Math.max(0, i) == Math.min(i, 100)

少なくともライブラリを使用します。

25
Vitaly

Commons langを使用する場合、オプションは Range を使用することです。

Range<Integer> myRange = Range.between(100, 500);
if (myRange.contains(200)){
    // do something
}

以下も参照してください: Apache commons 3.1 Range <Integer>オブジェクトの構築方法

22
beat

どのようにエレガントではないのかわかりませんが、表現を頻繁に繰り返す場合は、メソッドに入れることをお勧めします。

class MathUtil
{
   public static boolean betweenExclusive(int x, int min, int max)
   {
       return x>min && x<max;    
   }
}

これは、排他的比較と包括的比較を混在させる場合に特に当てはまります。メソッド名は、<=を使用する必要があるときに<を使用するなど、タイプミスを回避するのに役立ちます。メソッドは、min <maxなどを保証することもできます。

7
mdma

この男 ニースを作りました 範囲 クラス。

ただし、汎用クラスであるため、使用してもNiceコードは生成されません。次のように入力する必要があります。

if (new Range<Integer>(0, 100).contains(i))

または(最初に実装する場合は多少良くなります):

class IntRange extends Range<Integer>
....
if (new IntRange(0,100).contains(i))

意味的には、どちらもデフォルトでJavaが提供するものよりも優れていますが、メモリオーバーヘッド、パフォーマンスの低下、および全体的なタイピングの価値は十分にあります。個人的には、 mdmaのアプローチ の方が好きです。

4
velis

より独創的なものを探しているなら

if (i > 0 && i < 100)

これを試すことができます

import static Java.lang.Integer.compare;
...
if(compare(i, 0) > compare(i, 100))
4
esin88

範囲を比較するための既にエレガントな方法だと思います。ただし、このアプローチでは、すべての&&ケースを満たすために、追加の単体テストを作成することになります。

そのため、以下のアプローチのいずれかを使用して、余分な単体テストを記述することを回避できます。

Java 8ストリームを使用:

if(IntStream.rangeClosed(0,100).boxed().collect(Collectors.toList()).contains(i))

Mathクラスを使用:

if(Math.max(0, i) == Math.min(i, 100))

個人的には、確認したい範囲に等しいサイズの配列を作成しないため、2番目の方法をお勧めします。

3
Sahil Chhabra
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

3
Arpan Saini
if ( 0 < i && i < 100)  

if ( 'a' <= c && c <= 'z' )
2
irreputable

if(i <= 0 || i> = 100)

それが動作します。

このコードを使用してください:

if (lowerBound <= val && val < upperBound)
or
if (lowerBound <= val && val <= upperBound)
1
Vishal Tathe

試してください:

if (i>0 && i<100) {} 

少なくとも動作します;)

1
Endi

数値が2の補数形式で保存されていると確信している場合:

return  ((x-low) <= (high-low));

より一般的で安全なソリューションは次のとおりです。

return ((x-high)*(x-low) <= 0);
0
Guru

springデータを使用している場合は、SpringのRangeオブジェクトも使用できます。

range = new org.springframework.data.domain.Range(3、8); range.contains(5)はtrueを返します。

0
Maurice
 Range<Long> timeRange = Range.create(model.getFrom(), model.getTo());
    if(timeRange.contains(systemtime)){
        Toast.makeText(context, "green!!", Toast.LENGTH_SHORT).show();
    }
0
VIVEK CHOUDHARY

これは、整数が範囲内にあることを確認する方法です。下限よりも大きく、上限よりも小さい。減算で賢いことをしようとすると、おそらくあなたが望むことを行いません。

0
Borealid