2010-03-11 9 views
13

¿Qué método Java toma un int y devuelve +1 o -1? El criterio para esto es si el int es positivo o negativo. Revisé la documentación pero soy malo al leerla y no puedo encontrarla. Sé que lo he visto en algún lado.¿Qué método Java toma un int y devuelve +1 o -1?

+0

¿Qué hay de 0, es positivo o negativo? – fortran

+0

@fortran: La respuesta 'signum' predominante se encarga de eso también. –

+0

devuelve 0 en 0. – Halo

Respuesta

55
+0

me puede vincular a la documentación relevante – David

+2

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html#signum%28int%29 – Jack

+2

http: // java. sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html#signum%28int%29 – Halo

0

Math.signum(double i)

Devuelve la función signo del argumento; cero si el argumento es cero, 1.0 si el argumento es mayor que cero, -1.0 si el argumento es menor que cero. Casos especiales:

  • Si el argumento es NaN, entonces el resultado es NaN.
  • Si el argumento es cero positivo o cero negativo, entonces el resultado es el mismo que el argumento.

Parámetros:

  • d - el valor de punto flotante cuya signum se va a devolver

devoluciones: La función signo del argumento

Desde: 1,5

5

Math.signum(value) hará el truco, pero ya que devuelve flotante o doble (de acuerdo con el par ameter) tendrá que echarlo:

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

EDIT: acaba de comprobar, de JDK 1.5 también tiene directa:

Integer.signum(value); 
0

Uso Integer.signum(int i), pero si quieres un poco de encargo en línea de código:

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

si quieren 0 también:

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

+0

Eso debería ser 'int ans' para ambos. – defectivehalt

+0

Mierda, tienes razón, editado :) –

+1

No hagas esto, hará que alguien se detenga y piense, eso es lo último que quieres en el medio de analizar algún error. Convertirlo en un método externo o dividirlo en un if (dado que probablemente el número sea solo una entrada a una instrucción if), sería mucho más simple decir (si i <0) else (i> 0) else ... . –

-1

Para la diversión:

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

Estrictamente evaluar a -1 o 1, y el refrigerador (probablemente más eficiente también) que n < 0 ? -1: 1:

(n >> 31) | 1 

En caso de que quiera utilizarla para long también:

(n >> 63) | 1 
Cuestiones relacionadas