Java错误与数字

时间:2012-05-31 10:57:40

标签: java

我正在尝试修复以下Java代码,

我无法弄清楚为什么打印输出仍然是5。

public class simpleMath
{
    public static void main(String[] args) 
    {
        int number=5;
        half(number);

        System.out.println("5 divided by 2 is: " + number);

    }

    private static double half(int number) {
         number =  number/2;
         return number;
    }
}

7 个答案:

答案 0 :(得分:17)

因为您没有重新分配返回的值。

int number = 5;
number = half(number);

答案 1 :(得分:9)

当您调用该函数时,您将丢弃其返回值:

half(number);

你可能想写:

number = half(number);

此外,在Java中,参数按值传递。这意味着,即使您在函数内部更改number,更改也不会传播回调用者。

还有几个问题:

问题1:建议的更改会将结果存储在number中,这是一个整数变量。因此,half()的结果 - 类型为double - 将被截断为整数。为避免精度损失,您必须将number更改为浮点变量,或将结果存储在相应类型的其他变量中。

问题2:以下使用整数除法

number =  number/2;

结果被截断为整数,即5 / 22。然后将后者转换为double(2.0),这是函数返回的内容。

要修复,请更改功能:

private static double half(int number) {
     return number / 2.0;
}

P.S。浮点数有很多属性可能不直观。我建议您查看What Every Computer Scientist Should Know About Floating-Point Arithmetic

答案 2 :(得分:1)

传递由值完成的基本数据类型。你需要在方法half()中给出SOP 编辑:需要使用方法half()返回的结果,方法是将其分配给数字或在SOP本身中调用此方法。

答案 3 :(得分:1)

为什么half(number)不会修改number函数中的main() 声明?这是因为您会将number的值传递给half()函数进行评估,即您在numberhalf()函数中提供值的副本。因此,half()函数对number所做的任何操作都不会反映回numbermain()变量声明。如果要更新其值,则需要在half()中将number的返回值分配给main()

还有其他一些情况,例如变量阴影,我不打算详细谈论,因为它可能会让你感到困惑。

答案 4 :(得分:0)

这是因为您没有将half()的返回值分配给number - 它会被计算但不会被使用。

你需要说:

number = half(number); 

目前的方式只有在number通过引用传递时才有效,而不是按值传递。

答案 5 :(得分:0)

int number =5;
half(number);

Java不支持按引用传递。所以在这种情况下,我们传递的值是5而不是数字的参考。

因此,如果我们想捕获更改,那么方法调用应该是这样的 -

public class simpleMath
{
    public static void main(String[] args) 
    {
        int number =5;
        number  = half(number);

        System.out.println(" 5 divided by 2 is:"+ number);

    }

    private static double half(int number) {
         number =  number/2;
         return number;
    }
}

答案 6 :(得分:-5)

首先,您需要了解分配给变量的类型。您应该将代码更改为:

    public class simpleMath
    {


        public static void main(String[] args) 
        {
            double number = 5;
            double answer = half(number);

            System.out.println(" 5 divided by 2 is:"+ answer);

        }

        private static double half(double number) {
             number =  number/2.0;
             return number;
        }

    }

看看我现在如何使用返回值以及如何除以2.0?这些更改将为您提供所需的结果。