Reklama
Pokazuje wyniki od 1 do 15 z 15

Temat: [JAVA] Arraylist i konstruktor.

  1. #1
    Avatar coke
    Data rejestracji
    2007
    Wiek
    31
    Posty
    145
    Siła reputacji
    17

    Domyślny [JAVA] Arraylist i konstruktor.

    Siema.

    Nie mogę dojsc do ładu z programem. Mam taką klasę:
    Kod:
    
    public class Czlowiek {
        
          private int ID;
          private String imie;
          private String nazwisko; 
          private String Peesel;
          private String data;
          static ArrayList<Ocena> ListaOcen = new ArrayList<Ocena>();
        
       public Czlowiek(){             
    
             }    
    
          public Czlowiek(int ID, String imie, String nazwisko, String p1,String data) {
    
                this.ID = ID;
                this.imie = imie;
                this.nazwisko = nazwisko;
                this.data = data;
                this.Peesel = p1;
                         
            }
    Po zainicjowaniu Człowiek1, Człowiek2, Człowiek3 i dodaniu paru ocen metodą
    Kod:
    ListaOcen.add(o)
    gdzie o jest ofc. oceną, oraz wyswietleniu w taki sposób:

    Kod:
     
    System.out.println("T1 " + Człowiek1.ListaOcen.size());
           System.out.println("T2 " + Człowiek2.ListaOcen.size());
            System.out.println("T3 " + Człowiek3.ListaOcen.size());
    Wyskakuje mi:
    T1 5
    T2 5
    T3 5

    Nie robi mi dla każdego czlowieka osobnej arraylisty, why ?

  2. #2
    Avatar KrystianeK
    Data rejestracji
    2005
    Położenie
    .
    Wiek
    33
    Posty
    1,147
    Siła reputacji
    19

    Domyślny

    Kod:
    Człowiek1.ListaOcen.size()
    wyświetla Ci rozmiar arrayList, czyli krótko mówiąc ile elementów zawiera.

    Do wyświetlenia elementów listy najlepiej wykorzystać pętle foreach (nie wiem czy jest ona w Javie, ja korzystałem z niej w C#), bądź zwykły for, gdzie lecisz po indeksach (od zera do (rozmiar tablicy - 1)). Poprawcie mnie jeśli się myle.

    @Edit
    Pętla for each w Javie: klik.
    Ostatnio zmieniony przez KrystianeK : 29-01-2014, 14:58

  3. Reklama
  4. #3
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    33
    Posty
    11,075
    Siła reputacji
    24

    Domyślny

    Pola statyczne są wspólne dla całej klasy, metody statyczne mogą być wywoływane bez obiektu.
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  5. #4

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    Pole statyczne jest jak wspomniał @zakius wspólne dla każdej instancji klasy. Generalnie nie polecam używania ich, podobnie jak metod statycznych ;p

  6. #5
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    33
    Posty
    11,075
    Siła reputacji
    24

    Domyślny

    Metody statyczne się przydają, wszystko, co nie musi operować na danym obiekcie. Albo klasy abstrakcyjne typu tools.

    Pola statyczne czasami również mogą się przydać, jakiś licznik obiektów danej klasy czy coś.
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  7. #6

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    Cytuj zakius napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Metody statyczne się przydają, wszystko, co nie musi operować na danym obiekcie. Albo klasy abstrakcyjne typu tools.

    Pola statyczne czasami również mogą się przydać, jakiś licznik obiektów danej klasy czy coś.
    Trzy szybkie zarzuty:
    - Tracisz możliwość testowania
    - Tracisz możliwość podmiany implementacji on-runtime
    - "Klasy abstrakcyjne typu tools" są w zasadzie programowaniem proceduralnym ( nie mówiąc o łamaniu SRP, ale sądząc po tym co pisałeś w Programowaniu Obiektowym, nawet nie ma już co tego tematu z Tobą tykać ;p )

    Jak potrzebuje wykonywać jakieś ,,operacje typu tools" ( tzw. Utility Classes :D ) to najczęściej wiem, że można zrobić to lepiej, wiele tego typu ,,operacji" to np castowanie między typami które można zrealizować przez przeciążanie operatorów. Jeśli potrzebujemy wykonać coś bardziej wyrafinowanego, należy pomyśleć o wydelegowaniu osobnego interfejsu do zadania.

    @Edit
    Zapomniałbym - licznik instancji to chyba jeden z nielicznych przykładów gdzie faktycznie użycie statycznych zmiennych ma jakikolwiek sens, chociaż w prawie dziesięcioletniej karierze programisty nie potrzebowałem tego robić xD

  8. #7
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    @up
    ja w mojej karierze programisty, która jeszcze raczkuje, musiałem korzystać z pól statycznych. To bylo w sytuacji, kiedy wszystkie obiekty tej samej klasy musiały korzystać z jednej tablicy.
    @Havaran ; mam pytanko apropo metod statycznych i C# konsolowego. Dlaczego każda metodą, którą pisałem poza metodą main, musi być statyczna?

  9. #8

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    @Kusterek jak to ,,musi"? Przykład podaj, jak wrócę do domu zerknę

  10. #9
    Avatar Gray
    Data rejestracji
    2007
    Położenie
    Gdańsk
    Posty
    2,847
    Siła reputacji
    18

    Domyślny

    Cytuj Kusterek napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    @Havaran ; mam pytanko apropo metod statycznych i C# konsolowego. Dlaczego każda metodą, którą pisałem poza metodą main, musi być statyczna?
    Nie jestem Havaranem, ale też mogę odpowiedzieć ;d

    Dzieje się tak, bo sama metoda Main jest statyczna i nie ma utworzonego obiektu, a więc nie może używać żadnych innych niestatycznych metod tej klasy, które już obiektu wymagają. Gdybyś stworzył obiekt tej klasy w której jest Main, to będziesz mógł z niego wywoływać normalne (niestatyczne) metody.

  11. #10
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    @Havaran ;
    główna klasa programu od linii 140
    http://wklej.org/id/1255243/

    Ale juz Gray wyjaśnił o co chodzi :P Ja uczyłem się programować na C/C++ i dlatego miałem wielkie zdziwko, że tutaj muszę dawać static przed funkcjami :P Ale jak wiadomo C# jest już w pełni obiektowy więc to co napisał Gray jest nawet logiczne ;>

  12. #11

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    Cytuj Kusterek napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    @Havaran ;
    główna klasa programu od linii 140
    http://wklej.org/id/1255243/

    Ale juz Gray wyjaśnił o co chodzi :P Ja uczyłem się programować na C/C++ i dlatego miałem wielkie zdziwko, że tutaj muszę dawać static przed funkcjami :P Ale jak wiadomo C# jest już w pełni obiektowy więc to co napisał Gray jest nawet logiczne ;>
    w C++ też nie możesz ;p o ile pamietam , to by nie miało sensu w żadnym modelu obiektowym

  13. #12
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    Cytuj Havaran napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    w C++ też nie możesz ;p o ile pamietam , to by nie miało sensu w żadnym modelu obiektowym
    no wlasnie w C++ zadnego problemu nie ma. Tam funkcja główna nie jest w żadnym obiekcie, więc bez sensu tworzyć zmienną globaln

    Patrz na kod:
    Kod:
    void intro()
    {
    	cout << "\nJAN KAMINSKI" << endl;
    	cout << "\n\nSYSTEM EKSPERCKI" << endl;
    	cout << "Dobor programu prania ubran ze wzgledu na zroznicowanie i stopien zabrudzenia ubran.\n" << endl;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	intro();
    	return 0;
    }

  14. #13

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    Mylisz pojęcia funkcji i metody. Funkcja może istnieć bez obiektu i nie musi być żadnemu obiektowi przypisana ( jak twoje intro() w kodzie który podałeś ). W C# nie ma czegoś takiego jak ,,funkcja". Są tylko metody przypisane odpowiednim klasom, toteż nie można w C# zrobić czegoś w stylu:
    Kod:
    intro();
    Można jedynie uruchamiać metody dynamiczne z instancji obiektów znajdujących się w scopie danej metody innego obiektu, czyli:
    Kod:
    MojaKlasa.MojaMetodaStatyczna();
    lub:
    Kod:
    Obiekcik obiekt = new Obiekcik(); //Nie pamietam czy operator new jest w C# xD
    obiekt.mojaSuperMetoda();

  15. #14
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    Znam dobrze różnicę między funkcją a metodą ;P
    Z racji, że C# jest wpełni obiektowy i wszystko jest w klasie to nawet main jest metodą. Dziwiły mnie tylko, że w C# konsoli musi być main statyczny jak i każda metoda w tej klasie musi być statyczna (jezeli ofc chcemy ja wywolac bez tworzenia obiektu)

    Jednak powiem Ci, że jak kodziłem aplikację WPF albo Modern UI w C# to nie musiałem tworzyć metod statycznych, tak jak w przypadku C# konsola. Przyklad:
    metoda:
    Kod:
    private void ZadajPytania(int pom)
            {
                PytanieBlock.Text = BazaPytan[pom].zapytanie;
                button1.Content = BazaPytan[pom].przycisk1;
                button2.Content = BazaPytan[pom].przycisk2;
            }
    wywołanie:
    Kod:
    public MainWindow()
            {
                StworzBazeSamochodow();
                StworzBazePytan();
                InitializeComponent();
                ZadajPytania(numer_pytania);
            }
    a wszystko to oczywiscie w klasie:
    Kod:
    public partial class MainWindow : Window
        { 
             ...
        }
    Dlatego bardziej przemawia do mnie tłumaczenie Gray'a, że jeżeli sam main jest statyczny to nie moze korzystac z zadnych niestatycznych metod tej klasy.

  16. #15

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    @Edit
    w MainWindow() jesteś w kontekście obiektu przecież, więc po prostu callujesz metodę.

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Odpowiedzi: 11
    Ostatni post: 09-02-2014, 22:16
  2. [C++] Konstruktor kopiujący
    Przez hefalump w dziale Programowanie
    Odpowiedzi: 1
    Ostatni post: 28-10-2013, 22:03
  3. C++ Pole prostokąta i kwadratu + konstruktor.
    Przez Zakon w dziale Szkoła i nauka
    Odpowiedzi: 6
    Ostatni post: 10-11-2012, 13:45
  4. ArrayList w Javie, edycja obiektu.
    Przez coke w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 0
    Ostatni post: 10-10-2012, 22:08
  5. TibiaME Java Beta Test
    Przez Halius w dziale Niusy
    Odpowiedzi: 18
    Ostatni post: 01-09-2006, 10:39

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •