Sprawdź, czy tablica jest posortowana, zwróć wartość true lub false
Piszę prosty program, który po prostu zwraca wartość true, jeśli tablica jest posortowana, w przeciwnym razie jest fałszywa i ciągle otrzymuję wyjątek w zaćmieniu i po prostu nie mogę zrozumieć, dlaczego. Zastanawiałem się, czy ktoś mógłby rzucić okiem na mój kod i w pewnym sensie wyjaśnić, dlaczego otrzymuję wyjątek poza granicami tablicy.
public static boolean isSorted(int[] a)
{
int i;
for(i = 0; i < a.length; i ++);{
if (a[i] < a[i+1]) {
return true;
} else {
return false;
}
}
}
public static void main(String[] args)
{
int ar[] = {3,5,6,7};
System.out.println(isSorted(ar));
}
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
13 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Muszę najpierw wskazać błąd składni w oryginalnej pętli. Mianowicie, przed nawiasem klamrowym ( ) znajduje się średnik ( ), który rozpoczyna treść pętli. Ten średnik należy usunąć.
Zwróć też uwagę, że ponownie sformatowałem przestrzeń kodu, aby była bardziej czytelna.
Omówmy teraz, co dzieje się w Twojej pętli. Iterator pętli zaczyna się od i kończy na . Ponieważ działa jako indeks tablicy, warto określić, że
a [0]
jest pierwszym elementem, aa [a.length - 1]
- ostatni element twojej tablicy. Jednak w treści pętli wpisałeś również indeks . Oznacza to, że jeśli to , to twój indeks to , czyli poza granicami tablicy.Funkcja również ma poważne problemy, ponieważ zwraca prawdę za pierwszym razem i false za pierwszym razem, gdy tak nie jest; stąd w rzeczywistości nie sprawdza, czy tablica jest w ogóle posortowana! Najprawdopodobniej sprawdza tylko sortowanie pierwszych dwóch rekordów.
Funkcja o podobnej logice, ale która sprawdza, czy tablica jest rzeczywiście posortowana, to
Anonimowy użytkownik
Potwierdzenie od:
Lub logicznie równoważna alternatywa:
Anonimowy użytkownik
Potwierdzenie od:
a [i + 1]
uruchamiasz od końca tablicy.Jeśli musisz porównać z następującym elementem, zatrzymaj iterację 1 elementu wcześniej (i usuń średnik, który Java zinterpretuje jako treść pętli ):
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
a [i + 1]
, gdy zwróci ten błąd.Na przykład w tablicy o długości 10 masz elementy od 0 do 9.
a [i + 1]
gdy ma wartość 9, pokażea [10]
poza zakresem.Naprawić:
Ponadto, twój kod nie sprawdza całej tablicy, gdy tylko wywoływana jest funkcja return, pętla kontrolna się kończy.
Po prostu sprawdzasz pierwszą wartość i tylko pierwszą wartość.
AND masz średnik po deklaracji pętli for, co również powoduje problemy
Anonimowy użytkownik
Potwierdzenie od:
Sprawdzenie granic & amp;
Anonimowy użytkownik
Potwierdzenie od:
a [i + 1]
, ponieważ ta wartość może, ale nie musi, wyjść z tablicy.Na przykład:
Aby to naprawić, po prostu zatrzymaj cykl o jeden wcześniej.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Ta funkcja sprawdza, czy tablica jest w porządku rosnącym, czy nie.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
https://developer.mozilla.org/ ... every
metoda
every()
sprawdza, czy wszystkie elementy tablicy przeszły test zaimplementowany przez podaną funkcję.