gpt4 book ai didi

java - 为什么我不能在参数中使用小于 0 的数字来参数化双 Java?

转载 作者:行者123 更新时间:2023-12-04 05:07:37 25 4
gpt4 key购买 nike

为什么这样做:

public static double[][] param(double[][] data){
for (int i=0;i<data.length;i++){
for (int j=0;j<data[0].length;j++){
if(j!=1){
data[i][j] = data[i][j] * 1/10;//for some reason didn't accept as argument

}
System.out.println(data[i][j]);
}
}
return data;
}

具有以下输出:

13581.0 337.42900390625 13571.0 337.1949951171875 13561.0 336.59599609375 13541.0 336.356005859375 13531.0 336.072998046875 13521.0 335.7989990234375 13511.0 335.5219970703125 13501.0



但这不是:
public static double[][] param(double[][] data, double param){

for (int i=0;i<data.length;i++){
for (int j=0;j<data[0].length;j++){
if(j!=1){
data[i][j] = data[i][j] * param;

}
System.out.println(data[i][j]);
}
}
return data;
}

具有以下(不正确的)输出。

13581.0 0.0 13571.0 0.0 13561.0 0.0 13541.0 0.0 13531.0 0.0 13521.0 0.0 13511.0 0.0 13501.0



两种方法都可以很好地编译,但是当我尝试运行第二个方法时,它会使第一列中的所有数据= 0。

它们都以相同的方式被调用,唯一的区别是一个从参数中获取 1/10 的值,另一个是硬编码的(不理想,但这是我因某些莫名其妙的原因让它工作的唯一方法)。

这个问题的发生是因为它不喜欢被一个小于 0 的数字参数化吗?

最佳答案

通过调用方法

public static double[][] param(double[][] data, double param)

作为
param(data, 1/10);

值 1/10 的计算结果为 0因为是整数除法所以上面的方法调用是一样的
param(data, 0);

声明
data[i][j] = data[i][j] * param;  

在 param() 中相当于
data[i][j] = data[i][j] * 0 /*`param`*/;  

这就是为什么在第二种情况下它使第一列中的所有数据= 0。

在第一种情况下,它不会在第一列中生成数据 = 0,因为语句:
data[i][j] = data[i][j] * 1/10;

转换成等价如下
data[i][j] = (data[i][j] * 1)/10;// the (data[i][j] * 1) will return a double value

double/int操作完成结果将是 double .
这就是为什么第一种情况按您的预期工作,而第二种情况则不然。

关于java - 为什么我不能在参数中使用小于 0 的数字来参数化双 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15319718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com