Cuando se llama a la función, usted está desechando su valor de retorno:
half(number);
probablemente la intención de escribir:
number = half(number);
Además, en Java, los argumentos se pasan por valor. Esto significa que, aunque cambie number
dentro de la función, el cambio no se propaga de vuelta a la persona que llama.
Hay varios problemas adicionales:
Problema 1: El cambio sugerido almacenará el resultado en number
, que es una variable entera. Por lo tanto, el resultado de half()
- que es del tipo double
- se truncará a un número entero. Para evitar la pérdida de precisión, debe cambiar number
para que sea una variable de coma flotante o almacenar el resultado en una variable diferente del tipo apropiado.
Problema 2: los siguientes usos división entera:
number = number/2;
El resultado se trunca a un número entero, es decir 5/2
es 2
. Este último se convierte a double
(2.0), que es lo que devuelve la función.
Para corregir, cambiar la función de este modo:
private static double half(int number) {
return number/2.0;
}
P. S. Los números de coma flotante tienen muchas propiedades que pueden ser poco intuitivas. Recomiendo echar un vistazo a What Every Computer Scientist Should Know About Floating-Point Arithmetic.
Usted llama a su método de división, pero no se asigna el resultado de la misma. Pruebe System.out.println ("5 dividido por 2 es:" + medio (número)); pero, por supuesto, mejor es usar variables para mantener el resultado de la operación. – hovanessyan