Diyelim ki inşa döngünün daha temiz bir sürümüne bakalım:
for (i = 0; i < a.length; i++); {
if (a[i] < a[i + 1]) {
return true;
}
else {
return false;
}
}
Ben ilk orijinal döngü içinde sözdizimi hatası işaret olmalıdır. Yani, döngü gövdesini başlatan küme ayracı ({
) önce bir noktalı virgül (;
) var. Bu noktalı virgül çıkarılmalıdır. Ayrıca, daha okunabilir hale getirmek için kodun beyaz alanını yeniden biçimlendirdiğimi de unutmayın.
Şimdi döngüsünüzde neler olduğunu konuşalım. Döngü yineleyicisi i
0
'dan başlar ve a.length - 1
'da biter. i
dizininizin bir dizini olarak işlev gördüğünden, a[0]
öğesinin ilk öğesi ve a[a.length - 1]
dizininizin son öğesi olduğunu belirtmek mantıklıdır. Ancak, döngünüzün gövdesinde de i + 1
bir dizin yazdınız. Bu, i
'un a.length - 1
'a eşit olması durumunda, dizininizin dizinin sınırları dışındaki a.length
'a eşit olduğu anlamına gelir.
isSorted
işlevi, a[i] < a[i+1]
ilk kez true değerini döndürdüğü ve ilk kez yanlış olduğu için önemli sorunlara da sahiptir; ergo aslında dizi sıralanır olup olmadığını kontrol etmez! Daha ziyade, ilk iki girdinin sıralanıp ayrılmadığını kontrol eder.
benzer mantıkla bir işlev ama i == a.length
sana o hatayı verecektir zaman gerçekten sıralanır dizisi
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.
}
istisnayı geri yükle – Cruncher
Kodunuzu çalıştırın. 4 girdiniz var, basit olmalı. Bir noktada 3'e eşit olacağım, [3 + 1] erişmeye çalışacak ne olacak? – cklab
Dizin sınırlarınızı kontrol edin –