1. 概述

在Java中,当我们处理IntegerLongFloatDouble这样的类型时,经常需要检查数字是正数还是负数。这是基础且常见的数值操作。

在这篇快速教程中,我们将讨论如何检查给定的数字是否为正数、负数或零。

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参数改为LongFloatDouble,同样的逻辑仍然适用。

4. 使用 signum() 方法

我们已经了解了如何使用 <> 运算符检查数字的正负。另一种选择是使用signum()方法获取给定数字的符号。

对于IntegerLong类型的数字,我们可以调用Integer.signum()Long.signum()方法。

signum(n)方法在n为负数、零或正数时返回-101

让我们以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));

IntegerLong不同,FloatDouble类没有signum()方法。但是,**Math.signum()方法接受FloatDouble类型的数字作为参数**,例如:

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上可用。