Thursday 28 December 2017

Ruchomej średniej kolejki java


Muszę śledzić ostatnie 7 dni roboczych w pętli odczytu pliku. Jest używany do pomiaru zmęczenia wykresów pracy. Teraz mam coś, co działa, ale wydaje się dosyć wyraźne i nie wiem, czy jest jakiś wzór bardziej zwięzły. Obecnie mam klasę Java z tablicą statyczną, która ma przechowywać ostatnie dane x dni, a następnie podczas czytania pliku, zgarniam pierwszy element i przenieść pozostałe 6 (przez cały tydzień). Przetwarzanie tej tablicy statycznej odbywa się we własnej metodzie tj. Moje pytanie: czy jest to rozsądne podejście do projektowania, czy jest coś oślepiać oczywistego i prostego w wykonaniu tego zadania? Dzięki chłopaki zapytał 30 sierpnia 11 w 14:33 Podziękowania dla wielu facetów: Dostałem wiadomość: użyj obiektu na wyższym poziomie i wykorzystaj odpowiednich metod lub okrągłego bufora. Wielkie odpowiedzi, wszystkie. Kiedy myślisz o tym, zawsze potrzebujesz dostępu do całej tablicy, aby można było pozbyć się tego pierwszego wpisu - czego nie byłem pewny sam. Z ulgą odczuwałem ulgę, że nie brakowało mi trochę okładki i był w zasadzie na rozsądnej, jeśli nie skutecznej i skróconej ścieżce To właśnie uwielbiam tę witrynę: wysokiej jakości, trafne odpowiedzi od osób, które znają swoje sht. ndash Pete855217 Aug 30 11 at 15:05 Dlaczego zainicjalizujesz działanieTotal na null Jaki jest jego typ Gdzie jest zadeklarowany Dobrze by to zrobić, jeśli umieścisz kilka próbek kodu, które przypominają rzeczywisty kod Javy. Przechodząc dalej, moja krytyka byłaby następująca: twoja funkcja za dużo. Funkcja lub metoda powinna być spójna. Bardziej właściwie powinni zrobić jedną rzecz i jedną rzecz. Co gorsza, co dzieje się w pętli for kiedy x 5 Kopiujesz runningTotal6 do runningTotal5. ale wtedy masz dwie kopie tej samej wartości w pozycjach 5 i 6. W projekcie twoja funkcja movesshuffles elementów w Twojej tablicy oblicza całkowite odbitki do standardowego błędu zwraca całkowitą Za dużo. Moja pierwsza sugestia nie polega na przenoszeniu rzeczy w tablicy. Zamiast tego zastosuj okrągły bufor i użyj go zamiast tablicy. To uprości Twój projekt. Moja druga sugestia polega na rozbiciu na funkcje, które są spójne: mieć strukturę danych (okrągły bufor), która pozwala na dodanie do niej (i która spada najstarszej pozycji, gdy osiągnie swoją zdolność.) Struktura danych implementuje interator ma funkcję, która oblicza sumę na iteratorze (nie obchodzi cię to, czy obliczasz sumę z tablicy, listy lub cyklicznego bufera.) Nie nazywaj tego sumą. Nazywaj to sumą, czyli tym, czym się zajmujesz. To co robię :) To świetna informacja luis, pamiętaj jednak, że ta funkcja jest niewielką częścią funkcjonalności klasy, a dodanie zbyt dużej ilości kodu sprawiłoby, że byłoby to idealne. Jesteś technicznie poprawny i rozumiem, że mój kod robi dużo za dużo 39, ale jednocześnie lepiej jest błądzić po stronie mniejszego, klarowniejszego kodu, niż iść do perfekcji. Biorąc pod uwagę moje umiejętności Java, nawet uczynienie pseudokodów, które opisujesz kompilacji, spowodowałoby, żebym zadał mi ten budżet (), ale dzięki jasnemu opisowi. ndash Pete855217 sie 31 11 o 2:23 Hmmm, nie chodzi o doskonałość, ale o ustalone praktyki przemysłowe, które znamy od trzech ostatnich dekad. Czystym kodem jest zawsze ten, który jest podzielony na partycje. Mamy dziesięciolecia dowodów, które wskazują, że można to osiągnąć w ogólnym przypadku (pod względem efektywności pod względem kosztów, redukcji defektów, zrozumienia itp.). chyba że jest to kod jednorazowy dla czegoś jednorazowego. Nigdy nie jest to kosztowne, gdy ktoś rozpoczyna analizę problemu w ten sposób. Kodowanie 101, złamanie problemu i kod następuje, ani nadmierny, ani trudny) ndash luis. espinal Aug 31 11 at 15:55 Twoje zadanie jest zbyt proste, a aproach przyjąłeś z pewnością jest dobry do pracy. Jeśli jednak chcesz używać lepszego projektu, musisz pozbyć się całego ruchu liczbowego, który lepiej posłużysz się kolejką FIFO i dobrze użyj metod push i pop w taki sposób, aby kod nie odzwierciedlał żadnego ruchu danych, tylko dwie akcje logiczne nowych danych i usuwać dane starsze niż 7 dni. odpowiedział na 30 sierpnia 11 w 14: 49I mam naukowy program datalogging, który rozwijam od kilku lat. Musimy teraz dodać trochę funkcjonalności, aby uzyskać średnią ruchomą gromadzonych danych. Mogę utworzyć kolejkę myDataClass, aby zrobić bufor fifo, ale zastanawiałem się, co najlepszym sposobem robi średniej może być. Jak widać z poniższego przykładu kodu myDataClass zawiera różne struktury danych, z których niektóre mogą być uśrednione, a niektóre, których nie można (na przykład łańcuch). Głównym pytaniem jest, czy jest łatwy sposób na osiągnięcie tego lub muszę napisać kod do średniej każdego elementu wewnątrz myDataClass lub powinienem przeprojektować myDataClass Dzięki. Wtorek, Lipiec 12, 2017 9:14 pm Personnaly, chciałbym utworzyć klasę quotDataQueue (z MyDataClass), która dequeue się, jeśli liczba w kolejce przekazać 10 elementów. W ten sposób nigdy nie będziesz musiał dbać o liczbę pozycji w kolejce z Twojego kodu, to zajmie się wewnątrz klasy kolejki Oznaczone jako odpowiedź Mike Feng Moderator środa, 20 lipca 2017 1:56 Wtorek, 12 lipca 2017 r. 9:40 Po nieco dłuższym dochodzeniu, wydaje mi się, że znalazłem dla ciebie rozwiązanie. Możesz użyć metody CopyTo do skopiowania lewych elementów w kolejce do tablicy. Pamiętaj, że nie obliczałem średniej, pokazałem tylko, w jaki sposób można uzyskać podstawę obliczeń, ale tylko dodawać własne obliczenia oparte na zasadzie biznesowej. Oznaczone jako odpowiedź Mike Feng Moderator środa, 20 lipca 2017 1:56 PM Friday, July 15, 2017 5:16 AM Na podstawie mojego zrozumienia, Twoje wymagania są takie jak poniżej: To są dane w kolejce: myDataClass1. datadbl 2.1 datastr quotsomeString1quot dataarraydbl podwójna tablica myDataClass2. datadbl 3.5 datastr quotsomeString2quot dataarraydbl podwójna tablica myDataClass10. datadbl 9.1 datastr quotsomeString10quot dataarraydbl a double array Teraz chcesz obliczyć średnią liczbę datadbl feild w każdym obiekcie myDataClass i uzyskać średnią liczbę atrybutu dataarraydbl. Jeśli tak, zaproponuję Ci to samo, co sugerowałby Crazypenie: zbuduj nową klasę o nazwie DataQueue: Mam nadzieję, że będzie to pomocne, jeśli coś źle zrozumie, daj mi znać. Mike Feng MSFT Wsparcie dla społeczności MSDN Informacje zwrotne do nas Uzyskaj lub zażądaj kodu Przykład próbki firmy Microsoft Proszę pamiętać, aby zaznaczyć odpowiedzi jako odpowiedzi, jeśli pomogą i odznaczają je, jeśli nie pomogą. Oznaczone jako odpowiedź Mike Feng Moderator środa, 20 lipca 2017 1:55 PM Friday, July 15, 2017 3:33 AM Dzięki Cor, mógłbym to zrobić w podobny sposób, ale myDataClass jest w zasadzie dość duży i system dzienników może działać przez długi czas, więc bardziej wydajne jest dla mnie robienie kopii klasy, której nie potrzebuję do obliczania średniej. Kolejka wydawała się najprostszym sposobem na osiągnięcie tego celu. Moje główne pytanie jest jednak, jak przeciętna klasa podobna do tego otrzymuję poczucie, że będę musiał napisać kod, który robi to specjalnie dla każdego typu danych w myDataClass. Klasa publiczna myDataClass wtorek, 12 lipca 2017 10:40 Na podstawie mojego zrozumienia, twoje wymagania są następujące: To są dane w kolejce: myDataClass1. datadbl 2.1 datastr quotsomeString1quot dataarraydbl podwójna tablica myDataClass2. datadbl 3.5 datastr quotsomeString2quot dataarraydbl podwójna tablica myDataClass10. datadbl 9.1 datastr quotsomeString10quot dataarraydbl double array Teraz chcesz obliczyć średnią liczbę datadbl feild w każdym obiekcie myDataClass i uzyskać średnią liczbę dataarraydbl feild. Jeśli tak, zaproponuję Ci to samo, co sugerowałby Crazypenie: zbuduj nową klasę o nazwie DataQueue: Mam nadzieję, że będzie to pomocne, jeśli coś źle zrozumie, daj mi znać. Mike Feng MSFT Wsparcie dla społeczności MSDN Informacje zwrotne do nas Uzyskaj lub zażądaj kodu Przykład próbki firmy Microsoft Proszę pamiętać, aby zaznaczyć odpowiedzi jako odpowiedzi, jeśli pomogą i odznaczają je, jeśli nie pomogą. Oznaczone jako odpowiedź Mike Feng Moderator środa, 20 lipca 2017 1:55 PM Friday, July 15, 2017 3:33 AMgetMaxQueueLength Zwraca maksymalną liczbę krotek, które ta kolejka kiedykolwiek widziała. Zwraca: maksymalna liczba krotek, które ta kolejka może zawierać getCurrentQueueLength Zwraca przybliżoną liczbę krotek obecnych w tej kolejce. Liczba ta jest przybliżona, ponieważ może istnieć wiele wątków uzyskujących dostęp do kolejki w tym samym czasie. Zwraca: przybliżona liczba krotek aktualnie w kolejce getBatchProcessingTime Zwraca średnią ruchomą ilość czasu (mikrosekund), która zajmuje się przetworzeniu partii krotek. Zwraca: ilość czasu (mikrosekund) potrzebną do przetworzenia partii krotek Od: 6.3.10 getBatchLatency Zwraca średnią ruchomą czasu (mikrosekund), aby partia krotek przeszła przez kolejkę. Zwraca: czas (mikrosekundy) dla partii krotek do przechodzenia przez kolejkę Od: 6.3.10 getBatchSize Zwraca średnią ruchomą wielkości partii krotek. Zwraca: Zwraca średnią ruchomą wielkości partii krotek Od: 6.6.13 Zwraca nazwę tej kolejce. W przypadku kolejek między modułami nazwa będzie nazwą strumienia, do którego jest wprowadzany. Dla kolejek między kontenerami nazwa będzie nazwą połączenia kontenera. O wiele prostsza wersja: klasa publiczna MovingAverageInSlidingWIndow int windowsize Kolejka queue int sum public MovingAverageInSlidingWIndow (int windowsize) this. windowsize windowize this. queue new LinkedList () this. sum 0 znajdzie średnią ruchu po wstawieniu elementu n do strumienia danych private double findMovingAverage (int n) if (queue. size () gt windowsize - 1) sumę sum - queue. poll () queue. offer (n) sum sum n return (double) sum queue. size () public static void main (String args) int windowsize 3 MovingAverageInSlidingWIndow m new MovingAverageInSlidingWIndow (windowsize) for (int i 1 i lt 20 i) System. out. println (quotAfter Dodawanie quot i quot do kolejki: Średnia jest: m. findMovingAverage (i)) Możemy po prostu utrzymywać bieżącą sumę elementów w kolejce w zmiennej globalnej. Zmniejszenie liczby obliczeń w następnej () metodzie. public class MovingAverage kolejka typu LinkedList rozmiar int liczba int 0 oznacza sumę kolejki Zainicjuj tutaj strukturę danych. public MovingAverage (rozmiar wewnętrzny) this. queue nowy LinkedList () this. size rozmiar public double next (int val) queue. offer (val) sum val jeśli (queue. size () gtthis. size) sum - kolejka. poll ()

No comments:

Post a Comment