我试图获得2d方阵对角线元素的差异
28 52
80 66
7 18
97 68
答案 0 :(得分:3)
开始担心并行运行循环之前,请担心编写简单的正确代码。
例如:
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j){
left=left+arr[i][j];
}
}
}
这些嵌套循环将运行n*n
次。但是,只有在i==j
时您才做任何事情;因此您会因循环而浪费精力。只需删除内部循环,然后使用:
for(int i=0;i<n;i++){
left += arr[i][i];
}
仅进行n
次迭代:不仅代码更简单,而且速度更快。
那效率低下;您的其他循环实际上是错误的:
for(int i=0,int j=n;i<n;i++,j--){
right=right+arr[i][j];
}
除语法错误外,这将在第一次迭代时失败,并以ArrayIndexOutOfBoundsException
出现,大概是因为arr[i].length == n
,但是是j == n
。因此,初始化j=n-1
。
无论如何,您这里不需要单独的循环:
for(int i=0, j=n-1;i<n;i++, j--){
left += arr[i][i];
right += arr[i][j];
}
仅需一个循环,就无需尝试使循环同时运行。