1. 概述
在Java中,当我们处理Integer
、Long
、Float
和Double
这样的类型时,经常需要检查数字是正数还是负数。这是基础且常见的数值操作。
在这篇快速教程中,我们将讨论如何检查给定的数字是否为正数、负数或零。
2. 问题介绍
检查一个数是否为正数或负数是一个相当直接的问题。但在我们开始查看实现方式之前,先理解一下正数和负数的定义。
对于一个实数 n,如果 n 大于零,它就是正数;如果 n 小于零,它就是负数。然而,我们还有一个特殊情况:零。零既不是正数也不是负数。
因此,我们可以创建一个枚举来涵盖这三种可能性:
enum Result {
POSITIVE, NEGATIVE, ZERO
}
在这篇教程中,我们将探讨两种不同的方法来检查数字是否为正数、负数或零。为了简化,我们将使用单元测试断言来验证结果。
接下来,让我们看看它们是如何工作的。
3. 使用 <
和 >
运算符
根据定义,一个数字是正数还是负数取决于与零的比较结果。因此,我们可以使用Java的“大于(>)”和“小于(<)”运算符来解决这个问题。
接下来,以Integer
类型为例,创建一个进行检查的方法:
static Result byOperator(Integer integer) {
if (integer > 0) {
return POSITIVE;
} else if (integer < 0) {
return NEGATIVE;
}
return ZERO;
}
上述代码自我解释。根据与零的比较结果,我们确定结果是正数、负数还是零。
现在,让我们创建一个测试来验证我们的方法:
assertEquals(POSITIVE, PositiveOrNegative.byOperator(42));
assertEquals(ZERO, PositiveOrNegative.byOperator(0));
assertEquals(NEGATIVE, PositiveOrNegative.byOperator(-700));
不出所料,当执行测试时,它会通过。
当然,如果我们能够将Integer
参数改为Long
、Float
或Double
,同样的逻辑仍然适用。
4. 使用 signum()
方法
我们已经了解了如何使用 <
和 >
运算符检查数字的正负。另一种选择是使用signum()
方法获取给定数字的符号。
对于Integer
和Long
类型的数字,我们可以调用Integer.signum()
和Long.signum()
方法。
signum(n)
方法在n为负数、零或正数时返回-1
、0
和1
。
让我们以Integer
为例,创建一个检查方法:
static Result bySignum(Integer integer) {
int result = Integer.signum(integer);
if (result == 1) {
return Result.POSITIVE;
} else if (result == -1) {
return Result.NEGATIVE;
}
return Result.ZERO;
}
下面的测试验证我们的方法按预期工作:
assertEquals(POSITIVE, PositiveOrNegative.bySignum(42));
assertEquals(ZERO, PositiveOrNegative.bySignum(0));
assertEquals(NEGATIVE, PositiveOrNegative.bySignum(-700));
与Integer
和Long
不同,Float
和Double
类没有signum()
方法。但是,**Math.signum()
方法接受Float
和Double
类型的数字作为参数**,例如:
static Result bySignum(Float floatNumber) {
float result = Math.signum(floatNumber);
if (result.compareTo(1.0f) == 0) {
return Result.POSITIVE;
} else if (result.compareTo(-1.0f) == 0) {
return Result.NEGATIVE;
}
return Result.ZERO;
}
最后,我们创建一个测试来验证方法能否检查浮点数的正负:
assertEquals(POSITIVE, PositiveOrNegative.bySignum(4.2f));
assertEquals(ZERO, PositiveOrNegative.bySignum(0f));
assertEquals(NEGATIVE, PositiveOrNegative.bySignum(-7.7f));
运行测试后,它会通过。
5. 总结
在这篇文章中,我们学习了两种判断给定数字是正数、负数还是零的方法。
如往常一样,这里展示的所有代码片段都在GitHub上可用。