• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wstawianie elementow w srodek kolekcji

Object Storage Arubacloud
0 głosów
117 wizyt
pytanie zadane 28 lipca 2018 w Java przez wooeL Nowicjusz (200 p.)

Witam. Tak jak w tytule mam problem z owym zadaniem. Nie mooge wpaść na pomysl jak poradzic sobie z wstawieniem elementow za pomoca iteratora na srodek listy. 

1 odpowiedź

0 głosów
odpowiedź 28 lipca 2018 przez Wiciorny Ekspert (269,710 p.)
edycja 28 lipca 2018 przez Wiciorny

Podpowiedź:  pare warunków 

1) gdy elementów jest nieparzyście/ parzyście

2) jest mniej np od 3 / brak elementów itd

Te przypadki rozwaz, następnie każdy inny przypadek postępuje już podobnie [ jesli elementów jest więcej niz np 2 ] to zawsze wyznacz srodek z elementów obecnych i wstaw tam element, jeśli dysponujesz tylko i wyłącznie List Iteratorem

to  pewnie ograniczony jestes do metod takich https://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html

z kolei nie mówisz jaka to lista? Więc możesz mieć metode add(miejsce,vartość) :) która dodaje po obliczeniu miejsca element, wtedy nie musisz przesuwać elementów 

w Pesymistycznym przypadku 

Wyliczasz środek z obecnych elementów ( matematyka )  - wstawiasz element i potem

Zakładając tablicę A [ N]ZA[N], ma już n ( n < N)n(n<N)elementy i chcesz wstawić nowy element w ija-ta komórka, musisz przesunąć elementy ijado nnjedna komórka dalej, a następnie umieścić swój nowy element w komórce Ija.

public class Test {
    public static void main(String[] args) {
        LinkedList< Integer > list = new LinkedList<Integer>() ;

            getIterator( list ).add( 10 );
            getIterator( list ).add( 20 );
            getIterator( list ).add( 30 );
            getIterator( list ).add( 40 );
            getIterator( list ).add( 50 );
            getIterator( list ).add( 60 );

            System.out.println( list );
    }

    private static ListIterator<Integer> getIterator(LinkedList<Integer> list) {
            return list.listIterator( list.size() / 2 );
    }
}

 

komentarz 28 lipca 2018 przez Aisekai Nałogowiec (42,190 p.)
Co te warunki mają niby pomoc?

-W przypadku gdy elementów w liście bedzie 2n, wtedy wstawiasz element między n-1 a n+1 i odpowiednio przesuwasz.

-W przypadku gdy elementow jest 2n+1 wstawi między floor(n+1/2) a n+1. Co i tak sprowadza się do miedzy n i n+1

W każdym z tych przypadkow wystarczy obliczyć floor (size/2) - czyli wystarczy sam int.

Tak samo przypadki gdy elementów jest mniej niz 3 czy gdy lista jest pusta. Dalej: Jeżeli juz chcesz rozważać przypadek gdy elementów jest mniej niz 3, czemu nie rozwazyc przypadku gdy jest ich 5, albo 7 ...

Nie widzę żadnych szczegolnych przypadków do uwzględnienia.

O ile dobrze myślę, na szybko, do rozwiązania problemu wystarcza:

-1 pętla for ustawiająca iterator na floor (size/2)

-jedna zmienna przechowująca wartość iteratora z pozycji floor(size/2)

-druga pętla for odpowiadajaca za przesuwanie listy.

Ps: To co wstawiles, ani to po polsku ani po angielsku

PS2: mniej ważny ale: rozważ*
komentarz 28 lipca 2018 przez Wiciorny Ekspert (269,710 p.)
edycja 28 lipca 2018 przez Wiciorny
ani jedna pętla nie jest potrzebna, po drugie... STREAM API ;] to załatwi

Przypadków dla mniej niż 3 ;] ... bedzie tylko wstawienie na koniec i na 2 pozycje

potem za każdym razem wystarczy wyznaczyć średnią... bo na Int, i tak zaokrągli :a element i tak wpadnie w odpowiednie miejsce przeanalizuj to dobrze. Metoda add- zawsze doda element, po obecnym iteratorze .... stąd 3/2 daje Ci 1,5 zaokrągli to do 1 :) z racji Integera, a add. wstawi na pozycje nr 2  zawsze +1 od obecnego indexu :) to samo dla parzystej 4/2 = 2 add wstawi na 3 pozycje [ znowu +1] od obecnego iteratora, czyli pośrodku  :) miedzy 1 2 a 3 4
1
komentarz 29 lipca 2018 przez Aisekai Nałogowiec (42,190 p.)
O stream api jakos nie pomyślałem, ale dalej uważam że nie ma potrzeby rozwazania jakichkolwiek przypadków.

Zle zrozumiałem zadanie, wiec troche to inaczej chciałem zrobic ale chodziło mi o to ze ustawienie iteratora na pozycji size/2 (wiem że int(eger) "obcina" czesci dziesietne) i dodanie elementu (tak jak zrobiłeś) nie wymagalo rozwazania żadnych przypadkow (dla mnie rozwazenie jakiegoś przypadku = kod dla tych przypadku, dla Ciebie rozwazanie przypadkow miało na celu naprowadzenie na rozwiazanie więc tutaj wynikło nieporozumienie).

W takim przypadku, zgadzam sie z Tobą.
komentarz 29 lipca 2018 przez Wiciorny Ekspert (269,710 p.)

dla mnie rozwazenie jakiegoś przypadku = kod dla tych przypadk

tak i tutaj tez bym wolał zadanie na zasadzie myślenia: z rozważaniem przypadków, ale jak zauważyłem  własnie nacisk na ITERATOR... w tym zadaniu zrozumiałem, że jednak chodzi po prostu o skorzystanie z gotowca ... czyli :D zabijanie kreatywności i myślenia

ale + leci bo rozumiem co miałeś na myśli i też bym tak do tego podszedł. 

Ja się z Tobą od początku zgadzałem, bo wiedziałem co masz na myśli :D heart 

Podobne pytania

0 głosów
3 odpowiedzi 372 wizyt
0 głosów
2 odpowiedzi 205 wizyt
pytanie zadane 12 września 2018 w Java przez noname3 Obywatel (1,180 p.)
0 głosów
1 odpowiedź 91 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...