Jakie są sposoby na czytelny kod w przypadku obszernych tablic?

0

Witajcie. Jestem początkujący, chciałbym dowiedzieć się w jaki sposób budować programy (na androida), jeśli przykładowo w tym momencie robię prosty program, który musi mieć w kodzie tablicę, która ma 4 kolumny, a wierszy 300, a żeby było fajniej, takich tablic będę miał 10. Czy mogę te 10 tablic rozłożyć na 10 plików .java i później w prosty sposób używać tych tablic? Czyli w klasie OknoGlowneProgramu.java będę używał tablic z plików: tablica1.java, tablica2.java, tablica3.java i tak dalej. Jeśli tak mogę, to co potrzeba? Stworzę sobie te pliczki .java i w każdym z nich dam tablicę pod public, wypełnię ją, a później będę mógł używać ich w kodzie głównym po przez przykładowo tablica1.mojaTablica[34][2];, czy inaczej się to robi?
Przepraszam, że pytam o takie rzeczy, które dla was na pewno są banalne, ale forum z tym działem po coś istnieje, nauczę się czegoś dzięki wam, będę szczęśliwy jeśli spróbujecie mi pomóc. Przepraszam, że wam zabieram czas i od razu dziękuję za wszelką pomoc. Pozdrawiam i życzę wam podwyżki w pracy.

2

Jeśli musisz gdzieś w kodzie deklarować taką tablicę to na 100% robisz cos bardzo, bardzo źle. A jak potrzebujesz takich tablic 10 to już ewidentnie coś skopałeś na poziomie projektu. Zacznij może od tego co chcesz osiągnąć.
Bo bardzo często ludzie pytają tu na forum o to jak rozwiązać jakiś bardzo dziwny problem (jak twój), który wynika tylko z tego że próbują coś zrobić w bardzo zły sposób. Zamiast spytać "jak zrobić XYZ" wymyślają jakieś wydumane rozwiązanie dla XYZ które wymaga cudów na kiju a potem na forum pytają "jak zrobić cuda na kiju" ;]

Niemniej: teoretycznie gdyby te tablice były statyczne to mógłbyś się tak do nich odnosić. Ale to na pewno nie jest dobra droga.

0

O matko, nie rób tak.

Przede wszystkim zamiast tablic używają kolekcji np. ArrayList.

Po drugie czy na pewno potrzebujesz tablicy dwuwymiarowej, a nie możesz zrobić jednowymiarowej kolekcji jakiejś własnej klasy z czterema elementami w stylu:

public class Obiekt {
int cos;
int cos2;
...
}
List<Obiekt> lista = new ArrayList<Obiekt>;
0

Aha. Cieszę się, że szybko udzieliliście się tutaj. Miło z waszej strony.

Dla uproszczenia program ma wyglądać tak, że:

  • będzie w nim np. okno główne programu + 4 okna dodatkowe + DodatkoweOknoZInformacjami.
  • w każdym oknie dodatkowym będzie jeden GridView, który będzie miał listę powiedzmy 40 samochodów
  • kliknięcie na danym itemie w gridview spowoduje odpalenie okna DodatkoweOknoZInformacjami jednocześnie przekazując temu oknu numer klikniętego itemu z GridView oraz numer okna dodatkowego (np. 1).
  • na podstawie tych danych, te DodatkoweOknoZInformacjami wybierze sobie np. tablicę numer jeden i wiersz dwudziesty trzeci i wyświetli trzy informacje z 3 kolumn.
    Mam nadzieję, że zrozumieliście przykład. Po prostu w klasie (pliku .java) tego DodatkowegoOknaZInformacjami chcę trzymać tablice lub cokolwiek innego co je zastąpi. Tam ma być po prostu zgromadzona cała wiedza o danych rzeczach. Mówicie, że tablice to fatalny pomysł i na pewno macie rację, bo wy macie doświadczenie, a ja go nie mam w ogóle, dlatego teraz proszę was byście mi ostatecznie napisali czym zastąpić te przykładowe cztery tablice (bo muszę gdzieś trzymać sporo drobnych stringów, a tablica wydawała się przejrzysta, choć zaśmiecająca miejsce w kodzie. Aha i te informacje w tych tablicach są stałe, niezmienne, z góry wypełnione w kodzie .java. Dla uproszczenia możecie sobie też wyobrazić, że macie tablicę o nazwie "Pracownicy", która ma 3 kolumny "imię", "nazwisko", "nr telefonu", a pracowników będzie 200, dane będą z góry wypełnione (w programie nie będzie opcji ich zmiany))
0

Ok, tak jak myśleliśmy. Dawno temu wymyślono juz coś takiego jak Klasy i Struktury, które służą do grupowania danych ze względu na ich powiazanie a nie ze względu na typ. Bo wygodniej jest zrobić klasę:

class Osoba{
    private String imie;
    private String nazwisko;
    private String nrTelefonu;
}

A potem operować sobie na tablicy obiektów Osoba np.

Osoba[] tablica =...

Osoba zbyszek = tablica[i];
zbyszek.getImie(); //imie zbyszka!

Niż na tablicach samym imion czy nazwisk.

Dodatkowo taka klasa może przechowywać też obiekty innych klas więc możesz mieć

class Osoba{
    private String imie;
    private String nazwisko;
    private String nrTelefonu;
    private Adres adres;
}

class Adres{
    private String ulica;
    private String miasto;
}

Dzięki temu w kodzie możesz operować obiektami związanymi z dziedziną programu a nie jakimiś tablicami stringów czy intów.

0

Nie programuje w Java tylko w innym języku więc poniższy kod może zawierać drobne błędy. Jednak tak jak mówili inni powinieneś postąpić w taki sposób. Czyli utworzyć klasę Pracownik i trzymać każdego pracownika w Liście.

Osobiście uważam, że porwałeś się z motyką na słońce ponieważ osoba, która nie wie co to jest klasa nie napisze dobrej aplikacji na androida. Napotkasz dziesiątki problemów i nie będziesz w stanie ich rozwiązać. Więc jeśli możesz to radzę przejść do podstaw a potem się brać za bardziej zaawansowane rzeczy.

class Pracownik
{
   public string imie;
   public string nazwisko;
   public string telefon;

  public Pracownik(string imie, string nazwisko, string telefon)
  {
      this.imie = imie;
      this.nazwisko = nazwisko;
      this.telefon = telefon
   }
}

List<Pracownik> pracownicy= new List<Pracownik>();
pracownicy.Add(new Pracownik("Ala", "Kowalska", "0700....");
0

@Shalom aha, dziękuję, czyli mam zrobić klasę, a następnie stworzyć tablicę takich obiektów, czyli np. 300 elementów i następnie w kodzie mam sobie wypełnić ten obiekt danymi w stylu tablica[0].imie = "Jan";?
I to będzie czytelniejsze w kodzie niż tablice wg ciebie? Bo nie potrzebuję odwoływać się przez zbyszek.getImie();, bo pracowników listy nie robię, te dane, którymi wypełnię wszystko to będą jakieś numery i paro zdaniowe stringi, czyli jak ta twoja klasa ma 3 elementy, to np. pierwszy element u mnie będzie miał wartość np: "FR435", a pozostałe dwa elementy to string dwu zdaniowy. Jeśli tych elementów ma być 300, to w kodzie .java będę musiał podać np. 3*300 = 900 stringów, czyli i tak kod strony po wszystkim będzie wyglądał podobnie jak do tablicy 2d, bo scrollować w dół będę musiał i tak, bo sporo danych to jest. Ale mimo to radzisz mi od razu mieć tę klasę z trzema stringami i tyle?
(sam użytkownik programu nie będzie miał opcji wprowadzania danych i ich zmiany, jedynie będzie widział te sztywno wpisane w kod źródłowy programu dane, konkretne dane).

Ciszę się, że poświęcacie czas dla mnie i uczycie mnie nowych rzeczy. To co mi podaliście, zapisuję sobie w plikach tekstowych, by później to przećwiczyć, zobaczyć jak się tego używa, a w przyszłości w razie czego zerknąć tam by przypomnieć sobie.

@Świetny Młot
ładnie wygląda ten kod, który dałeś :)

0

Ja bym te dane ładował z jakiegoś pliku tekstowego albo bazy danych z nie wpisywał w kodzie. Bo co jak będziesz chciał coś na szybko dodać? Rekompilować projekt? Bez sensu.

0

@Shalom a te bazy danych są proste na androida? I są offline? (bez netu). Programy na androida i tak mają obrazki i wszelkie zasoby wrzucone jako cała paczka .apk, czyli .apk, to jeden pliczek, czyli jakbym coś miał dodawać do listy (a dodawać nie będę, bo to sztywne dane, niezmienne, które nawet za 50 lat nie będą musiały zostać zaktualizowane) cokolwiek, to i tak musiałbym program zbudować do apk i wgrać go na nowo na telefonie (update). Co innego gdyby program mógł korzystać z netu, to wtedy mógłby się łączyć z bazą mysql na serwerze jakimś, ale ja stanowczo nie chcę internetu mieszać do programu, to ma być program offline, danych może sporo jest, ale wprowadzić je muszę z góry jednorazowo, skompilować program i tyle. Teraz po przeczytaniu mojego postu co radzisz ostatecznie?

0

MySQL na Androida? Chryste panie.

0

aha, fajny ten SQLite, ale nie będę używał w tym projekcie, bo to nie program do wprowadzania danych więc szkoda mi czasu na naukę sqlite, spróbuję użyć jednego z waszych poprzednich kodów, np. to co podał pracownicy.Add(new Pracownik("Ala", "Kowalska", "0700...."); bo ładnie wygląda taka linijka

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