讓我們來看看您構建的循環的清潔版本:
for (i = 0; i < a.length; i++); {
if (a[i] < a[i + 1]) {
return true;
}
else {
return false;
}
}
我應該先在原來的循環指出語法錯誤。也就是說,在啓動循環體的花括號({
)之前有一個分號(;
)。該分號應該被刪除。 另請注意,我重新格式化了代碼的空白區域,使其更具可讀性。
現在讓我們來討論你的循環內部會發生什麼。循環迭代器i
開始於0
並結束於a.length - 1
。由於i
作爲您陣列的索引,因此有意義的是指出a[0]
是第一個元素,a[a.length - 1]
是數組的最後一個元素。但是,在你的循環體中,你也寫了一個i + 1
的索引。這意味着如果i
等於a.length - 1
,那麼您的索引等於a.length
,它位於數組邊界之外。
功能isSorted
也有相當大的問題,因爲它第一次返回true a[i] < a[i+1]
並且第一次不成功時返回false; ergo它實際上並不檢查數組是否已排序!相反,它只檢查前兩個條目是否已排序。
有類似的邏輯功能,但它會檢查該數組真的排序是
public static boolean isSorted(int[] a) {
// Our strategy will be to compare every element to its successor.
// The array is considered unsorted
// if a successor has a greater value than its predecessor.
// If we reach the end of the loop without finding that the array is unsorted,
// then it must be sorted instead.
// Note that we are always comparing an element to its successor.
// Because of this, we can end the loop after comparing
// the second-last element to the last one.
// This means the loop iterator will end as an index of the second-last
// element of the array instead of the last one.
for (int i = 0; i < a.length - 1; i++) {
if (a[i] > a[i + 1]) {
return false; // It is proven that the array is not sorted.
}
}
return true; // If this part has been reached, the array must be sorted.
}
通過您的代碼發佈異常 – Cruncher
運行。你有4個條目,它應該很簡單。 「我」在某些時候將等於3,[3 + 1]會嘗試訪問什麼? – cklab
檢查你的索引範圍 – 2013-10-18 20:15:08