보다 우아한 것을 바라고
if (i>0 && i<100)
보다 우아한 것을 바라고
if (i>0 && i<100)
class RangeChecker<Integer>
거기에서 세부 사항을 채울 수 있다고 확신합니다.
SELECT * FROM aTable WHERE aDate BETWEEN lower AND upper
0 < i < 100
이와 같은 테스트를위한 구문 을 허용합니다 .
답변:
간격을 추가 할 수 있습니다.)
if (i > 0 && i < 100)
0 < i && i < 100
.. 에서 왼쪽에 상수가있는 것은 조금 이상 0 < i
하지만, 전체적으로 0 < ... < 100
.
나는 생각한다
if (0 < i && i < 100)
더 우아합니다. 수학 방정식처럼 보입니다.
특별한 것을 찾고 있다면 다음을 시도해 볼 수 있습니다.
Math.max(0, i) == Math.min(i, 100)
적어도 그것은 라이브러리를 사용합니다.
Math.min(i, 99)
그래? 입력 100
하면 여전히 true를 반환하기 때문입니다. 내 생각 Math.max(0, i) == Math.min(i, 100)
에 대한 작품을 0 < 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(ValueRange.of(90, 100).isValidIntValue(91)) { "Value is in range." }
얼마나 우아하지 않은지는 모르겠지만 표현을 자주 반복한다면 방법에 넣어 두는 것이 좋습니다.
class MathUtil
{
public static boolean betweenExclusive(int x, int min, int max)
{
return x>min && x<max;
}
}
배타적 비교와 포괄적 비교를 혼합하는 경우 특히 그렇습니다. 메서드 이름은 <=를 사용해야 할 때 <사용과 같은 오타를 방지하는 데 도움이 될 수 있습니다. 이 방법은 또한 min <max 등을 보장 할 수 있습니다.
boolean accepted = MathUtil.betweenExclusive(min,max,x);
주문을 넣고 엉망으로 만들기 전까지는 좋은 생각 입니다. :(
Integer
클래스 에서 직접 정의 된 메소드라면 더 좋을 것 입니다. 그렇게 할 때 혼동이 없습니다. myNum.isBetween(min, max)
그러나 제네릭 클래스이므로 사용하면 멋진 코드가 생성되지 않습니다. 다음과 같이 입력해야합니다.
if (new Range<Integer>(0, 100).contains(i))
또는 (먼저 구현하면 다소 더 좋습니다) :
class IntRange extends Range<Integer>
....
if (new IntRange(0,100).contains(i))
의미 상 둘 다 Java가 기본적으로 제공하는 것보다 IMHO가 더 좋지만 메모리 오버 헤드, 성능 저하 및 전체적으로 더 많은 입력이 그만한 가치가 있습니다. 개인적으로 mdma의 접근 방식이 더 좋습니다.
if ( 0 < i && i < 100)
if ( 'a' <= c && c <= 'z' )
if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
Character.isLetter(c)
그것이 정수가 범위에 있는지 확인하는 방법입니다. 하한보다 큼, 상한보다 작습니다. 빼기로 영리 해 지려고 노력하는 것은 당신이 원하는 것을하지 못할 것입니다.
Range<Long> timeRange = Range.create(model.getFrom(), model.getTo());
if(timeRange.contains(systemtime)){
Toast.makeText(context, "green!!", Toast.LENGTH_SHORT).show();
}
Google의 Java Library Guava도 Range 를 구현합니다 .
import com.google.common.collect.Range;
Range<Integer> open = Range.open(1, 5);
System.out.println(open.contains(1)); // false
System.out.println(open.contains(3)); // true
System.out.println(open.contains(5)); // false
Range<Integer> closed = Range.closed(1, 5);
System.out.println(closed.contains(1)); // true
System.out.println(closed.contains(3)); // true
System.out.println(closed.contains(5)); // true
Range<Integer> openClosed = Range.openClosed(1, 5);
System.out.println(openClosed.contains(1)); // false
System.out.println(openClosed.contains(3)); // true
System.out.println(openClosed.contains(5)); // true