我希望按列对2D数组求和,如果e[i][j]
的值大于0,则计算并求和。但我不知道输出是NaN
,
我该如何解决这个问题?
public class d_2DArray {
public static void main(String [] args){
double[][] e= {{0.0,0.0,0.0,0.0},
{0.0,0.6,0.0,0.0},
{0.0,0.2,0.5,0.1},
{0.0,0.2,0.5,0.4},
{0.0,0.2,0.5,0.7},
{0.0,0.0,0.0,0.9}};
double[] avg= new double[4];
double[] sum= new double[4];
int i,j,k=0;
int[][] x=new int [6][4] ;
//average of column
for(j=1;j<e[1].length;j++){
sum[j]=0.0;
for( i= 1; i < e.length; i++)
if(x[i][j]==1){
sum[j] +=e[i][j];
k++;
}
avg[j]= sum[j]/k ;
System.out.println("Average j="+avg[j]);
}
}
}
答案 0 :(得分:1)
此处k的值在程序结束时保持为0,因此将0除以0会得到NaN。
答案 1 :(得分:1)
这个代码对于一个简单的答案几乎有太多问题。
if(x[i][j]==1)
永远不会成立sum[j] / k
总是0/0,即NaN 答案 2 :(得分:0)
首先,如果要读取所有数组,for循环的索引应该从0开始而不是1。
在这一行
if(x[i][j]==1){
sum[j] +=e[i][j];
k++;
}
你说你只会在x [i] [j] == 1时求和,但是你还没有用任何值初始化那个数组。因此k永远不会更新,所以最后你除以0,这就是为什么你得到NaN
答案 3 :(得分:0)
第一个问题是
if(x[i][j]==1){
sum[j] +=e[i][j];
k++;
}
条件永远不会满足。当你初始化数组x时,它是一个原始数组,并且每个x都被初始化为0.0,现在上面的条件永远不会满足,所以sum的数组永远不会更新。这意味着sum arrray的每个元素也被初始化为零。最后,当你除0/0时,结果si Nan(k从不增加,条件永远不会满足)