• Konténerek
  • Tömbök, String osztály, Vector osztály a Javaban Tömbök




    Download 62.12 Kb.
    Sana07.04.2017
    Hajmi62.12 Kb.

    Számítástechnika szigorlat 15-ös tétel:


    1. Tömbök, String osztály, Vector osztály a Javaban


    Tömbök


    A tömb referencia típusú változó, melyet deklarálnunk kell. Az elemtípus lehet akár primitív, akár referencia (osztály típusú vagy tömb típusú).

    Deklarálás:
    elemtípus [] tömbazonosító;

    vagy


    elemtípus tömbazonosító [];
    pl: int [] a;

    int b[];
    Az így deklarált változó képes egy, a megadott elemtípusú tömbre mutatni. Még csak a referenciának (memóriacímnek) foglaltunk helyet, a tömböt külön létre kell hoznunk.


    Létrehozás (futás közben):

    new elemtípus [méret]


    pl: a = new int[10];

    b = new int[20];


    Természetesen történhet rögtön a deklaráláskor is a létrehozás:

    String[] sArray = new String[50];


    Minden tömbnek van egy length konstansa.

    Indexelés: 0 .. length-1
    int[] iArray=new int[10];

    for(int i=0; i

    iArray[i]=Console.readInt("Az "+(i+1)+". szam: ");

    System.out.println("A tomb elemei visszafele: ");

    for(int i=iArray.length-1; i>=0; i--)

    System.out.print(iArray[i]+" ");


    Inicializáló blokk: deklaráláskor a tömb elemeinek kezdeti értékek adhatók, pl:

    int[] iArray={2, 4, 6, 8, 10};

    char[] szamjegyek={'0','1','2','3','4','5','6','7','8','9'}

    Ekkor nem kell a tömböt a new operátorral létrehozni, a {} blokk képző operátor megteszi ezt helyettünk. A tömb mérete pontosan akkora lesz, amennyi a felsorolt értékek száma.


    A t2 tömb értékadás szerint kompatibilis a t1 tömbbel (azaz t1=t2 megengedett), ha

    • primitív elemtípus esetén t1 és t2 elemtípusa azonos;

    • referencia elemtípus esetén t2 elemtípusa t1 elemtípusával azonos, vagy annak leszármazottja.

    Értékadáskor a tömb referenciája kap értéket, nem pedig az elemei (a tömb nem másolódik, hanem átíródik a mutatója), így különböző hosszúságú tömbök és értékül adhatók egymásnak.
    Kétdimenziós tömb:

    Deklarálás:



    elemtípus [][] tömbazonosító;
    Teljes kétdimenziós tömb létrehozása:

    new elemtípus [méret0] [méret1]

    Pl: int[][] matrix = new int[3][4];
    Lépésenkénti (soronkénti) létrehozás. A sorok különböző méretűek lehetnek:

    Pl: double[][] atlagok = new double[4][];

    atlagok[0] = new double[20];

    atlagok[1] = new double[18];

    atlagok[2] = new double[25];

    atlagok[3] = new double[22];


    Analóg a helyzet a többdimenziós tömbök esetén.
    Tömb paraméter.

    Formális paraméterként egy tömbreferenciát kell deklarálnunk, amely fogadja az aktuális tömb referenciáját. Az aktuális tömbnek értékadás szerint kompatíbilisnek kell lennie a formális tömbbel.



    Példa: Írjunk osztályt, amelynek adata egy int tömb. Az objektum létrehozásakor a konstruktor paraméterében adhassuk meg a tömb hosszát. Tartalmazzon egy bekér, kiir és egy osszeg nevű metódust!
    import extra.*;

    class Tomb{

    private int[]t;

    public Tomb(int hossz){

    t=new int[hossz];

    }

    public void beker(){



    for(int i=0;i

    t[i]=Console.readInt(i+1+". szam: ");

    }

    public void kiir(){



    for(int i=0;i

    System.out.print(t[i]+" ");

    System.out.println();

    }

    public int osszeg(){



    int s=0;

    for(int i=0;i

    s+=t[i];

    return s;

    }

    }//Tomb


    public class Tombok{

    public static void main(String[] args){

    Tomb t1=new Tomb(5);

    Tomb t2=new Tomb(7);

    System.out.println("Adja meg az elso tomb elemeit (5):");

    t1.beker();

    System.out.println("Adja meg a masodik tomb elemeit (7):");

    t2.beker();

    System.out.println("Az elso tomb:");

    t1.kiir();

    System.out.println("Az elemek osszege: "+ t1.osszeg());

    System.out.println("A masodik tomb:");

    t2.kiir();

    }

    }



    Konténerek


    A konténer olyan objektum, amely objektumokat tárol, és alkalmas különböző karbantartási, keresési és bejárási funkciók megvalósítására. A java.util csomagban helyet foglaló kollekció keretrendszer egy általános konténereket tartalmazó osztálygyűjtemény. Általánosan jellemző rájuk: ha bármilyen objektumot beteszünk egy konténerbe, az „elveszti az osztálytudatát”.
    Vector osztály

    „Változtatható méretű tömb”, amely rendelkezik a fenti funkciókkal.

    Mérete az elemek hozzáadásával automatikusan bővül.

    Elemei indexelhetőek.



    Elemei rendezetlenek (a Collections osztállyal lehet rendezni).
    Néhány metódusa:

     void

    add(int index, Object element)
              Inserts the specified element at the specified position in this Vector.

     boolean

    add(Object o)
              Appends the specified element to the end of this Vector.

     void

    clear()
              Removes all of the elements from this Vector.

     boolean

    contains(Object elem)
              Tests if the specified object is a component in this vector.

     Object

    get(int index)
              Returns the element at the specified position in this Vector.

     int

    indexOf(Object elem)
              Searches for the first occurence of the given argument, testing for equality using the equals method.

     int

    indexOf(Object elem, int index)
              Searches for the first occurence of the given argument, beginning the search at index, and testing for equality using the equals method.

     boolean

    isEmpty()
              Tests if this vector has no components.

     Object

    remove(int index)
              Removes the element at the specified position in this Vector.

     boolean

    remove(Object o)
              Removes the first occurrence of the specified element in this Vector If the Vector does not contain the element, it is unchanged.

     Object

    set(int index, Object element)
              Replaces the element at the specified position in this Vector with the specified element.

     int

    size()
              Returns the number of components in this vector.

     String

    toString()
              Returns a string representation of this Vector, containing the String representation of each element.


    Példa:

    import extra.*;

    import java.util.*;
    class Ember {

    private String nev;

    private int magassag;
    public Ember(String nev, int magassag) {

    this.nev = nev;

    this.magassag = magassag;

    }
    public Ember(String nev) {

    this(nev,0);

    }
    public String getNev() {

    return nev;

    }
    public int getMagassag() {

    return magassag;

    }
    public void setMagassag(int mag) {

    if (mag>0)

    magassag = mag;

    }
    public boolean equals(Object obj) {

    return nev.equals(((Ember)obj).getNev());

    }
    public String toString() {

    return Format.left(nev,10) + Format.right(magassag,3);

    }

    }//Ember osztály vége



    public class TorpeProgram {

    private Vector torpek = new Vector();


    // A torpék bevitele:

    void bevitel() {

    Ember torpe;

    String nev = Console.readLine("\nTorpe neve: ");

    while (!nev.equals("")) {

    if (torpek.contains(torpe = new Ember(nev)))

    System.out.println("Van mar ilyen torpe!");

    else {


    torpe.setMagassag(Console.readInt("magassaga : "));

    torpek.add(torpe);

    }

    nev = Console.readLine("Torpe neve: ");



    }

    }
    // Egyszerű lista, beépített módon:

    void lista1() {

    System.out.println("\nBeepitett lista:");

    System.out.println(torpek);

    }
    // torpek listázása index szerint, toString()-gel:

    void lista2() {

    System.out.println("\nLista index szerint:");

    for (int i=0; i

    System.out.println(torpek.get(i));

    }

    }
    // Listázás toString() nélkül:



    void lista3() {

    Ember e;


    System.out.println("\nEgyeni lista:");

    for (int i=0; i

    e = (Ember)(torpek.get(i));

    System.out.println("Nev: "+e.getNev()+

    " Magassag: "+e.getMagassag());

    }

    }


    // Egy törpe megkeresése:

    void kereses() {

    System.out.println("\nKereses:");

    Ember keresettEmber = new Ember(

    Console.readLine("Torpe neve: "));

    int poz = torpek.indexOf(keresettEmber);

    if (poz >= 0)

    System.out.println("Van, magassaga:"+

    ((Ember)(torpek.get(poz))).getMagassag());

    else


    System.out.println("Nincs ilyen");

    }
    public static void main(String[] args) {

    TorpeProgram tp = new TorpeProgram();

    tp.bevitel();

    tp.lista1();

    tp.lista2();

    tp.lista3();

    tp.kereses();

    }

    }
    Megjegyzések:


    1. A Vector osztály számos metódusa (pl. keresés a vektorban: indexOf) használja a benne lévő objektumok equals (egyenlő-e) metódusát az objektumok összehasonlítására. Ha a törpék vektorban név alapján akarok megkeresni egy törpét, akkor olyan equals metódust kell készítenem, mely a nevek azonosságát figyeli (van alapértelmezett equals metódus is, mely akkor ad igaz értéket, ha a két metódus azonos):
    public boolean equals(Object obj) {

    return nev.equals(((Ember)obj).getNev());

    }
    A paraméter (obj) általános Object típusú, ezt Ember típusúvá kell konvertálnunk: (Ember)obj . (Kér sztring összehasonlítása a String osztály equals metódusával történik.)
    A vektorban való kereséshez egy keresőobjektumot hozunk létre, mely csak a nevet tartalmazza (egyébként is csak azt ismerjük).
    Ember keresettEmber = new Ember(Console.readLine("Torpe neve: "));

    int poz = torpek.indexOf(keresettEmber);

    2. A vektorba betett, majd onnan kivett objektum elveszti az osztályát. Ha dolgozni szeretnénk vele, akkor vissza kell konvertálnunk a típusára (osztályára)
    e = (Ember)(torpek.get(i));//e már Ember típusú

    System.out.println("Nev: "+e.getNev() +" Magassag: "+e.getMagassag());


    vagy tömörebben:
    ((Ember)(torpek.get(poz))).getMagassag());


    Download 62.12 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa


    Tömbök, String osztály, Vector osztály a Javaban Tömbök

    Download 62.12 Kb.