Wypełnienie rozszerzającej się tablicy

0

Chciałabym, aby mój program zapisywał dane (nieliczbowe) do tablicy, która będzie się rozszerzała przy dodaniu kolejnego elementu.
Najważniejsze jest to, żeby tablica nie zawierała nullów, algorytm powinien sprawdzać od początku czy jest coś zajęte i zaraz po tym dodać kolejne - nie rozszerzać niepotrzebnie tablicy.
Aktualnie mam w swoim programie tablice, która jest określona [50] i robię to ifami, ta pętla zajmuje więcej niż mój cały program. Wygląda to tragicznie, ale nie mam zielonego pojęcia jak skonstruować taki algorytm.

1

Średnio rozumiem o co Ci chodzi w każdym razie pytanie: nie możesz użyć jakichś kolekcji?

1

Musisz utworzyć tablicę o pojemności 51 i skopiować zawartość tab1[i] do tab2[i], a do ostatniej komórki wpisać nową wartość. Ale czy nie łatwiej będzie użyć jakieś listy?

0

Aktualnie mam takie coś.
Jak widać jest to dość głupie i źle działa
-zostawia wartości null i uzupełnia w kolejnym miejscu
-program z góry jest ograniczony
-mamy tu w dodatku tylko 6 elementów, a potrzebuję tyle ile użytkownik będzie chciał, na ogół około 50
O kolekcjach i listach jeszcze nic nie czytałam i chciałam to zrobić za pomocą tablicy, no chyba że nie da rady.
W miejsce xxx wpisywałam wartości żeby sprawdzić działanie.

	public static void main(String[] args) 
	{
		int n = 0;
		String[] mojatablica = new String[6];
	
		//mojatablica[XXX] = "wartosc";
		
			if (mojatablica[0] == null)
			{
				mojatablica[0] = "cos";
			}
			
			 else if (mojatablica[0] != null)
			{
				 mojatablica[1] = "cos";
			}
			
			 else if (mojatablica[0] != null && mojatablica[1] != null)
			{
				 mojatablica[2] = "cos";
			}
			 else if (mojatablica[0] != null && mojatablica[1] != null && mojatablica[2] != null)
			{
				 mojatablica[3] = "cos";
			}
			 else if (mojatablica[0] != null && mojatablica[1] != null  && mojatablica[2] != null && mojatablica[3] != null)
			{
				 mojatablica[4] = "cos";
			}
			 else if (mojatablica[0] != null && mojatablica[1] != null  && mojatablica[2] != null && mojatablica[3] != null && mojatablica[4] != null)
			{
				 mojatablica[5] = "cos";
			}
			 else if (mojatablica[0] != null && mojatablica[1] != null  && mojatablica[2] != null && mojatablica[3] != null && mojatablica[4] != null && mojatablica[5] != null)
			{
				 mojatablica[6] = "cos";
			}
			
			for (String a : mojatablica)
			System.out.println(a);

	}



1

Może napisz więcej co ten program ma robić. Jeśli rozmiar tablicy znasz na początku to możesz utworzyć tablicę o takim rozmiarze. Uwaga do tych ifów: jeśli n + 1 jest true to jednocześnie n jest true zatem nigdy tam nie wejdziesz. Dodatkowo pomyśl o jakiejś pętli.

2

Poczytaj sobie na temat metody length(). Jeśli trafisz na nula - wpisz w to miejsce Stringa. Jeśli dojdziesz do końca tablicy, to stwórz nową, większa, skopiuj istniejące elementy i na nowe miejsce dodaj Stringa. Polecam zrobić metodę "copy" która jako parametry będzie przyjmowała dwie tablice i kopiowała elementy z jednej do drugiej, lub użyć już istniejącej funkcji arraycopy.

1

A nie możesz po prostu zapamiętać indeksu ostatnio dodanego elementu?
Na początku indeks byłby 0 a jak trzeba będzie dodać nowy element dodajesz go pod ten indeks i zwiększasz o 1.

Jeśli jednak usuwasz coś ze środka to napisz funkcję z pętlą szukającą nulla jeśli go znajdzie pętla się przerywa i zwraca indeks pierwszego wolnego miejsca.

0

Za pomocą przycisku pobieram ostatnią lokalizację i stawiam Marker na mapie, za pomocą drugiego przycisku chcę je wszystkie ukryć(Markery).
Dlatego wymyśliłam, żeby je umieszczać w tablicy, a później dla każdego elementu tablicy wywołać metodę setVisible(false), gdy metoda ta zostanie wywołana na nullu to program się wysypuje, dlatego tak to ma wyglądać.

1

hmm to czemu nie możesz sprawdzić przed wywołaniem setVisible(false) czy obiekt, który chcesz ukryć nie jest nullem?

0

a jak napisać taki warunek dla tablicy o niewiadomej ilości elementów,np. n ?

String[] mojatablica = new String[n];
1
public int getFirstFreeIndex(String[] tablica){
    for (int i=0;i<tablica.length; i++){
        if (tablica[i] == null){
            return i;
        }
    }
    return -1; //wszystko zajęte
}

I voila, zamiast miliona ifów i skopiowanych linii masz jedną pętle która znajduje pierwszy nullowy element tablicy.
Ale tak poważnie to użyj po prostu List<String>

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