5

我正在尝试修复以下 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;
    }
}
4

7 回答 7

17

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

int number = 5;
number = half(number);
于 2012-05-31T10:58:56.193 回答
9

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

half(number);

你可能打算写:

number = half(number);

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

还有几个问题:

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

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

number =  number/2;

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

要修复,请像这样更改函数:

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

PS 浮点数有很多不直观的属性。我建议看一下每个计算机科学家应该知道的关于浮点运算的知识

于 2012-05-31T10:58:26.143 回答
1

您传递按值完成的原始数据类型。您需要在方法 half() 中提供 SOP 编辑​​:需要通过将方法 half() 返回的结果分配给 number 或在 SOP 本身中调用此方法。

于 2012-05-31T11:00:09.650 回答
1

为什么half(number)不修改函数中number 声明main()?这是因为您将传递numberhalf()函数的值来评估,即您将值的副本提供numberhalf()函数。因此,无论函数half()做什么number都不会反映. 如果要更新其值,则需要分配to in的返回值。numbermain()half()numbermain()

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

于 2012-05-31T11:07:38.723 回答
0

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

你需要说:

number = half(number); 

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

于 2012-05-31T11:00:03.453 回答
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;
    }
}
于 2012-05-31T11:17:49.693 回答
-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?这些更改将为您提供您正在寻找的结果。

于 2012-05-31T11:05:28.307 回答