보다 우아한 것을 바라고
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))