Hirdetés

Keresés

Új hozzászólás Aktív témák

  • g4dg3t
    senior tag

    segitseget szeretnek kerni reflectionnel. suliba irok egy projektet, ami kulonbozo algoritmusokat hasonlit ossze (gyakorlatilag a futasi idejuket meri).
    az objektumstruktura ilyen:
    AbstractHeap<E>
    |
    BinaryHeap<E>
    na most ha kontkretan van egy ilyenunk:
    BinaryHeap<Integer>, akkor annak van egy olyan fuggvenye hogy Insert(Integer e)
    namarmost en szeretnek egy tesztelo objektumot, aminek lesz egy referenciaja a heap-re, es megmondom neki melyik metodust (pl Insert) milyen paramerekkel hivja meg, o lefuttatja, es megmondja meddig tartott neki. itt egy kod, hogy mit probaltam eddig:

    public long Test(String name, Object[] args) {
    long t1 = 0, t2 = -1;
    Class<?>[] c = new Class[args.length];
    for (int i = 0; i < args.length; i++)
    c[i] = args[i].getClass();
    t1 = System.nanoTime();
    heap.getClass().getMethod(name, c).invoke(heap, args);
    t2 = System.nanoTime();
    return t2-t1;
    }

    itt termeszetesen a heap egy private referencia. hasznalva igy lenne kb:

    HeapTester<Integer> tester = new HeapTester<Integer>(new BinaryHeap<Integer>());
    long ido = tester.Test("Insert", new Integer[] {4});

    namarmost itt az a problema (szerintem), hogy a heap.getClass() csak azt tudja, hogy BinaryHeap, es a <Integer> resz elveszik, igyaztan a getMethod mar azt mondja nem talalt olyan Insertet aminek Integer parameterei vannak (java.lang.NoSuchMethodException: heap.BinaryHeap.Insert(java.lang.Integer))
    most ugy oldottam meg, hogy a HeapTester osztalyban szetirtam az osszes metodust, amit tesztelni akarok, es csak meghivom azt a fuggvenyt a referencian keresztul, es visszaadom meddig tart, de ez igy nagyon nem szep, illetve eleg komplikalt lenne igy komplikaltabb teszteket (mondjuk 2-3 fajta implementacion hajts vegre sok insertet, deletet stb. es mindegyiknel jegyezd meg az idoket). a kerdes az, hogyan lehetne ezt megcsinalni, hogy mukodjon ahogy en gondoltam?
    koszi a segitseget elore is
    sorry, kicsit hosszu lett, remelem azert ertheto a gond

    namarmost itt az a problema (szerintem), hogy a heap.getClass() csak azt tudja, hogy BinaryHeap, es a <Integer> resz elveszik

    Igen, mert a generikussag futasi idoben mar nem letezik.

    Ha nem ragaszkodsz a jelenlegi koncepciohoz, akkor az AOP keretrendszerek kozott nezz szet (pl. AspectJ). Az adott feladathoz (metodus futasi idok merese) szvsz a legkulturaltabb megoldast ezekkel lehet osszehozni.

  • g4dg3t
    senior tag

    Én elég kezdő vagyok javában, és akárhogy nézem ezt nem tudok rájönni, hogy miért az a megoldás, ami :F Valaki el tudná magyarázni?

    CardPlayer c1 = new CardPlayer();

    Peldanyositas, tehat az oroklesi hierarchian vegighivja a konstruktorokat. Igy System.out-ra kiirodik: pc

    CardPlayer c2 = (CardPlayer) is.readObject();

    Itt ujra peldanyositas tortenik, de az ObjectInputStream mukodese miatt csak a nem-szerializalhato osztalyok konstruktora hivodik meg. (a szerializalhato osztaly peldanyszintu valtozoit, barmifele inicializalas nelkul egyszeruen visszaallitja a streambol)
    Igy csak a Player osztaly konstruktora fog hivodni, es System.out-ra vegul csak pcp kerul kiirasra.

  • g4dg3t
    senior tag

    Voltam már ilyen vizsgán és - habár ez a feladat különösen szivatós - alapvetően hasonló jellegű kérdésekből állt. Azaz a Java nyelv ismerete mellett egy kis logikázásra is szükség lesz. Azért nem kell megijedni ennél jóval könnyebbek is vannak és ha jól emlékszem 50% felett van meg a vizsga.

    Most 65% a hatar, de azert illene jobban teljesitenem. Az eddigi peldak alapjan azt latom, hogy eleg sok nyakatekert kerdes van, de ahogy te is irtad, a problemas pontok nagyon hasonloak...par gyakorlo teszt utan mar figyel ezekre az ember.
    Neked voltak swinges kerdesek a tesztsorban? Kliensoldalon meg sosem fejlesztettem java-ban (es nem is szeretnek)...nem bannam, ha ezekre nem kellene felkeszulnom.

  • g4dg3t
    senior tag

    SCJP-s tesztsorokat nezegetek par napja. Van par elmeroggyant pelda :)
    Egyik kedvencem:

    import java.io.*;

    class Player {
    Player() {
    System.out.print("p");
    }
    }

    class CardPlayer extends Player implements Serializable {
    CardPlayer() {
    System.out.print("c");
    }

    public static void main(String[] args) {
    CardPlayer c1 = new CardPlayer();
    try {
    FileOutputStream fos = new FileOutputStream("play.txt");
    ObjectOutputStream os = new ObjectOutputStream(fos);
    os.writeObject(c1);
    os.close();
    FileInputStream fis = new FileInputStream("play.txt");
    ObjectInputStream is = new ObjectInputStream(fis);
    CardPlayer c2 = (CardPlayer) is.readObject();
    is.close();
    } catch (Exception x) {
    }
    }
    }

    What is the result?
    A). pc
    B). pcc
    C). pcp
    D). pcpc
    E). Compilation fails
    F). An exception is thrown at runtime

    Futtatas es kis guglizas utan egyertelmu, de a vizsgan papir+ceruza komboval egy ilyen kerdest tuti bebuknek. Kivancsi vagyok mit szoltok ehhez.

  • g4dg3t
    senior tag

    van valakinek tippje arról, hogyan lehet egy Map-ból a kulcsot kiszedni?

    Map.keySet()

    visszaadja a kulcsok halmazat

Új hozzászólás Aktív témák