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

보다 우아한 것을 바라고

if (i>0 && i<100)



답변

간격을 추가 할 수 있습니다.)

if (i > 0 && i < 100)


답변

commons lang을 사용하는 사람들을 위해 옵션은 Range 를 사용하는 것 입니다 .

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

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


답변

나는 생각한다

if (0 < i && i < 100)

더 우아합니다. 수학 방정식처럼 보입니다.

특별한 것을 찾고 있다면 다음을 시도해 볼 수 있습니다.

Math.max(0, i) == Math.min(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


답변

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

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

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


답변

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

if (i > 0 && i < 100)

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

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