请考虑以下代码。我必须找到C中两个对角线的区别。
public static void replaceRandom(Tree<T> tree, Node<T> newNode) {
// Find a random node
List<Node<T>> nodeList = tree.getPreOrderTraversal();
int globalIndex = (int) (Math.random() * nodeList.size());
Node<T> old = nodeList.get(globalIndex);
if (old.isRoot()) {
// If it is the root, we just replace the root.
tree.setRoot(newNode);
} else {
// Otherwise, we need to find the local index to replace it.
Node<T> parent = old.getParent();
int localIndex = parent.getChildren().indexOf(old);
parent.removeChildAt(localIndex);
parent.addChildAt(localIndex, newNode);
}
}
当我将#include <stdio.h>
int main() {
int n,a[100][100],sum1=0,sum2=0;
scanf("%d",&n);
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j){
scanf("%d",&a[i][j]);
if(i==j) sum1+=a[i][j];
else if((i+j)==(n-1)) sum2+=a[i][j];
}
}
if(sum1>sum2) printf("%d",(sum1-sum2));
else printf("%d",(sum2-sum1));
return 0;
}
更改为else if
时,代码运行正常。为什么呢?
答案 0 :(得分:0)
我想我得到了你想知道的东西:
if(i==j) sum1+=a[i][j];
if((i+j)==(n-1)) sum2+=a[i][j];
表示两种情况都有效,因为您同时测试它们。
另一方面,如果你写
if(i==j) sum1+=a[i][j];
else if((i+j)==(n-1)) sum2+=a[i][j];
你假设这些条件中只有一个可以运行或者没有运行,但绝不会同时运行。因此,如果第一个词(i==j)
为true
,则第二个词将不再被测试。但是你需要测试你想要计算的内容。实际上else if
始终属于if
,因此最多只能满足一个条件,而在另一个版本中,您只有两个独立的ifs
。