我注意到一件我不清楚的事情。这是Java中while
循环中条件的优先级。
让我们考虑一下插入排序的例子
// In-place Implementation of Insertion Sort
public class Insertion {
public void sort(int[] arr) {
int len = arr.length;
// Goes from second element (first one is already put in array)
for (int i = 1; i < len; i++) {
int it = i - 1; // take a peak at the previous element
int tmp = arr[i]; // make temporary value because arr[i] is going to be overwritten
// keep shifting smaller values until this condition is met:
while (it >= 0 && arr[it] > tmp) {
arr[it+1] = arr[it];
it--;
}
// place the item at the right spot
arr[it+1] = tmp;
}
}
}
第11行:while (it >= 0 && arr[it] > tmp) {
使用此条件顺序(首先我们检查是否it >=0
然后检查arr[it] > tmp
是否完美。
但是,当我尝试切换这两个条件的位置时,我会得到一个意想不到的结果,更确切地说:IndexOutOfBoundsException
。
所以,似乎有一些条件优先级检查,我不知道它们。我认为&& (and)
平等地检查双方。我错了吗?你能解释为什么会发生这种情况吗?条件的优先级是什么?