什么Java方法接受一个整数并返回+1或-1?

20

有哪个Java方法接受一个int并返回+1或-1? 这个方法的标准是该int是否为正或负。 我查看了文档,但我不擅长阅读它,找不到它。 我知道我在某个地方看到过它。


0是正数还是负数? - fortran
@Chris 和 @Halo,这就是重点,op想要在任何整数上得到+1或-1,而不是零... - fortran
+1 因为我不知道这个方法的存在,虽然我不确定什么时候会用到它... - Pops
3
你应该意识到,在你读完这份文档、提出问题并等待回答的时间里,你本可以编写一个能够满足你需求的函数,并且去享受午餐了。 - Steven A. Lowe
@Steven,你说得很好。虽然如果我将来再需要它的话,这样做会更快。 - David
显示剩余2条评论
6个回答

63

你能给我提供相关文档的链接吗? - David
1
我不认为有一个版本会在输入0时返回1,还是我必须自己创建呢? - David
下面有人给出了一个实现,我认为它是正确的。你可以按照自己的方式进行修改。 - Halo

6

Math.signum(value)可以解决问题,但由于它返回浮点数或双精度浮点数(根据参数),所以您需要进行强制转换:

int sign = (int)Math.signum(value);

或者:

Integer.signum(value);

1

严格评估为-1或1,并且比n < 0 ? -1: 1更酷(可能更有效):

(n >> 31) | 1

如果您也想将其用于long类型:

(n >> 63) | 1

0

Math.signum(double i)

返回参数的符号函数;如果参数为零,则返回零,如果参数大于零,则返回1.0,如果参数小于零,则返回-1.0。 特殊情况:

  • 如果参数是NaN,则结果为NaN
  • 如果参数是正零或负零,则结果与参数相同。

参数:

  • d - 要返回其符号的浮点值

返回:参数的符号函数

自:1.5


0

使用 Integer.signum(int i),但如果你想要一个自定义的内联代码段:

int ans = i < 0 ? -1 : 1;

如果你也想要0:

int ans = i == 0 ? 0 : (i < 0 ? -1 : 1);


两个都应该是 int ans - defectivehalt
1
不要这样做 - 这会让某人停下来思考 - 这是你在分析错误时最不想看到的事情。将其变成一个外部方法或将其拆分为 if 语句(因为该数字可能只是 if 语句的输入),这样更清晰明了,可以简单地说(if i<0) else if (i > 0) else... - Bill K

-1

只是为了好玩:

return (i > 0) ? 1 : ( (i < 0) ? -1 : 0 );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接