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

为什么我不能在参数中使用小于0的数字来参数化双java?,java,double,Java,Double,为什么这样做有效: 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 argumen

为什么这样做有效:

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;
}
公共静态双[][]参数(双[][]数据){

对于(int i=0;i,通过调用方法

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

由于整数除法,值1/10被计算为
0
,因此上述方法调用与

param(data, 0);
声明

data[i][j] = data[i][j] * param;  
in 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

这就是为什么第一种情况可以像您预期的那样工作,而第二种情况则不能。

如果将
param
初始化为

双参数=0.1;

双参数=1.0d/10.0d;

而不是

双参数=1/10;

因为在执行
1/10
时,在
double param=1/10
的情况下,有两个整数在运算中使用,它们被舍入为零并分配给param


它在您发布的第一个方法中运行良好,因为表达式是从左到右计算的,因为
*
/
具有相同的算术运算符优先级。

输出是什么?如何调用方法?您必须在第二个示例中显示
param
的值是如何计算的。我打赌它是e> double param=1/10;
,在这种情况下进行整数除法,结果为零。它在第一个示例中起作用,因为表达式是从左到右求值的,转换为double的顺序是正确的。这个问题大概有一百个重复项。@像这样的问题的问题是在你知道答案之前不要搜索它们,因为你不知道问题的原因是什么。这很有道理。因此,在第一个例子中,它没有将分数计算为零的原因是因为它一次完成了所有的过程?如果没有,是什么让它对我起作用?编辑我的答案包括第一个案例对您有效的原因!请查看。java似乎有很多东西需要注意!谢谢您的帮助。
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