klasa przechowujaca tablice

0

Witam.
Szukam rozwiązania już od ponad tygodnia, to jest w zasadzie proste ale ja dopiero zaczynam Jave. Moj problem polega na przechowaniu w jednej klasie tablicy obiektów innej klasy.
moja klasa main

 
public class Main
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
     Main run = new Main();
     run.dodaj();
     run.viev();
     
    }
    public static void dodaj()
    {
        tab1 dostep = new tab1();
        dostep.tab[0].liczba = 1;
        dostep.tab[0].tekst = "tekst";
        dostep.tab[1].liczba = 2;
        dostep.tab[1].tekst = "tekst2";
    }
    public static void viev()
    {
        tab1 dostep = new tab1();
        System.out.println(dostep.tab[0].liczba);
        System.out.println(dostep.tab[0].tekst);
        System.out.println(dostep.tab[1].liczba);
        System.out.println(dostep.tab[1].tekst);
    }
}

klasa z tablica

 
public class tab1
{
    public static int licznik;
    public static dane[] tab = new dane[2];
}

klasa z obiektami do przechowania

 
public class dane
{
    public static int liczba;
    public static String tekst;
}

i problem polega na tym ze gdy uruchomię program wyświetla mi się takie coś:

2
tekst2
2
tekst2

a chciał bym żeby było coś takiego

1
tekst
2
tekst2

ogoleni chodzi o to ze jak ustawiam kolejny index tablicy to i tak jest wyświetlany ostatni dodany. Wie ktoś gdzie robię błąd?

0

wg mnie problem tkwi w tym że masz pola statyczne

ustawiając je ustawiasz pola na poziomie KLASY a nie jej instancji, więc zawsze się odwołujesz do tych samych pól.

0

Jak nie miałem pól statycznych to wyświetlało mi dla String "null" a dla int 0. Z tego co gdzieś wyczytałem wynikało ze dodając to static ustawiam te zmienne w pewnym sensie jak "globalne" i mam pełen dostęp do nich.

1

Wyrzuć te static w cholerę!!!

Swoją drogą static oznacza pole powiązane z klasą, a nie obiektem tej klasy.

Wyrażenie:
dostep.tab[0].liczba = 1;

Powinno być podkreślone na żółto w NetBeansie (czy tam w Eclipsie), jako że odwołujesz się do statycznego pola za pomocą referencji do obiektu, a nie za pomocą identyfikatora klasy.

obiekt.statycznePole da taki sam efekt jak KlasaTegoObiektu.statycznePole

Poza tym naucz się hermetyzacji - w Javie wszystkie pola powinny być private, czy tam protected ale na pewno nie public. Dostęp powinien być za pomocą getterów i setterów.

Kolejna sprawa to to, że w view i dodaj tworzysz dwa odrębne obiekty, a więc ich pola (czyli te bez modyfikatora static) to osobne twory - dlatego dostawałeś null. Musisz utworzyć jeden obiekt, zapamiętać go, a potem używać (np przekazując jako parametr).

Kup sobie jakąś książkę do postaw Javy człowieku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1