Okei, teen omaan käyttöön yksinkertaista tietokanta ohjelmaa, joka lisää, poistaa ja tulostaa tietokannassa olevia kohteita. Tällä hetkellä ohjelma toimii ihan hyvin, mutta haluasin kysyä kuinka voisin siistiä ja lyhentää koodia. Olen aika uusi Javan kanssa, mutta ohjelmointi ei ole uutta.
Tällä hetkellä tietokannasta haettu tieto tallennetaan kolmeen taulukkoon:
private String TyyliTaulukko[]; private String NimiTaulukko[]; private int IdTaulukko[];
Joista sitten haetaan tiedot for-silmukassa. Haluasin nytten muuttaa nämä kolme yhdeksi taulukoksi, josta voisin hakea tiedot. Tiedän että Javassa voi luoda moni-dimensionaalisia taulukoita, mutta nämä taulukot ovat vai nyhdelle tyypille ja kuten näette, kaksi on String tyyppiä ja yksi on int. Luin myös vector taulukoista, jotka ovat tuttuja sinänsä, mutta itse en ole varma kuinka saisin helposti tallennettua tiedot sellaiseen...
EDIT
Ai niin, kävi itselläkin mielessä luoda struct johon tiedot voisi tallentaa ja sitten luoda taulukko johon nämä structit voisi tallentaa. Ilmeisesti kuitenkin Javassa ei ole struct rakennetta? Luin silti jostain, että voisi olla mahdollista luoda pieni luokka, jossa olisi vain nämä muuttujat julkisina (public)?
Googlaappas ArrayListiä.
Ei millään pahalla, mutta tuo ei auttanut yhtään. Juu, ArrayList kyllä selitettiin, mutta en oikein ymmärtänyt kuinka tuo auttaa... Siis haluasin nuo kaikki kolme taulukkoa muutettua yhdeksi taulukoksi, ettei kaikkia kolmea tarvitse kirjoittaa erikseen jokainen kerta kun tarvitaan, vaan riittää että haettaisiin vain yksi taulukko, josta poimitaan haluttu alkio.
Wsim. alkiossa ovat nuo Id, Nimi ja Tyyli. Niin jos haluan tulostaa niistä tieto niin sen sijaan että kirjoittaisin:
IdTaulukko[kohta] NimiTaulukko[kohta] TyyliTaulukko[kohta]
olisikin
Taulukko.at(kohta).Id Taulukko.at(kohta).Nimi Taulukko.at(kohta).Tyyli
Tai tuohon tyyliin. Ei ehkä sinänsä mikään parannus, mutta jos haluaa vaikka siirtä nuo tiedot jonnekkin funktioon, niin haluasin tämän:
funktio(IdTaulukko, NimiTaulukko, TyyliTaulukko)
sijaan kirjoittaa
funktio(Taulukko)
Mande kirjoitti:
Luin silti jostain, että voisi olla mahdollista luoda pieni luokka, jossa olisi vain nämä muuttujat julkisina (public)?
Toki on mahdollista, ja kannattaakin tehdä sellainen. Yleensä on kätevää laittaa sille lisäksi muodostin (konstruktori), jolle voi syöttää arvot. Muista myös, että jokainen olio pitää Javassa luoda new'llä, eli pelkän taulukon varaaminen ei riitä.
Macron mainitsema ArrayList ei liittynyt itse ongelmaan, mutta suosittelen kyllä sen käyttöä, jos taulukon koko ei ole etukäteen tiedossa.
Hmm, okei tuo on hyvä pointti, sillä taulukon koko voi muuttua kun uusia alkioita lisätään/poistetaan ohjelmassa jotenka koko vaihtelee riippune tilanteesta.
Mutta kiitos vastauksesta, taidan tehdä tuolla luokka tekniikalla ja sitten luoda ArrayListin johon nuo tiedot tallennetaan
Moi Mande!
testaa oheisen esimerkin mukaista viritelmää...
import java.awt.*; public class ObjectArrayTest extends Frame{ private String TyyliTaulukko[]; private String NimiTaulukko[]; private int IdTaulukko[]; public static void main(String[] args) { ObjectArrayTest ObjectArrayTest = new ObjectArrayTest(args); } public ObjectArrayTest(String[] args){ super("ObjectArrayTest"); this.TyyliTaulukko = new String[10]; this.NimiTaulukko = new String[10]; this.IdTaulukko = new int[10]; for(int i=0;i<TyyliTaulukko.length;i++){ TyyliTaulukko[i] = "Tyyli" + Integer.toString(i); NimiTaulukko[i] = "Nimi" + Integer.toString(i); IdTaulukko[i] = i; } Object MyArray[][] = getMultiArray(TyyliTaulukko, NimiTaulukko,IdTaulukko); for(int i=0;i<MyArray.length;i++){ String tyyli = MyArray[i][0].toString(); String nimi = MyArray[i][1].toString(); int id = Integer.parseInt(MyArray[i][2].toString()); System.out.println("Tyyli[" + i + "]: " + tyyli); System.out.println("Nimi[" + i + "]: " + nimi); System.out.println("ID[" + i + "]: " + id); } } public Object[][] getMultiArray(String[] arr1, String[] arr2, int[] arr3) { Object MultiArray[][] = new Object[arr1.length][3]; for(int i=0;i<arr1.length;i++){ MultiArray[i][0] = arr1[i]; MultiArray[i][1] = arr2[i]; MultiArray[i][2] = arr3[i]; } return MultiArray; } }
yhteen putkeen...
import java.awt.*; public class TypeTest extends Frame{ private String TyyliTaulukko[]; private String NimiTaulukko[]; private int IdTaulukko[]; public static void main(String[] args) { TypeTest TypeTest = new TypeTest(args); } public TypeTest(String[] args){ super("Type Test"); this.TyyliTaulukko = new String[10]; this.NimiTaulukko = new String[10]; this.IdTaulukko = new int[10]; for(int i=0;i<TyyliTaulukko.length;i++){ TyyliTaulukko[i] = "Tyyli" + Integer.toString(i); NimiTaulukko[i] = "Nimi" + Integer.toString(i); IdTaulukko[i] = i; } Object MyArray[] = getObjectArray(TyyliTaulukko, NimiTaulukko, IdTaulukko); int cnt = (MyArray.length / 3);; for(int i=0;i<MyArray.length;i++){ if(i < cnt)){ System.out.println("Tyyli[" + i + "]: " + MyArray[i].toString()); } else{ if (MyArray[i] instanceof String) { System.out.println("Nimi[" + (i - cnt) + "]: " + MyArray[i].toString()); } else if(MyArray[i] instanceof Integer){ System.out.println("ID[" + (i - (cnt * 2)) + "]: " + Integer.parseInt(MyArray[i].toString())); } } } } public Object[] getObjectArray(String[] arr1, String[] arr2, int[] arr3) { int newlen = arr1.length + arr2.length + arr3.length; int alen = (newlen / 3); int cnt1 = 0; int cnt2 = 0; int cnt3 = 0; Object objectArray[] = new Object[newlen] ; for(int i=0;i<newlen;i++){ if(i < alen){ objectArray[i] = arr1[cnt1]; cnt1++; } else if((i >= alen && i < (alen * 2)){ objectArray[i] = arr2[cnt2]; cnt2++; } else{ objectArray[i] = arr3[cnt3]; cnt3++; } } return objectArray; } }
Aihe on jo aika vanha, joten et voi enää vastata siihen.