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

JAVA - Prośba o intepretacje krótkiego kodu.
MA
  • Rejestracja:ponad 9 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:prawie 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:ponad 9 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:17 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:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

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

MA
  • Rejestracja:ponad 9 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 2 miesiące
  • 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:ponad 9 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 2 miesiące
  • 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:ponad 9 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:ponad 7 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:ponad 9 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 2 miesiące
  • 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:ponad 9 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:prawie 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 2 miesiące
  • 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
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)