1

有没有一种简单的方法可以做到这一点

if (1 < x && x < 3) { .... }

我想要这样的东西:

if (1 < x < 3) { .... }

我知道上面的代码是错误的,但是......

谢谢

4

6 回答 6

6

不幸的是,你不能在 Java 中做到这一点。但是,您可以MathUtils使用isBetween方法创建一个类,例如 ,如下所示:

public static boolean isBetween(int n, int begin, int end) {
  return n > begin && n < end;
}

然后,您可以使用(假设您import static):

if (isBetween(x, 1, 3)) {
  // ...
}

但这只有在您有许多范围条件时才有用。

于 2009-09-17T11:01:17.530 回答
6

假设你在谈论整数:

if ( x == 2 ) { .... }

Java 有相当多的一点点来自它是一个更好的 C++ - 在 C 或 C++ 中,布尔值和整数之间有一个自动转换,所以在 C++ 中:

int x = 5;

std::cout << std::boolalpha;

std::cout << ( 1 < x < 3 ) << std::endl;
std::cout << ( ( 1 < x ) < 3 ) << std::endl;

将打印两次“真”,( 1 < x )因为 1 和 1 小于 3。Java 专注于通过使布尔和整数类型不可转换来解析两个二元运算符来解决这种歧义,因此您必须将它们与另一个运算符连接;其他语言不会尝试修复 C++,但具有更复杂的解析规则,因此 _ < _ < _ 是一个可以做正确事情的三元运算符。

于 2009-09-17T11:20:40.253 回答
3

不使用内置语言;你需要带着你的第一个答案去。

几个库将允许您执行以下操作:

Range range = new ExclusiveRange(1,3);
if (range.contains(x)) { ... }
于 2009-09-17T11:01:44.317 回答
3

在效率方面,(1 < x && x < 3)你会得到的一样好。要将整数放入范围内,您需要进行两次比较。

如果你想让你的代码更具可读性并且你有很多这样的范围,你可能需要考虑创建一个带有 contains() 函数的 Interval 类。

于 2009-09-17T11:02:46.280 回答
3

就直接 Java 语法而言,您已经获得了最简单的形式。如果您愿意,可以引入一种方法:

public static boolean isBetween(int x, int min, int max) {
    return min < x && x < max;
}

然后调用它:

if (isBetween(x, 1, 3))

但我认为这并没有更清楚 - 这意味着更有可能将论点置于错误的顺序。在另一个答案中建议的Range课程将减轻这种担忧,但代价是增加了更多的混乱......

于 2009-09-17T11:03:08.807 回答
1

Thate 语句 using&&是你能得到的最简单的。Java,以及我所知道的任何其他 C 风格的语言,都支持链式不等式。

于 2009-09-17T11:01:18.687 回答