Development Tip

정수가 주어진 범위에 있는지 확인하는 방법은 무엇입니까?

yourdevel 2020. 11. 25. 21:19
반응형

정수가 주어진 범위에 있는지 확인하는 방법은 무엇입니까?


보다 우아한 것을 바라고

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
}

참조 : 아파치 커먼즈 3.1 Range <Integer> 객체를 생성하는 방법


얼마나 우아하지 않은지는 모르겠지만 표현을 자주 반복한다면 방법에 넣어 두는 것이 좋습니다.

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

배타적 비교와 포괄적 비교를 혼합하는 경우 특히 그렇습니다. 메서드 이름은 <=를 사용해야 할 때 <사용과 같은 오타를 방지하는 데 도움이 될 수 있습니다. 이 방법은 또한 min <max 등을 보장 할 수 있습니다.


이 사람 은 멋진 Range 클래스를 만들었습니다 .

그러나 제네릭 클래스이므로 사용하면 멋진 코드가 생성되지 않습니다. 다음과 같이 입력해야합니다.

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

또는 (먼저 구현하면 다소 더 좋습니다) :

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

의미 론적으로 둘 다 Java가 기본적으로 제공하는 것보다 IMHO가 더 좋지만 메모리 오버 헤드, 성능 저하 및 전체적으로 더 많은 입력은 그만한 가치가 있습니다. 개인적으로 mdma의 접근 방식이 더 좋습니다.


보다 독창적 인 것을 찾고 있다면

if (i > 0 && i < 100)

당신은 이것을 시도 할 수 있습니다

import static java.lang.Integer.compare;
...
if(compare(i, 0) > compare(i, 100))

나는 이미 범위를 비교하는 우아한 방법이라고 생각합니다. 그러나이 방법을 사용하면 모든 &&경우 를 충족하기 위해 추가 단위 테스트를 작성해야 합니다.

따라서 추가 단위 테스트 작성을 피하기 위해 아래 방법 중 하나를 사용할 수 있습니다.

자바 8 스트림 사용 :

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

Math 클래스 사용 :

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

개인적으로 확인하려는 범위와 동일한 크기의 배열을 생성하지 않기 때문에 두 번째 방법을 권장합니다.


ValueRange range = java.time.temporal.ValueRange.of(minValue, maxValue);
range.isValidIntValue(x);

minValue <= x <= MaxValue-즉 범위 내에 있으면 true를 반환합니다.

x <minValue 또는 x> maxValue-즉 범위를 벗어난 경우 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가 범위의 일부이므로 참

15가 범위의 일부이므로 참

세 값이 모두 범위를 벗어 났으므로 false


if ( 0 < i && i < 100)  

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

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

작동합니다.


시험:

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

적어도 작동합니다;)


이 코드를 사용하십시오.

if (lowerBound <= val && val < upperBound)
or
if (lowerBound <= val && val <= upperBound)

That's how you check is an integer is in a range. Greater than the lower bound, less than the upper bound. Trying to be clever with subtraction will likely not do what you want.


If you are confident that numbers are stored in 2's complement form:

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

A more general and safer solution would be:

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

if you are using Spring data you can also use the Range object from Spring.

range = new org.springframework.data.domain.Range(3, 8); range.contains(5) will return true.


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

Another pretentious way to do it:

if (IntStream.rangeClosed(1, 99).anyMatch(x -> x == i)) {
    // ...
}

    val = val < MIN ? MIN : ( val > MAX ? MAX : val);

참고URL : https://stackoverflow.com/questions/5574058/how-to-check-if-an-integer-is-in-a-given-range

반응형