JAVA - Prośba o intepretacje krótkiego kodu.

JAVA - Prośba o intepretacje krótkiego kodu.
MA
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

Witam,
Jest to mój pierwszy post na tym forum, więc witam wszystkich forumowiczów :)
Mam prośbę, czy ktoś mógłby przeanalizować oraz zinterpretować dla mnie ten kod?

Kopiuj
 
class Solution {
    public boolean solution(int[] A) {
   int max = A[0], maxIndex = 0;
    for(int i=0;i<A.length;i++)
    {
        if(A[i] > max)
        {
            max = A[i];
            maxIndex = i;
        }
    }
			for(int j=0;j<maxIndex;j++)
			{
				if(A[j]>max)
					return false;
			}

    for(int j=maxIndex+1;j<A.length-1;j++)
    {
        if(!(max > A[j] && A[j+1] <A[j]))
            return false;
    }

    return true;
}
}

Wiem, że 1sza pętla to znajdowanie maksymalnego elementu oraz indeksu tego elementu. Natomiast co się dzieje w 2 kolejnych pętlach? 2 pętla to w ogóle kosmos - sprawdzamy czy nie ma elementu większego od maksymalnego, który przed chwilą znaleźliśmy przecież to bez sensu...

edytowany 1x, ostatnio: bogdans
bogdans
!Wstawiaj kod w znaczniki &lt;code=java&gt;&lt;/code&gt;
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

Potwierdzam, kod jest bez sensu. Drugą pętlę można wyrzucić bo warunek nigdy nie będzie spełniony. Trzecia pętla też jest lekko bez sensu bo można warunek uprościć do if(!(A[j+1] <A[j])) czyli if(A[j+1] > A[j]), czyli ta pętla sprawdza czy elementy, które w tablicy są "za" elementem największym, są ustawione w kolejności rosnącej.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
MA
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

Rozumiem, funkcja miala zwracac true wtedy gdy tablica jest posortowana rosnąco lub można uzyskać tablicę posortowaną rosnąco dokonując tylko 1 zamiany elementu, w przeciwnym razie miala zwracac false (gdy tablica nie jest posortowana rosnąco oraz nie będzie gdy dokonamy 1 zamiany elementów). Czyli ta funkcja to realizuje tylko niepotrzebnie jest ta 2 pętla?

wiciu
  • Rejestracja:ponad 11 lat
  • Ostatnio:6 dni
  • Postów:1205
2

Jeżeli w tym kodzie byłoby stosowane odpowiednie nazewnictwo, formatowanie i chociażby listy zamiast tablic, to nie trzeba by go analizować, tylko od razu wiedzielibyśmy, o co chodzi.
Np. klasa "Solution". Solution of what? Natomiast nazwa metody powinna być czasownikiem, a nie rzeczownikiem. Gdyby jeszcze wyciągnąć warunki z instrukcji do zmiennych, które coś mówią, to wtedy od razu ten kod stałby się bardziej przejrzysty.

Mój post nie odpowiada na Twoje pytanie, ale pokazuje kilka istotnych problemów. Gdyby je wyeliminować, to prawdopodobnie w ogóle nie musiałbyś tworzyć takiego wątku. Utrzymywanie czegoś takiego w przyszłości, to dramat.

MA
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

To cenne uwagi, a dlaczego lepiej używać list?

MA
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

Dałoby rade po polsku w swoich słowach po krótce? :D

TK
  • Rejestracja:ponad 13 lat
  • Ostatnio:około miesiąc
  • Postów:342
0

@Shalom chyba jednak nie bardzo. Zalóżmy, że w tablicy A sa elementy: 4, 7, 7, 6. Wtedy:

  1. maxIndex będzie równe 1
  2. Warunek, który zaproponowałeś czyli
Kopiuj
!(A[j+1] < A[j])

Da w wyniku false, podczas gdy warunek w pierwotnej postaci czyli:

Kopiuj
!(max > A[j] && A[j+1] < A[j])

Da w wyniku true. Ponadto wyrażenia:

Kopiuj
if(!(A[j+1] < A[j]))

i

Kopiuj
if(A[j+1] > A[j])

Nie są tożsame. Byłyby gdybyś w drugim przypadku napisal ">=" a nie ">".

Co do pierwotnego kodu to metoda "solution" juz w pierwszej linijce zaklada, ze w tablicy sa jakies elementy - lepiej sobie takich zalozen nie robic.

MA
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

Ale poza tym jest to poprawny kod [ten z 1 postu?] zwraca true dla posortowanej tablicy lub takiej ktora moze byc posortowana po przestawieniu 1 elementu?

TK
  • Rejestracja:ponad 13 lat
  • Ostatnio:około miesiąc
  • Postów:342
0

A takie mialy byc zalozenia? Bo jezeli takie to raczej nie dziala to dobrze. Wystarczy, ze w tablicy znalazlyby sie takie elementy jak: 3, 2, 1, 8. Wtedy tablica nie jest posortowana a metoda zwroci true. Pierwszy for znajdzie maksimum czyli element tablicy o indeksie 3, drugi for jest bez sensu a zawartosc trzeciego sie nie wykona poniewaz maxIndex+1 jest wieksze niz A.length-1.

Ponieważ tablica nie jest ani posortowana ani nie można jej posortować przestawiająć tylko jeden element (trzeba przestawić dwa) metoda powinna zwrocić false. O ile rzeczywiście dobrze zrozumiałem założenia.

MA
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

To ja już nic nie rozumiem, bo to był taki test online do wykonania i dla tego kodu który wstawiłem dało mi odpowiedź że jest dobrze :/
PS. Tak takie są założenia.

edytowany 1x, ostatnio: masiw
Wizzie
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 8 lat
1

Dałoby rade po polsku w swoich słowach po krótce?

Jak chcesz być programistą bez znajomości angielskiego to trochę lipka ;)

MA
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

Chyba się w ogóle do tego nie nadaje i źle wybrałem studia.

KA
jeny no nie poddawaj się tak łatwo. nie Od razu rzym zbudowano
wiciu
Nie poddawaj się! :-D
TK
  • Rejestracja:ponad 13 lat
  • Ostatnio:około miesiąc
  • Postów:342
0
masiw napisał(a):

To ja już nic nie rozumiem, bo to był taki test online do wykonania i dla tego kodu który wstawiłem dało mi odpowiedź że jest dobrze :/

A na pewno chodzilo o przestawienie co najwyzej jednego elementu? Moze chodzilo o zamiane elementow co najwyzej jeden raz? Pytam bo to nie to samo.

MA
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

Haha jaka motywacja, prawda jest taka, że poszedłem na informatyke bo myślałem, że będzie cokolwiek z grafiki komputerowej w której jestem samoukiem i chyba mi to idzie lepiej niż programowanie ale dzięki za motywacje :D mógłby ktoś w skrócie napisać czego listy są 'lepsze' od tablic? W javie jest więcej funkcji gotowych do działania na listach? Listy mogą przechowywać rózne typy? Czy to nie o to chodzi. Z moim angielskim nie jest najgorzej [gorzej z programowaniem :D] ale jak wjeżdzają takie specjalistyczne rzeczy jak programowanie to nie znam co drugiego słowa.

PS. TK: Chodziło chyba o zamiane elementow co najwyzej jeden raz. Tak kminie i nie widze roznicy pomiedzy tym :/

edytowany 1x, ostatnio: masiw
KA
grafika to bardziej na ASP było iść
panryz
  • Rejestracja:około 17 lat
  • Ostatnio:około godziny
0
masiw napisał(a):

prawda jest taka, że poszedłem na informatyke bo myślałem, że będzie cokolwiek z grafiki komputerowej [...] ale jak wjeżdzają takie specjalistyczne rzeczy jak programowanie to nie znam co drugiego słowa.

Nie wyobrażam sobie, że ktoś poszedł na studia informatyczne i nie rozumie podstaw informatyki.
Ja też niby skończyłem specjalność grafika, ale nie spodziewałem się, że mnie minie programowanie czy inne podstawowe elementy informatyki. Jak to powiedział mój profesor:
"Wy jako inżynierowie informatyki nie możecie nie wiedzieć jak działa komputer lub internet".

KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

@masiw rozbij to sobie na kilka prostych metod to będzie Ci prościej. np. tak czy jest posortowana:

Kopiuj
    public static boolean isSorted(int array[]) {
        boolean sorted = true;
        for (int i = 0; sorted && i < array.length - 1; ++i) {
            sorted = array[i] <= array[i + 1];
        }
        return sorted;
    }

PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
TK
  • Rejestracja:ponad 13 lat
  • Ostatnio:około miesiąc
  • Postów:342
0
masiw napisał(a):

PS. TK: Chodziło chyba o zamiane elementow co najwyzej jeden raz. Tak kminie i nie widze roznicy pomiedzy tym :/

Chodzilo mi o to, ze jezeli masz elementy: 3, 2, 1, 8 to zeby posortowac te tablice nalezy przestawic dwie liczby 3 i 1. Przestawienie tych dwoch liczb to JEDNA zamiana miejscami i wtedy dla takich danych testowych metoda, ktora tutaj umiesciles dzialalaby dobrze. Z drugiej jednak strony dla danych 3, 2, 1, 3, 2, 1, 8 i tak dzialalaby niepoprawnie. Jezeli nie musisz poprawiac tego co napisales bo jakis tam test online jest podstawa do wystawienia pozytywnej oceny to pewnie i tak to olejesz. Jednak gdybys chcial napisac to poprawnie to zrob to mniej-wiecej tak:

  1. Stworz sobie pomocnicza metode, ktora zwraca true jezeli dane sa posortowane lub false w przeciwnym przypadku. W pierwszych linijkach sprawdz:

a) Czy tablica jest pusta - jezeli tak to zwracasz true (zalozylem, ze pusta tablica to tablica posortowana - nie wiem na ile to sluszne zalozenie. Jezeli nie jest to sluszne zalozenie to wtedy zawsze mozesz rzucic wyjatkiem).

b) Czy tablica posiada tylko jeden element - jezeli tak to tablica musi byc posortowana i zwracasz true.

c) Warto tez sprawdzić czy parametr nie jest null-em - sam zdecyduj co wtedy zrobic.

Jezeli tablica zawiera co najmniej 2 elementy (nie sa spelnione zalozenia z powyzszych podpunktow) to wtedy sprawdzasz wszystko for-em dla i <0, do length-1). Jeżeli zostanie spełniony warunek A[i] > A[i+1] to zwracasz false. Za forem wstaw return true.

  1. W metodzie wlasciwej (u Ciebie metoda solution) najpierw sprawdzasz czy dane sa juz posortowane (za pomoca metody pomocniczej). Jezeli sa, to zwracasz true, jezeli nie sa to wykonujesz nastepny krok.

  2. Tworzysz sobie dwa for-y (drugi for powinien znajdować się wewnątrz pierwszego). Pierwszy dla i z przedzialu <0, do length-1), a drugi dla j z przedzialu od <i+1, do length). Zamieniasz wtedy wartość A[i] z A[j] (warto sobie pomoc zmienną tymczasową). Po zamianie sprawdzasz za pomocą metody pomoczniczej czy tablica jest posortowana. Jezeli jest to zwracasz true, jeżeli nie jest nie zwracasz nic (nie przerywasz dzialania algorytmu).

  3. Bez wzgledu na to czy tablica jest posortowana w pkt. 3 czy nie jest powinienes przywrocic tablice do pierwotnej postaci, najlepiej od razu po ww. sprawdzeniu.

  4. Metoda wlasciwa powinna zwracac domyslnie false.

Powinno dzialac poprawnie, nie wiem natomiast czy akurat optymalnie

edytowany 1x, ostatnio: tk

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.