Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Taulukko apua

Mande [04.02.2012 10:55:29]

#

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)?

Macro [04.02.2012 11:35:50]

#

Googlaappas ArrayListiä.

Mande [04.02.2012 12:29:26]

#

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)

Metabolix [04.02.2012 12:42:37]

#

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.

Mande [04.02.2012 12:57:19]

#

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

neau33 [04.02.2012 13:40:43]

#

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;
    }
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta