希望得到更优雅的解决方案
if (i>0 && i<100)
你可以添加间距 ;)
if (i > 0 && i < 100)
0 < i && i < 100
。在 0 < i
中将常量放在左侧有点奇怪,但我认为为了整个表达式看起来最像 0 < ... < 100
,这样做是值得的。 - Joshua Taylor对于使用commons lang的人来说,一个选项是使用Range:
Range<Integer> myRange = Range.between(100, 500);
if (myRange.contains(200)){
// do something
}
if (0 < i && i < 100)
更加优雅。看起来像数学方程。
如果您正在寻找特别的东西,可以尝试:
Math.max(0, i) == Math.min(i, 100)
至少它使用了库。
Math.min(i, 99)
吗?因为如果我输入100
它仍然会返回true。我认为当0 < i <= 100
时,Math.max(0, i) == Math.min(i, 100)
可行。 - Irshui = 0
,那么 Math.max(0, i) == Math.min(i, 99)
仍然会计算为 0 == 0
。 - domidsValueRange range = java.time.temporal.ValueRange.of(minValue, maxValue);
range.isValidIntValue(x);
minValue <= x <= maxValue
,即在范围内,则返回true
x < minValue
或者 x > maxValue
,即超出范围,则返回false
使用方法如下所示:
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(包括13)到19(包括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;
}
}
true
因为19在范围内
true
因为15在范围内
false
因为所有三个值都超出了范围
if(ValueRange.of(90, 100).isValidIntValue(91)) { "值在范围内。" }
- Yash我认为这是一种优雅的比较范围的方法。但是,这种方法会导致您编写额外的单元测试来满足所有&&
情况。
因此,您可以使用以下任何一种方法来避免编写额外的单元测试。
使用Java 8 Streams:
if(IntStream.rangeClosed(0,100).boxed().collect(Collectors.toList()).contains(i))
使用 Math 类:
if(Math.max(0, i) == Math.min(i, 100))
个人建议采用第二种方法,因为它不会创建与要检查的范围大小相等的数组。
我认为这很优雅,但如果您经常重复使用表达式,则将其放入方法中是一个好主意,例如:
class MathUtil
{
public static boolean betweenExclusive(int x, int min, int max)
{
return x>min && x<max;
}
}
如果你混合使用包含和不包含的比较,这一点尤其重要。方法名称可以帮助避免拼写错误,例如使用 < 时应该使用 <=。该方法还可以确保 min < max 等。
accepted=MathUtil.betweenExclusive(min,max,x)
搞错顺序,否则这是一个好主意。 :( - corsiKaInteger
类中直接定义的方法会更好。当你使用myNum.isBetween(min, max)
时,不会有任何混淆。 - buræquete如果您正在寻找比较原创的东西,而不是
if (i > 0 && i < 100)
你可以尝试这个
import static java.lang.Integer.compare;
...
if(compare(i, 0) > compare(i, 100))
谷歌的Java库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
if ( 0 < i && i < 100)
if ( 'a' <= c && c <= 'z' )
if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
。 - Octavia TogamiCharacter.isLetter(c)
- Roland Illig
class RangeChecker<Integer>
,我相信你可以从那里填写详细信息。 - corsiKaSELECT * FROM aTable WHERE aDate BETWEEN lower AND upper
中的BETWEEN,以便进行翻译。 - Simen S0 < i < 100
进行测试。 - Greg Hewgill