我正在尝试修复以下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;
}
}
答案 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 / 2
为2
。然后将后者转换为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()
函数进行评估,即您在number
到half()
函数中提供值的副本。因此,half()
函数对number
所做的任何操作都不会反映回number
中main()
变量声明。如果要更新其值,则需要在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?这些更改将为您提供所需的结果。