Hirdetés

Keresés

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

  • andriscs
    aktív tag

    Hát, egészségedre, én valahogy irtózom a JBuilder-től (*Builder-től)... Inkább legyél türelemmel és tanuld meg mélyebben. Látom legalább hagyott nyomot benned az Szglab4. :)

    Hi!

    Ja, nyomot hagyott bennem, örültem, hogy vége van :D
    Az oldal csak azért készült, hogy a webprogot gyakoroljam. De szeretnék még jobban érteni Java-hoz, mert már SzgLab3 alatt megtetszett :D
    Egyébként nekem Eclipse nagyon bejön, csak kicsit felhúzott az a LayoutManager dolog. Ha lesz türelmem, akkor jobban nekikezdek. :)

    [Szerkesztve]

  • andriscs
    aktív tag

    Visual Editor: Bővebben: link
    Amúgy kézzel sem nagy cucc, ha kitapasztalod kicsit hogy mit tud. Gyakorlatilag komponensenként max 2-3 sorban beállíthatod a paramétereket, ennyi szokott lenni.

    [Szerkesztve]

    Hi!

    És ha valami direkt Visual IDE-t használnék? Pl. JBuilder 9?

  • 5xl
    tag

    Ezzel a két fileban előforduló közös szavak problémájára javasolnék egy normális (értsd hatékony :) ) algoritmust:

    1. mindkét listát beolvasva pl. lexikografikusan rendezed őket egy-egy vektorba, legyenek ezek: v1, v2
    2. k=0, j=0
    3. do
    4. ha v1[k]<v2[j] akkor k++
    5. egyébként ha v1[k]>v2[j] akkor j++
    6. egyébként nyilvánvalóan v1[k]==v2[j] teljesül tehát találtunk egy közös elemet; k++, j++
    7. while k<v1.length && j<v2.length

    Az egyező elemeket a 6-os lépésben el lehet tenni egy másik vektorba.

    [Szerkesztve]

    köszi!

  • Miracle
    senior tag

    Gondoltam a HashSet-re, de elvetettem, mert az kezdőknek esetleg kevésbé érthető hogy mért jó az. :)
    Amire gondoltál az a HashSet, ilyen van, rendben. Elvileg a beillesztés/keresés O(1) idejű benne, de pl. telítettség függvénye a konstans szorzó és alapvetően elég nehéz megjósolni. Összességében tehát O(n+m) lépés lenne a HashSetes módszer. A rendezéses módszer garantált O(nlogn)+O(mlogm), meg még min(n,m) lépés.
    Attól függ hogy átlagban, vagy legrosszabb esetben hogyan kell teljesítenie az algoritmusnak. :)

    hat a java stringeknek brutalisan jo hash-algoritmusa van, szoval hogyha 32 biten >5% utkozest elo tudsz idezni egy gyuruk-ura _univerzumnal_ kisebb mennyisegu texttel akkor ___nagyon___ ajanlott volna vasarolnod egy lottot ;] nade viccet felreteve a te megoldasodon lehetne javitani, ha irank vektorokra egy radix-elore/radix-vissza rendezest es azt nyilvan nem teljes, hanem mondjuk atlagos melysegig rakuldjuk a vektorra, a maradekot meg sima quicksorttal rendezzuk :)

  • Miracle
    senior tag

    Ezzel a két fileban előforduló közös szavak problémájára javasolnék egy normális (értsd hatékony :) ) algoritmust:

    1. mindkét listát beolvasva pl. lexikografikusan rendezed őket egy-egy vektorba, legyenek ezek: v1, v2
    2. k=0, j=0
    3. do
    4. ha v1[k]<v2[j] akkor k++
    5. egyébként ha v1[k]>v2[j] akkor j++
    6. egyébként nyilvánvalóan v1[k]==v2[j] teljesül tehát találtunk egy közös elemet; k++, j++
    7. while k<v1.length && j<v2.length

    Az egyező elemeket a 6-os lépésben el lehet tenni egy másik vektorba.

    [Szerkesztve]

    eheh hat ez sztem nem tul optimalis megoldas ;)
    ime az en otletem:
    olvasod az egyik filet, es pakolod bele az elemeket gondolkodas nelkul 1 hashtable-be.
    aztan amikor vegeztel elkezded olvasni a masik filet, es minden szora rakeresel a hashtable-ben, ha megtalalod akkor kiirod kimenetre, (es ha csak egyszer kell kiirni akkor torlod a hashtable-bol, ha tobbszor is lehet akkor ez a zarojel targytalan) es olvasol tovabb :)
    ez kb 6 sor amit en most felvazoltam, es szerintem gyorsabb is, es kevesebb memo kell hozza, mint a ket vektoros megoldashoz :P

    szerk: hashtable helyett valamilyen set-szeru dologba megjobb volna, foleg ha hash-alapu, de nem tudom van-e ilyen adatszerkerkezet alapbol az APIban

    [Szerkesztve]

  • Terminus_
    aktív tag

    Az ok hogy a Java SDK megvan, én a Tomcat SDK-ra gondoltam. Feltételezvén hogy esetleg van egy verzió mindenféle fejlesztői kiegészítők nélkül, meg van az SDK-s verzió. Elképzelhető, hogy tényleg az installban kell bepipálni valamit.

    innét szedtem le a legújabb verziót windows binárisba:

    http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi

    Igazából a gányolós verzióban már megetettem vele, szóval ha más nem akkor egyenlóre így hagyom, aztán, ha más problémája is lesz akkor legyilkolom az egészet aztán újrapróbálom. Az igazság, hogy egyetlen servletet kellett megcsinálnom és az most úgy tűnik menni fog. Ha szórakozik velem, akkor úgyis megint visszatértek ;)

    Ezután lesz fincsi, ha a JSP-nél is eljátsza ezt velem...

    [Szerkesztve]

  • Terminus_
    aktív tag

    Akkor mit töltöttél le, amit apache tomcat néven terjesztettek, és nem volt benne ez a jar? Biztos hogy a megfelelő SDK-t, blabla?

    Nem tudom milyen Eclipse-et használtál, én kb 2 éve használom _nagyon_ sokat (2.1-től), és soha nem volt olyan amit egy editorablak-bezár-újranyit művelet nem oldott volna meg. Legrosszabb esetben egy clean project. Ne csináld már :)

    Tomcat 5.5, ahogy már mondtam és végigzúztam egy keresést a gépen, nem volt ilyen jar. Számomra is érthetetlen. Az SDK meg a már szintén fent említett J2EE SDK 1.4.10 (2005Q1). Ezek vannak fent. Eclipset meg felteszem valószínűleg, csak mostanában nem foglalkoztam java-val. Egyébként a 3.x-es Tomcatban benne van az a jar, onnét bányásztam ki...

    De akkor mindjárt lezúzom és visszarakom az egészet, megnézzük, hátha telepítésnél a ''next next next finish'' közben elnéztem valamit ;)

  • Terminus_
    aktív tag

    Egészen biztos vagy benne hogy van a servlet-api.jar-ban javax/servlet könyvár, ugye? Meg hogy pontos az elérési út? Javaslom, hogy inkább mindenhova használj slasht backslash helyett, windóz alatt is. Ha ezek megvannak, akkor érdekes...
    Amúgy a mérhetetlen produktivitás növekedés elősegítése érdekében javaslom, hogy használj egy jó IDE-t, és ne parancssorból szerencsétlenkedj. Én az Eclipse IDE-t használom mindenre. Ismerd meg azonnal, ha eddig nem tetted. :)

    [Szerkesztve]

    ''Egészen biztos vagy benne hogy van a servlet-api.jar-ban javax/servlet könyvár, ugye?''

    Nos, nem :) A servlet.jar kell nekem, csak az nincs a gépemen. Most így hirtelen rántottam le netről, azzal fordítva úgy tűnik megoldódik, csakhát ez kicsit nem elegáns megoldás...

    Én is Eclipseztem, mindaddig, amíg olyan sorokat alá nem huzogatott nekem meg szopatott, hogy nem hajlandó lefordítani, amit parancssorból simán fordítottam. És ezzel hosszú órákat szúrtam el, mire rájöttem, nem bennem van a hiba. NetBeans-szel meg az a bajom, hogy lassú. De igazad van, jó lenne egy IDE. Lehet felteszem a legújabb Eclipse-t, hátha javítottak rajta.



  • Terminus_
    aktív tag

    Jegyezd meg melyik osztállyal van baja a fordításnál, és azt keresd meg a jarokban.

    A classpath-ban amúgy 2 féle bejegyzés lehetséges:
    - ha könyvtárat adsz meg, akkor az azon belüli összes .class filet figyelembe veszi, rekurzívan, de a jarokat nem!
    - jart is megadhatsz, de egyszerre csak egyet.

    Tehát az általad megadott ''d:\Program files\Apache Software Foundation\Tomcat 5.5\common\'' nem jó, ha az ottani jar fileokat akartad includeolni. Egyenként fel kell sorolni őket...

    Kivétel, ha az egyik jar-ban van olyan manifest.mf, amelyben leírja milyen jarokra van szüksége. Amennyiben azok az ahhoz a könyvtárhoz relatívan megadott elérési úton megvannak, akkor azok a jarok automatikusan includeolódnak, nem kell külön CP-ben megadni. Ez persze rekurzívan működik.

    [Szerkesztve]

    classpath-ból kiszedtem most a könyvtárat.

    A hibaüzenet egész pontosan a következő:

    ElsoServletem.java:2: package javax.servlet does not exist
    import javax.servlet.*;
    ^

    utána meg az ebből következő hibaüzenetek.

    javac -classpath ''d:\Program files\Apache Software Foundation\Tomcat 5.5\common\servlet-api.jar'' ElsoServletem.java

    és így sem szereti...

    [Szerkesztve]

  • beeboy
    addikt

    Elég rossz kérdés... :)
    Mit jelent itt az, hogy ''hamarabb''? Ha utasításciklusokban mérjük, akkor attól függ milyen gépen fut, ha meg időben mérjük, akkor még az ütemezés is számít.

    Válasz: ki tudja. Ja, azt esetleg ki lehetne számítani, hogy adott kezdőfeltételek mellett mennyi valószínűséggel fut le egyik hamarabb mint a másik :)

    Amúgy olyasmire akar kilyukadni, hogy a float és double kivonás között milyen különbség van? Reflexből mondhatnám, hogy a virtuális gép utasítások szintjén a floatos gyorsabb, mert csak 32 bit, kevesebb művelet. Aztán lehet persze, hogy a mai FPU-k ugyanannyi idő alatt végeznek egy float és egy double kivonással.

    mod: áá rájöttem hogy mi akar ez lenni: a floatos végtelen ciklus, a double-os nem, ugye? :)

    [Szerkesztve]

    és mitől végtelen?
    csak hogy értsem a mechanizmust

    ui: pölö a floatba nem fér bele - nem hiszem
    vagy a típuskényszerítésnél van valami - bocs de láma vagyok

    [Szerkesztve]

  • #53246592
    törölt tag

    Elég rossz kérdés... :)
    Mit jelent itt az, hogy ''hamarabb''? Ha utasításciklusokban mérjük, akkor attól függ milyen gépen fut, ha meg időben mérjük, akkor még az ütemezés is számít.

    Válasz: ki tudja. Ja, azt esetleg ki lehetne számítani, hogy adott kezdőfeltételek mellett mennyi valószínűséggel fut le egyik hamarabb mint a másik :)

    Amúgy olyasmire akar kilyukadni, hogy a float és double kivonás között milyen különbség van? Reflexből mondhatnám, hogy a virtuális gép utasítások szintjén a floatos gyorsabb, mert csak 32 bit, kevesebb művelet. Aztán lehet persze, hogy a mai FPU-k ugyanannyi idő alatt végeznek egy float és egy double kivonással.

    mod: áá rájöttem hogy mi akar ez lenni: a floatos végtelen ciklus, a double-os nem, ugye? :)

    [Szerkesztve]

    Elöször en is elkezdtem agyalni, meg azt mondtam, hogy semmi ertelme, aztan kiprobaltam :)

    Es a float-os tenyleg vegtelen :)

  • stanci
    aktív tag

    De, Total Commander :D
    Most már meg is nézem amire gondoltam... ja igen, kijelölsz egy jar filet, aztán Files/Associate menüpont. Ott mindent megadhatsz.

    köszi sikerült megcsinálnom :R

    javaw.exe -jar
    ezt adtam meg neki és tök faszán megy. Még a parancssort sem jeleníti meg.

  • stanci
    aktív tag

    Ugyanott megadhatod... ha win-ről beszélünk, akkor TC alatt talán van egy ilyen dialog. Amúgy nem tudom, de reg hackeléssel megtehető.

    Egy utolsó kérdés aztán hanyagolom a témát. Mi az a TC?
    Biztos nem Total Commander.

  • stanci
    aktív tag

    create ''app.bat'', beleír:
    java(w) -jar jarfile
    kész :)
    vagy tetszőleges más módon.

    Ez tök jó ötlet.

    Csak még egy kérdés:
    Ugye van olyan, hogy minden kiterjesztéshez lehet társítani egy progit ami megpróbálja megnyitni. jar-hoz megadtam a java.exe-t. De, hogy tudom azt megcsinálni, hogy a -jar kapcsolóval hívja meg?

  • BBC
    tag

    Úgy hogy nincs a gépén Java runtime, nem fog futni Java progi...

    1) le kell töltenie (vagy mellékeled) a legfrissebb jre-t.
    2) a programodat tetszőleges számú jar fileban beinstallálod egy könyvtárba
    3) a link amire duplaklikkel behívja a fent említett parancsot, amivel a progi elindul.

    Mért legyen lehetőleg 1 file, nem értem... semmi értelme.
    Semmi egyéb program nem kell Java runtimeon kívül, a .jar fileok igaz hogy .zip-ek, de a jre természetesen tudja kezelni magától, semmivel nem kell foglalkozni.

    Persze ha már van java-s progija az illetőnek, akkor az egyes pontot nem kell elvégezni.

    kösz!

    hogy miért kell egy fájl?
    hát nem úgy egyszerű futtati egy programocskát?
    1 db. exe és ennyi, nincs installshield stb, klatty oszt fut.

    ezért vagyok ellene a javának, amúgy - suliban ezt erőltetik, elhiszem hogy ez a divat, stb. de talán nem ezzel kéne kezdeni

    UI: nem tudom mennyi a jre ''lecsontozva'', de most képzeld el, hogy egy egysoros java progiért becsomagolom a fél vinyómat! ;]
    jó, persze lehet mondani, a java nem erre való

    [Szerkesztve]

  • BBC
    tag

    create ''app.bat'', beleír:
    java(w) -jar jarfile
    kész :)
    vagy tetszőleges más módon.

    na most légy szíves írd le egy kezdőnek, hogy is csináljak konkrétan futtatható állományt.
    a legegyszerűbb eset: kiír egy sort a konzolra, és kész

    na most ezt elküldöm valakinek, sima felhasználó, a gépén nincs semmi java, stb. annyit ért hozzá, hogy dupla klikkre indulnak a progik.

    tudsz segíteni?
    köszi!

    UI: ja és lehetőleg 1 fájl legyen - és bekavar-e ha az illető gépén pl. winrar sincs a tömörített állományok kezelésére, vagy ez a jar nem az a jar?


    [Szerkesztve]

  • Van egy olyan lib, hogy JDOM. Ez jó. Eddig mindig a SAXBuilder-t használtam, az végigparszolja a memóriában és fát épít belőle, azt mondod hogy ez nem túl jó.
    Ezen kívül van a SAXParser, ami nem olvassa fel, hanem egy összetett listener rendszeren keresztül küldözgeti neked az elemeket, így streammel is elboldogul talán.
    Videót XML-ben? Állat :D
    Nem lenne értelmesebb egy saját protokoll, ami csomagokra bontja a nagy bináris adatfolyamot, és közötte lehet olyan csomag, hogy ''metaadat'', ami egy xml dokumentum lenne?
    A SAXParser természetesen legalább egy elemet mindig teljesen felolvas, sőt nyilván az aktuális elem összes parentjét is meg kell tartania. Így ne gondolj olyanra, hogy 100 megás text adat. Ráadásnak XML-ben binárisat nem tudsz normálisan átvinni, legegyszerűbb a Base64 encode, ami még a méretet is növeli, igaz tömörítéssel részben visszahozhatod azt.
    Gondold meg, na.

    Koszi a tippeket, infokat!

    Kozben ram esett egy masik javitani valo feladat, aze csak most irok...
    Egyebkent irtam mar ilyet, SSL-en keresztul bufferelgettem fel az adatot, es az esetleges base64 encoded cuccot mint binaris adatot ahogyan megkapta a parser csomagonkent egybol rakta ki tempfileba, szal egesz jo kis cucc volt, csakhat nagyon nem Javaban :)

  • sonar
    addikt

    Nem, a hosszú sorok Java-ban is szintaktikailag helyesek. Ami nincs: goto, illetve azok a hosszú nevű azonosítók.
    Szumma: ez nem java, csak valami zombi/mutáns. :)

    mod: ilyen formában ez egy programrészlet, azok a hosszú azonosítók lehetnek korábban deklarált változók, stb. Mondjuk érdekes az a return ott a közepén. Goto tényleg nincs.

    [Szerkesztve]

    Igen ez csak egy programrészlet!
    Ha esetleg ránéznél a forrásra elküldöm mailbe. Mert ide beteszem akkor megköveznek :DDD
    Amugy egy patch progi

  • Zsu_
    senior tag

    Nem, a hosszú sorok Java-ban is szintaktikailag helyesek. Ami nincs: goto, illetve azok a hosszú nevű azonosítók.
    Szumma: ez nem java, csak valami zombi/mutáns. :)

    mod: ilyen formában ez egy programrészlet, azok a hosszú azonosítók lehetnek korábban deklarált változók, stb. Mondjuk érdekes az a return ott a közepén. Goto tényleg nincs.

    [Szerkesztve]

    mail ment pár nappal ezelőtt... :U

  • sonar
    addikt

    Ez gáz, ugyanis nemhogy nem tudok a PH!-n javasolni topicot ennek, hanem az egész rohadt nagy neten nem láttam még soha ilyet, és néhány kulcsszóra google-özve sem találtam semmit, úgyhogy... no comment, sok sikert, engem is érdekel ha jutottál valamire. :D
    Ez így nem Java, annyi biztos. Van köze hozzá a szintaxisnak, de abszolút nem ugyanaz.

    Ez szopó!
    Amugy nem vagyok programozó. De gondolom az a a=....sok szám ami gáz
    azt nem tudom észre vetted -e hogy ha kijelölöd és huzod az egeret balra akkor még folytatódik a sor.
    Hátha az segít
    Amugy meg vminek lennie kell , mert a progi meg müxik

  • sonar
    addikt

    Öööö... tudod, ez egy Java topic. :)
    Elárulod, hogy ezt honnan szedted?

    Melyik topicba kéne felraknom ahol értenek hozzá? :R

  • sonar
    addikt

    Öööö... tudod, ez egy Java topic. :)
    Elárulod, hogy ezt honnan szedted?

    Egy telefonos java progi forrása
    java midlet nem java? :F

  • beeboy
    addikt

    Megkérdezhetem, hogyan? Gondolom rájöttél hol hibás a gondolat.
    Másrészt viszont ilyen kulcsra való keresést (itt egy String a kulcs) ne Vector-ban, hanem HashMap/HashSet-tel vagy TreeMap/TreeSet-tel csinálj, mert a vector nem erre való. Ugye Vector esetén O(n) az elérési idő, Hash*-nél átlagosan O(1), Tree*-nél garantált O(log n).

    na ez már nem a legújabb, de ez megvan itt, és már működik:

    public void bevisz(){
    Tkonyv sz1;
    sz1 = new Tkonyv();
    sz1.szerzobe();
    konyvek.add(sz1.toString());
    }

    public void keres(){
    Tkonyv sz2;
    sz2 = new Tkonyv();
    sz2.szerzobe();
    int temp=konyvek.indexOf(sz2.toString());
    if (temp>=0)
    System.out.println (''A könyv: ''+konyvek.get(temp)+ '' létezik!'');
    else System.out.println (''A könyv nem létezik!'');

    ***************és persze a Tkonyv osztály része:
    public void szerzoki(){
    System.out.println (szerzo);
    }

    public void szerzobe(){
    szerzo = Console.readLine(''Kérem a szerzőt: '');
    }

  • beeboy
    addikt

    Megkérdezhetem, hogyan? Gondolom rájöttél hol hibás a gondolat.
    Másrészt viszont ilyen kulcsra való keresést (itt egy String a kulcs) ne Vector-ban, hanem HashMap/HashSet-tel vagy TreeMap/TreeSet-tel csinálj, mert a vector nem erre való. Ugye Vector esetén O(n) az elérési idő, Hash*-nél átlagosan O(1), Tree*-nél garantált O(log n).

    ööö ez nekem még magas, a második java óra után
    mondjuk engem érdekel, szóval tanulgatom

    a vektor egyébként amolyan házi feladat volt, ezért csinálom ezt.
    mindjárt keresek valami fájlt, amúgy otthon van a cuccos, most meg melózok

  • beeboy
    addikt

    Heh... régen volt az már, semmi gond! :D

    ha ebben segítenél, megpróbálom röviden:

    van egy vektor osztályom, ebben adatok.
    ebben akarok keresni, úgy csináltam, hogy létrehoztam még egy vektor osztályt, és ebbe vittem be az adatot (hogy egyforma objektumúak legyenek)

    de nem adja vissza a találatot, pölö:

    tárolóvektor - ebben vannak az adatok, közte ''qqq'' srting
    keresővektor értéke: 1 hosszú vektor, értéke ''qqq''

    int melyiksor=tárolóvektor.indexOf(keresővektor.get(0));

    tehát ''qqq'' értékű vektorelemet hasonlítok ''qqq'' értékhez, de nem jó, mindig -1 -el jön vissza.
    próbáltam már sima stringel hasonlítani, de nem megy.
    ötleted? köszi

  • beeboy
    addikt

    Nyugodtan :D
    Bár úgy látom, hogy a kérdéseidre kifejtettem már a választ, csak nem pont ezekkel a példákkal... na lássuk:

    1. A hiba valóban az, hogy oda kell a static, ugyanis (ahogy már leírtam): tetszőleges osztályban definiált static függvény osztálypéldány nélkül hívható. Ez azt jelenti, hogy nem tud hozzáférni (nem ''látható'' a függvény törzséből) semmilyen nem-static osztályváltozó. A nem-static belső osztályokra ez a szabály azért vonatkozik (tehát nem tud létrehozni olyan belső osztály típusú objektumot), mert a nem-static belső osztályok példányainak alapból rendelkezniük kell referenciával a külső osztályuk (amiben definiáltad a belső osztályt) egy példányára. Méghozzá pontosan arra, amely teremtette őket.
    A belső osztály példány referenciája a külsőre úgy néz ki, hogy A.this (ha A a külső osztály neve). Remélem összeállt...

    2. két lehetőség: nem kell static a B osztály elé, vagy éppen static kell az int a elé.
    A szabály ugyanaz, mint az előbb: mivel a belső osztály statikus, nem kötődik külső oszályhoz, így a belső példány nem is rendelkezik információval (referenciával) az ő bennfoglaló objektumáról, ami ha a staticot eltöröljük, az A osztály egy példánya lenne.
    Így a
    a = aa;
    sorban nem tud hozzáférni az 'a' változóhoz, ugyanis a szimbólumtáblázat látható részében (hogymondják szépen magyarul azt, hogy scope? :) ) nincs ilyen változó!

    Ugye amikor azt írod hogy 'a', ebben az esetben prioritási sorrendben így tud feloldódni a jelentése:

    1) lokális blokkban ({ } közötti utasítások) lévő változók
    2) szülő blokkban lévők
    3) rekurzívan a függvény fejlécig, itt a fgv paraméterek jönnek be
    4) osztályváltozók (ez az ami ilyen bonyi szabályokkal írható le, ahogy eddig tettem)

    Az utóbbinál az 'a' szimbólum ekvivalens a 'this.a'-val, amennyiben a belső rendelkezik nem-static 'a' nevű változóval; továbbá ekvivalens 'Belsoosztaly.a'-val, ha rendelkezik static 'a' nevű változóval.

    Van egy ''5.'' szint, amennyiben egy belső osztályban használt változóról van szó. Ilyenkor az 1-es ponttól oldjuk fel ismét rekurzívan attól a helytől kezdve, ahol az osztályt definiáltad... így lesz az 'a'-ból 'Kulsoosztaly.this.a', ha a belső osztály nem static és a a Kulsoosztaly rendelkezik nem static 'a' változóval, a static szintaxis meg egyenlő a fentivel, tehát a 'Kulsoosztaly.a' static(!) változó mindenhonnan hozzáférhető, akár static, akár nem a belső osztály.

    Hmmm... remélem érthető :U

    [Szerkesztve]

    randommal kapcsolatban:

    néhány java óra után, no meg egy kis tanulást követően látom micsoda sületlenségeket hordtam össze! ;] :DD

  • Zsu_
    senior tag

    Nyugodtan :D
    Bár úgy látom, hogy a kérdéseidre kifejtettem már a választ, csak nem pont ezekkel a példákkal... na lássuk:

    1. A hiba valóban az, hogy oda kell a static, ugyanis (ahogy már leírtam): tetszőleges osztályban definiált static függvény osztálypéldány nélkül hívható. Ez azt jelenti, hogy nem tud hozzáférni (nem ''látható'' a függvény törzséből) semmilyen nem-static osztályváltozó. A nem-static belső osztályokra ez a szabály azért vonatkozik (tehát nem tud létrehozni olyan belső osztály típusú objektumot), mert a nem-static belső osztályok példányainak alapból rendelkezniük kell referenciával a külső osztályuk (amiben definiáltad a belső osztályt) egy példányára. Méghozzá pontosan arra, amely teremtette őket.
    A belső osztály példány referenciája a külsőre úgy néz ki, hogy A.this (ha A a külső osztály neve). Remélem összeállt...

    2. két lehetőség: nem kell static a B osztály elé, vagy éppen static kell az int a elé.
    A szabály ugyanaz, mint az előbb: mivel a belső osztály statikus, nem kötődik külső oszályhoz, így a belső példány nem is rendelkezik információval (referenciával) az ő bennfoglaló objektumáról, ami ha a staticot eltöröljük, az A osztály egy példánya lenne.
    Így a
    a = aa;
    sorban nem tud hozzáférni az 'a' változóhoz, ugyanis a szimbólumtáblázat látható részében (hogymondják szépen magyarul azt, hogy scope? :) ) nincs ilyen változó!

    Ugye amikor azt írod hogy 'a', ebben az esetben prioritási sorrendben így tud feloldódni a jelentése:

    1) lokális blokkban ({ } közötti utasítások) lévő változók
    2) szülő blokkban lévők
    3) rekurzívan a függvény fejlécig, itt a fgv paraméterek jönnek be
    4) osztályváltozók (ez az ami ilyen bonyi szabályokkal írható le, ahogy eddig tettem)

    Az utóbbinál az 'a' szimbólum ekvivalens a 'this.a'-val, amennyiben a belső rendelkezik nem-static 'a' nevű változóval; továbbá ekvivalens 'Belsoosztaly.a'-val, ha rendelkezik static 'a' nevű változóval.

    Van egy ''5.'' szint, amennyiben egy belső osztályban használt változóról van szó. Ilyenkor az 1-es ponttól oldjuk fel ismét rekurzívan attól a helytől kezdve, ahol az osztályt definiáltad... így lesz az 'a'-ból 'Kulsoosztaly.this.a', ha a belső osztály nem static és a a Kulsoosztaly rendelkezik nem static 'a' változóval, a static szintaxis meg egyenlő a fentivel, tehát a 'Kulsoosztaly.a' static(!) változó mindenhonnan hozzáférhető, akár static, akár nem a belső osztály.

    Hmmm... remélem érthető :U

    [Szerkesztve]

    Tyűha! Köszi :C
    Azt hiszem értem, de ez majd a zh-n kiderül...

  • Zsu_
    senior tag

    Kiegészíteném a nem-static belső class-ról mondottakat azzal, hogy példányosíthatóak kívülről, amennyiben a new operátor egy kevéssé szokásos szintaxisát használjuk.
    pl. legyen:


    class A {
    int a;

    class B {
    void ezmuxik() {
    // itt hivatkozunk a kulso osztalyra! Ehelyett irhatunk a++;-t, ha az egyertelmu.
    A.this.a++;
    }
    }
    }

    Van egy másik osztály, mely ezt csinálja:

    class C {
    void f() {
    // hibas! ''no enclosing instance of A''
    new A.B();
    // gyartunk egy A-t
    A a_peldany=new A();
    // explicit megadhato az enclosing instance!
    A.B ab_peldany=a_peldany.new B();
    }
    }


    Na kezd teljes lenni a dolog. Remélem érthető.

    köszönöm a kielégítő választ :)
    Kérdezhetnék még egy konkrétat is? :U


    1.
    Mi a hiba az alábbi forráskódban?
    public class Application {
    class Vector { double m_x, m_y; Vector(double x, double y) { m_x = x; m_y = y; } }
    public static void main (String[] args) { Vector v = new Vector(0.0, 0.0); }
    }

    Fordítóval kipróbáltam, hogy az a hiba, hogy a class Vector elé kell a static szó.
    De miért? nem igazán értem. :(


    2.
    Mi a hiba az alábbi forráskódban?
    class A { int a;
    static class B {
    B(int aa) { a = aa; }
    }
    }

    Itt pedig az a hiba, hogy nem kell a static a class B elé. De ennek sem igazán értem a miértjét...
    Hálás lennék, ha elmagyaráznád!
    Előre is köszi :)

  • Ez egy picit összetett dolog, biztosan ki is fogok felejteni valamit.
    Használat módjai:

    - static osztály változók: nem keletkeznek objektumonként, hanem az osztály összes példánya közösen használja a változót
    pl.
    class A { static int count; A() {count++;} }
    esetén minden egyes konstruktorhívásnál inkrementálódik a count.

    - static tagfüggvények: az előbbihez kapcsolódik, ugyanis ilyen függvényhez nem tartozik objektum. Ezt úgy értem, hogy a class A { static void fgv() {} } oszály fgv függvénye így hívható: A.fgv(); Természetesen ennél fogva nincs az fgv-ben definiálva ''this'' változó és ezért nem-static osztály változók/függvények sem használhatók, viszont static-kel jelöltek igen. (Persze ha átadsz paraméterben bármilyen objektumot, azzal azt csinálsz amit akarsz.)

    - static belső osztályok: olyan osztályon belül definiált osztályok, melyek nem kapcsolódnak a külső osztályhoz példányszinten. Huh, ez bonyi :)
    Na szóval:
    class A { static int count; int local; static class B { }}
    ilyenkor az A.B osztály példányosítható A-n kívülről. Egyébként nem! Továbbá az A.B osztály nem fér hozzá az A.local változóhoz, de az A.counthoz igen.

    Ööö van még valami?! :)

    [Szerkesztve]

    Kiegészíteném a nem-static belső class-ról mondottakat azzal, hogy példányosíthatóak kívülről, amennyiben a new operátor egy kevéssé szokásos szintaxisát használjuk.
    pl. legyen:


    class A {
    int a;

    class B {
    void ezmuxik() {
    // itt hivatkozunk a kulso osztalyra! Ehelyett irhatunk a++;-t, ha az egyertelmu.
    A.this.a++;
    }
    }
    }

    Van egy másik osztály, mely ezt csinálja:

    class C {
    void f() {
    // hibas! ''no enclosing instance of A''
    new A.B();
    // gyartunk egy A-t
    A a_peldany=new A();
    // explicit megadhato az enclosing instance!
    A.B ab_peldany=a_peldany.new B();
    }
    }


    Na kezd teljes lenni a dolog. Remélem érthető.
  • andriscs
    aktív tag

    Korrekt, csak az a kérdésem hogy az out az szerinted minek a kimenete lenne? :) Az így lóg magában és megy a szöveg az éterbe, mi? :)
    Gondoltam vágod, hogy a wrappelendő objektum a System.out vagy System.err, vagy bármilyen létező OutputStream.

    Hi!

    Ok, megértettem, hogy rosszul csináltam. :) Megpróbálom mégegyszer.

  • andriscs
    aktív tag

    Ezek szerint nem értetted amire gondolok. Természetesen nem egy OutputStream-et kell létrehoznod, hanem a PrintStreamet!
    new PrintStream(System.out, false, ''852'');
    Én csak a PrintStream konstruktor paraméterezését vágtam be ide...

    mod: megnéztem, az OutputStream osztály absztrakt (és mért ne lenne az, nincs hozzárendelve semmiféle ''kimeneti eszköz'', így natúr), így természetes hogy nem lehet konstruálni. Pontosan mit akartál csinálni?

    [Szerkesztve]

    Hi!

    Azt hittem, hogy így gondoltad a PrintStream konstruktorát, hogy egy OutputStream-et fogad paraméterként. Ezért ezt írtam:
    OutputStream out=new OutputStream();
    PrintStream printer=new PrintStream(out,false,''852'');

    És utána ezt akartam csinálni: printer.print(''aéáéáő'');

    Ezek szerint nem így kellett volna. :)

  • andriscs
    aktív tag

    Jah, elcseszett windózos konzol. A System.out-ot (vagy .err-t) wrappeld egy ilyenbe:
    PrintStream(OutputStream out, boolean autoFlush, String encoding)
    ahol az encoding legyen ''852'' asszem.
    Illetve válogathatsz innen: Bővebben: link :)

    Hi!

    Köszi az építő jellegű hozzászólást, de valahogy a Java nem szereti ezt az OutputStream jellegű dolgot, azt írja rá, hogy nem tudja inicializálni, mert nem egy konkrét osztály. Megnéztem, a kontruktora paraméter nélüli, elvileg semmi akadály nincs, hogy létrehozza, de nem tudja mégsem.

  • Protezis
    őstag

    Megjegyzéseim:

    mod: amikor elkezdődik a dőlt szöveg, ott volt egy [ i ]. Lesz több is, de semmi kedvem kijavítani mindenhol :)

    - a Kartya.PIN-t inicializáld a véletlen számmal.

    - a Penzintezet.befizet(int osszeg, Szamla szamla) metódusban a szamla.egyenleg+=osszeg; ronda. Elvileg eléred, ha nem private, de akkor is szebb egy szamla.addEgyenleg(osszeg);. Későbbi hülyeségektől menthet meg.

    - itt hasonlóan:
    public int kivesz(int osszeg, Szamla szamla) {
    int kivet;
    if (szamla.egyenleg<osszeg) {
    kivet=szamla.egyenleg;
    szamla.egyenleg=0;
    return kivet;
    }
    szamla.egyenleg-=kivet;
    return kivet;
    }
    (ez kicsit rövidebben is írható, de ez most mind1)

    - Itt kezdődnek a problémáid (NullPointerException démon képében):
    public void befizet(int osszeg, int szamlaID, String nev) {
    for (int i=0; i<=MAX_UGYFEL_SZAM; i++) {
    // oops, mért MAX_UGYFEL_SZAM-ig? a tömb tele lehet null-okkal. ráadásul túlindexeled a tömböt eggyel!
    if (szamlak.getSzamlaID()==szamlaID) {
    if (szamlak
    .getTulajdonos()==nev) {
    szamla.egyenleg+=osszeg;
    }
    }
    }
    }
    helyesen:
    public void befizet(int osszeg, int szamlaID, String nev) {
    for (int i=0; i<ugyfelekSzama; i++) {
    // ugyfelekSzama használandó, ha már van, és tudod hogy addig nem null a tömb.
    // esetlegesen egy if (szamlak
    !=null) is betehető ide, ha össze-vissza lennének, ami nem igaz.
    if (szamlak.getSzamlaID()==szamlaID) {
    // használhatnál && operátort, nem muszáj külön ifeket.
    if (szamlak
    .getTulajdonos()==nev) {
    // itt sejted mit kommentálnék ismét :)
    szamla.egyenleg+=osszeg;
    }
    }
    }
    }
    a kivesz(...) metódusra hasonlóan.

    - a szamlaletrehoz(...)-ban ugye illene egy allokáció, vagy kapsz egy gigantikus NullPointerExceptiont a fejedbe, mint véres fejdísz. :)
    így: new Szamla(...), aztán azon operálva, majd beletéve a tömbbe. Megint, nem írunk át más osztálybeli adattagokat, ha aranyosak vagyunk.

    - Takarekpenztar.szamlaletrehoz(...): felüldefiniálást nem úgy kell feltétlenül érteni, hogy copy-paste-1-sor-módosít. :) Meg lehet hívni a felüldefiniált metódust.
    pl: {
    if (egyenleg==0) return null;
    return super.szamlaletrehoz(egyenleg, nev);
    }
    Amúgy ez a struktúra amit a feladatban kijelölnek, kicsit rossz lenne komoly alkalmazásnál, dehát csak egy feladat.

    - public Terminal(String bank) {
    // NullPointerException: bankmezo==null
    bankmezo.terminalokSzama++;
    // intezetNeve: undefined symbol
    intezetNeve=bank;
    }

    - Terminal.kivesz hiány :)

    Ja, ha jól értem itt befejezted. További sok sikert!
    Annyival kommentálnám még az egészet, hogy egy valós alkalmazásban megfelelő adatstruktúrákat alkalmaznék (ami itt ellentmond a feladattal, mert tömböket kell használni), ami nem lineáris keresést tud (Hash, Tree). Tudom, tudom, ez a feladat, bocs hogy beszólok.

    [Szerkesztve]

    mail ment

  • Protezis
    őstag

    Megjegyzéseim:

    mod: amikor elkezdődik a dőlt szöveg, ott volt egy [ i ]. Lesz több is, de semmi kedvem kijavítani mindenhol :)

    - a Kartya.PIN-t inicializáld a véletlen számmal.

    - a Penzintezet.befizet(int osszeg, Szamla szamla) metódusban a szamla.egyenleg+=osszeg; ronda. Elvileg eléred, ha nem private, de akkor is szebb egy szamla.addEgyenleg(osszeg);. Későbbi hülyeségektől menthet meg.

    - itt hasonlóan:
    public int kivesz(int osszeg, Szamla szamla) {
    int kivet;
    if (szamla.egyenleg<osszeg) {
    kivet=szamla.egyenleg;
    szamla.egyenleg=0;
    return kivet;
    }
    szamla.egyenleg-=kivet;
    return kivet;
    }
    (ez kicsit rövidebben is írható, de ez most mind1)

    - Itt kezdődnek a problémáid (NullPointerException démon képében):
    public void befizet(int osszeg, int szamlaID, String nev) {
    for (int i=0; i<=MAX_UGYFEL_SZAM; i++) {
    // oops, mért MAX_UGYFEL_SZAM-ig? a tömb tele lehet null-okkal. ráadásul túlindexeled a tömböt eggyel!
    if (szamlak.getSzamlaID()==szamlaID) {
    if (szamlak
    .getTulajdonos()==nev) {
    szamla.egyenleg+=osszeg;
    }
    }
    }
    }
    helyesen:
    public void befizet(int osszeg, int szamlaID, String nev) {
    for (int i=0; i<ugyfelekSzama; i++) {
    // ugyfelekSzama használandó, ha már van, és tudod hogy addig nem null a tömb.
    // esetlegesen egy if (szamlak
    !=null) is betehető ide, ha össze-vissza lennének, ami nem igaz.
    if (szamlak.getSzamlaID()==szamlaID) {
    // használhatnál && operátort, nem muszáj külön ifeket.
    if (szamlak
    .getTulajdonos()==nev) {
    // itt sejted mit kommentálnék ismét :)
    szamla.egyenleg+=osszeg;
    }
    }
    }
    }
    a kivesz(...) metódusra hasonlóan.

    - a szamlaletrehoz(...)-ban ugye illene egy allokáció, vagy kapsz egy gigantikus NullPointerExceptiont a fejedbe, mint véres fejdísz. :)
    így: new Szamla(...), aztán azon operálva, majd beletéve a tömbbe. Megint, nem írunk át más osztálybeli adattagokat, ha aranyosak vagyunk.

    - Takarekpenztar.szamlaletrehoz(...): felüldefiniálást nem úgy kell feltétlenül érteni, hogy copy-paste-1-sor-módosít. :) Meg lehet hívni a felüldefiniált metódust.
    pl: {
    if (egyenleg==0) return null;
    return super.szamlaletrehoz(egyenleg, nev);
    }
    Amúgy ez a struktúra amit a feladatban kijelölnek, kicsit rossz lenne komoly alkalmazásnál, dehát csak egy feladat.

    - public Terminal(String bank) {
    // NullPointerException: bankmezo==null
    bankmezo.terminalokSzama++;
    // intezetNeve: undefined symbol
    intezetNeve=bank;
    }

    - Terminal.kivesz hiány :)

    Ja, ha jól értem itt befejezted. További sok sikert!
    Annyival kommentálnám még az egészet, hogy egy valós alkalmazásban megfelelő adatstruktúrákat alkalmaznék (ami itt ellentmond a feladattal, mert tömböket kell használni), ami nem lineáris keresést tud (Hash, Tree). Tudom, tudom, ez a feladat, bocs hogy beszólok.

    [Szerkesztve]

    Jó, hogy mindig részeg valamelyikünk :DDD
    Kösz, hogy átnézted, tényleg nem fél perc lehetett!
    Megyek kajálni, aztán nekiállok.
    A többit szerintem mailben kellene, nem akarok hsz-gyűjtőnek tűnni ;)
    (Igen, lehetne kétirányú dinamikus láncolt listát is használni - C-ben így hívták -, de azt sajnos még Javaból nem tanultam. Majd ZH után arra is sor kerül :) )

  • Épp megjöttem egy kis alkoholizálással egybekötött koncertről, épp ideje belenézni a Java topicba :D
    Erre tényleg. Meg is nézem.

    Megjegyzéseim:

    mod: amikor elkezdődik a dőlt szöveg, ott volt egy [ i ]. Lesz több is, de semmi kedvem kijavítani mindenhol :)

    - a Kartya.PIN-t inicializáld a véletlen számmal.

    - a Penzintezet.befizet(int osszeg, Szamla szamla) metódusban a szamla.egyenleg+=osszeg; ronda. Elvileg eléred, ha nem private, de akkor is szebb egy szamla.addEgyenleg(osszeg);. Későbbi hülyeségektől menthet meg.

    - itt hasonlóan:
    public int kivesz(int osszeg, Szamla szamla) {
    int kivet;
    if (szamla.egyenleg<osszeg) {
    kivet=szamla.egyenleg;
    szamla.egyenleg=0;
    return kivet;
    }
    szamla.egyenleg-=kivet;
    return kivet;
    }
    (ez kicsit rövidebben is írható, de ez most mind1)

    - Itt kezdődnek a problémáid (NullPointerException démon képében):
    public void befizet(int osszeg, int szamlaID, String nev) {
    for (int i=0; i<=MAX_UGYFEL_SZAM; i++) {
    // oops, mért MAX_UGYFEL_SZAM-ig? a tömb tele lehet null-okkal. ráadásul túlindexeled a tömböt eggyel!
    if (szamlak.getSzamlaID()==szamlaID) {
    if (szamlak
    .getTulajdonos()==nev) {
    szamla.egyenleg+=osszeg;
    }
    }
    }
    }
    helyesen:
    public void befizet(int osszeg, int szamlaID, String nev) {
    for (int i=0; i<ugyfelekSzama; i++) {
    // ugyfelekSzama használandó, ha már van, és tudod hogy addig nem null a tömb.
    // esetlegesen egy if (szamlak
    !=null) is betehető ide, ha össze-vissza lennének, ami nem igaz.
    if (szamlak.getSzamlaID()==szamlaID) {
    // használhatnál && operátort, nem muszáj külön ifeket.
    if (szamlak
    .getTulajdonos()==nev) {
    // itt sejted mit kommentálnék ismét :)
    szamla.egyenleg+=osszeg;
    }
    }
    }
    }
    a kivesz(...) metódusra hasonlóan.

    - a szamlaletrehoz(...)-ban ugye illene egy allokáció, vagy kapsz egy gigantikus NullPointerExceptiont a fejedbe, mint véres fejdísz. :)
    így: new Szamla(...), aztán azon operálva, majd beletéve a tömbbe. Megint, nem írunk át más osztálybeli adattagokat, ha aranyosak vagyunk.

    - Takarekpenztar.szamlaletrehoz(...): felüldefiniálást nem úgy kell feltétlenül érteni, hogy copy-paste-1-sor-módosít. :) Meg lehet hívni a felüldefiniált metódust.
    pl: {
    if (egyenleg==0) return null;
    return super.szamlaletrehoz(egyenleg, nev);
    }
    Amúgy ez a struktúra amit a feladatban kijelölnek, kicsit rossz lenne komoly alkalmazásnál, dehát csak egy feladat.

    - public Terminal(String bank) {
    // NullPointerException: bankmezo==null
    bankmezo.terminalokSzama++;
    // intezetNeve: undefined symbol
    intezetNeve=bank;
    }

    - Terminal.kivesz hiány :)

    Ja, ha jól értem itt befejezted. További sok sikert!
    Annyival kommentálnám még az egészet, hogy egy valós alkalmazásban megfelelő adatstruktúrákat alkalmaznék (ami itt ellentmond a feladattal, mert tömböket kell használni), ami nem lineáris keresést tud (Hash, Tree). Tudom, tudom, ez a feladat, bocs hogy beszólok.

    [Szerkesztve]

  • Protezis
    őstag

    Részegség, fél egészség :D

    Teljesen jól gondolkozol, csak láss a szöveg mögé: a Szamla osztálynál nem tiltja meg, hogy csinálj egy int getSzamlaID() metódust, amivel lekérdezheted a kívánt adatot. Sőt, egy int getEgyenleg(), void setEgyenleg(int), de még void addToEgyenleg(int) sincs megtiltva. Hajrá! :)

    Köszi a segítséget. Egy-két dolog világosabban áll előttem, de sokszor olyan, mintha sötétben tapogatóznék :) (nem, most nem vagyok részeg :D)
    Félig-meddig megcsináltam a gyakorló feladataimat. Ha szépen megkérlek, és ha időd engedi, megnéznéd, hogy miket rontottam el? Fordítani nem is próbáltam, mert még kész sincs, szintaktikai hiba nem érdekel, hanem ''csak'' az elvi hibák.

    Itt vannak az általam írt forráskódok: Bővebben: link
    És itt maga a feladat: Bővebben: link
    Nem azt kérem, hogy old meg helyettem, mert ezek csak a ZH-ra való gyakorlás miatt kerültek kiadásra, semmi pontot, jegyet nem kapok értük. Még mielőtt felháborodna valaki, hogy mással akarom megcsináltatni a feladatomat ;]

    Tényleg jó lenne, ha megnéznéd, órákon még csak hasonlókat se csináltunk. Ja, hétfőn lesz ZH, úgyhogy ha lehet, addig. :B

  • beeboy
    addikt

    Az állításod hamis, ugyanis az int Random.getInt(int szam) függvény a [0; szam) egész-intervallumban, azaz [0; szam-1]-ben ad számokat egyenletes eloszlással. :)

    [Szerkesztve]

    OK. te vagy a profi! ;]

  • t-shirt
    veterán

    Lehet. Segítségül, ezeket a függvényeket használd.
    javax.sound.sampled csomagból:

    Audio file betöltés: AudioSystem.getAudioInputStream(File),
    Clipre is lesz szükséged: AudioSystem.getClip(),
    az AudioInputStreamet benyomod a clipbe: Clip.open(AudioInputStream),
    lejátszod: Clip.start()

    köszönöm

  • beeboy
    addikt

    Az ilyen törtekkel mindig az a baj, hogy a ''valós'' számokat csak akkor tárolja pontosan a gép, ha a legnagyobb és legkisebb nem nulla számjeggyel kitöltött helyiérték (negatív, azaz tört kitevőjű helyiértékeket beleértve) között elég kicsi a különbség. Mondhatnám azt is, hogy kettes számrendszerben _véges_ törtként ábrázolható törteket.
    Azaz csak a 1/2 1/4 1/8 1/16 ... stb és ezekből véges darab, egymáshoz közel állók összege lesz pontos. Próbáld kirakni az 1/9-et. :)

    Ezt még szorzod egy hasonló pontos számmal, kerekíted, meg se bírom becsülni ebből mi sülhet ki :)

    jogos, bár ha 6 tizedesjegyig tud számolni akkor már jó.
    (még alatta is, csak mondtam valamit)

    egyébként a Te megoldásod tényleg elegáns, csak az a baj hogy lehetséges kimenet a 10.000 is

  • Protezis
    őstag

    Reflection mondtam hogy advanced topic :D

    Tehát, egyenletes eloszlású int változó [1000; 9999] intervallumban:

    int veletlen=Random.nextInt(9000)+1000;

    Eszetekbe nem jutott hozzáadni egy számot. Érdekes :)

    Okok. Köszi mindkettőtöknek! Most seggrészeg vagyok, de holnap kipróbálom, plusz lenne 1 kérdésem, amit most szzóban talán el tudnék mondani, de írásbannn :D
    Hát igen, sokat ittam. Ahogy Pázsit barátom mondaná: aki másnak vermet ás, nem kap rétest estére :D
    Na megpróbálkozok. Itt a feladat: Bővebben: link
    3. feladatnál tartok, és a 2. befizet metódussal van problémám.
    Ugye a későbbiekben valószínűleg példányosítani fogom a penzintezet osztályzt. És meghívom a befizet metódust. Ezt a 2.-at. Úgy godolom, hogy olyan objektumot kellene keressek, aminek a szamlaID-je megegyezik a paraméterben kapottal. És utána ezen ojjektum egyenleg adattagját kellene változatnom. Hogy lehet ezt? Vagy én gondolom ezt hülyén? Má beszélni (írni) se tudok, de asszem ezt nem értem. Szóval objektumok adattagjaiban kellene keresgéljek, melyiknek egyezik meg a számlaID-je a paraméterben kapottal. Biztos, hogy hülyén gondolkozok, de ezt már ivás előtt se értettem, szóval ez legyen a mentségem :)
    ó éjt, holnap itt... [ OFF] :D

  • Protezis
    őstag

    Jóra gondolsz. Akkor máshogy próbálom meg a dolgot :)
    A Java nem scriptnyelv, nem erre való, tudom csak kíváncsi vagy. Ha valamire ilyen megoldást agyaltál ki, gondolj ki mást, mert nagy valószínűséggel rossz módszer. :)
    Ettől függetlenül van kivétel (pl RPC vagy hasonló dolgok implementálása), és ezért van is megoldás minderre. Nézd meg a Java API doksiban a java.lang.reflect csomag tartalmát, mindent tartalmaz ami a nyelvi reflekcióhoz szükséges lehet. Metódusok, konstruktorok, kivételek, tömbök, mindent tud. Advanced topic!
    Hogy lássad, kb. ennyiből állna a dolog:
    ha van egy Osztaly nevű class-od, annak float function(int) metódusa, és annak egy o1 instance-ja, akkor a következő rész meghívja a függvényt, és a visszatérő értéket is megkapod.

    Method m=Osztaly.getMethod(''function'', new Class[] {int.class});
    Object ret=m.invoke(o1, new Object[] {new Integer(1)});
    float vissza=((Float)ret).floatValue();

    Kész. Persze semmi értelme ennek, mert írhatnád ezt is, ez ugyanaz:

    float vissza=o1.function(1);

    Csak az előbbinél észre se veszed ha elírtad a függvénynevet, vagy bármilyen hibát vétettél, csak futási időben, míg az utóbbinál már fordításnál. A típusbiztonság nagyon fontos a jó programban, úgyhogy törekedni kell rá. :D

    Akkor ezt most elteszem holnapra :D

  • Protezis
    őstag

    Ha így akarod megcsinálni, akkor levonhatom azt a következtetést hogy új neked az OO szemlélet? :)
    Ja, a javascriptnek annyi köze a java-hoz, hogy kb. semmi.

    Tehát, van két osztályod, és uazt a metódusát akarod meghívni. Tipikus eset az interface-es absztrakcióra:

    interface KozosTudas
    {
    public void fuggeny();
    }

    class Osztaly1 implements KozosTudas
    {
    public void fuggveny() {
    System.out.println(''osztaly1'');
    }
    }

    class Osztaly2 implements KozosTudas
    {
    public void fuggveny() {
    System.out.println(''osztaly2'');
    }
    }

    Ezek után valahol vannak ilyen cuccaink:
    Osztaly1 o1;
    Osztaly2 o2;
    Ezek mindketten implementaljak a KozosTudas-t, tehát:
    KozosTudas[] tomb=new KozosTudas[2]; //hulye pelda...
    tomb[0]=o1; tomb[1]=o2;
    for(int k=0; k<tomb.length; k++) {
    tomb[k].fuggveny();
    }

    SZVSZ keress egy tutorialt ilyen temabol, esetleg ajanlok 1-2 konyvet maganban...

    szerk: kénytelen voltam a ciklusváltozót k-nak nevezni mer amúgy italic-ba nyomta a fórum az egészet ami az indexelés után van :)

    [Szerkesztve]

    Kösz a választ, végre valaki.
    Igen, új az OO. Amit te írtál, az nem polimorfizmus?
    Nekem mindegyik változó ugyanabba az osztályba tartozik. És mindegyiknek meg akartam változtatni ugyanazt az adattagját. Átírtam én is tömbre, úgy tökéletesen működik, csak ilyen összerakósdira lennék kíváncsi :)
    Nem lehet egy objektum nevét valahogy összerakni stringből?

    Mod:Mellesleg van könyvem: Angster Erzsébet-féle

    [Szerkesztve]

  • Poro
    csendes tag

    Ez a WinXP vs Java elég vicces tud lenni... :)
    Volt már olyan bug, hogy ATI videókártyákkal kifagyott. Esetleg 1.5.0-t nem próbáltad?

    Hát megmondom őszintén azt nem néztem meg, hogy a netről mit akart feltelepíteni. Pénteken látom újra a gépet, majd megnézem hogy 1.5-re hogy viselkedik. Videókártya az NVIDIA van benne emlékeim szerint, de hogy hogy képzeli ezt az újraindulást azt nem tudom. A csökkentett mód nem jutott eszembe:) Bár ha ugysem mükszik akkor passz. Még jó, hogy nem azon a gépen kell dolgoznom:) De köszi. Szivesen hallgatok egyéb ötleteket is (pl kalapács, benzin:) ) Természetesen ha sikerül, megosztom veletek.

    [Szerkesztve]

  • Miracle
    senior tag

    Így van. Ha ''nagyon átlaguserrel'' van dolgod, úgyis készítesz installert, ami beállítja az egészet, tehát bármennyi dolgot kell beállítani, nem számít. :)
    Ja igen, a .jar egy .zip átnevezve, érdemes tudni, nem valami spéci formátum.

    elkestem :)

  • beeboy
    addikt

    Az appletek eléggé speciális kis java osztályok, tehát általában még nem is az applet-írás a Java fő profilja. Kétségtelenül praktikus, viszont spec. én eddig 1 appletet se írtam, de számos standalone applikációt.
    Átlaguser valóban nem úgy indítja, hogy kikeresi a main osztályodat, és java -cp classpath bla.bla.bla.osztaly :)
    A .jar fileok arra valók, hogy abba becsomagolva a lefordított class-aidat és egy kis meta-információt (mit kell indítani benne pl), egyszerűen el lehessen indítani, leginkább duplakatt .jar-ra, ami azt csinálja hogy: java -jar jarfile
    A legjobb megoldás mégiscsak valami script (.bat), ami - ha bonyolult classpath és egyéb beállításaid vannak - megkíméli a usert mindentől. Akár írhatsz is egy kis c(++) progit ami egyszerűen elindítja a java progit.

    bocs, mégvalami:

    ezen a gépen nincs semmi telepítve különösebben, nem tudok kísérletezgetni, nincs is ilyen jar fájl kéznél csak kérdezem:

    a .jar-ra nálam (otthon) a winrar indul el, mutatja is a tartalmát.
    na most ebből hogy lesz egy duplaklikkre induló alkalmazás, akár egy exe?

    szóval, ha a társítás a winzip, és az mutatja is a tartalmát, akkor az átlaguser is azt látja. hogy futassa?

    kösz a türelmet

  • beeboy
    addikt

    Nincs olyan ami konkrétan .exe-t készít, csak linux/unixra létezik free compiler (gcj), ami elég korlátozott még, az GUI osztályok még nincsenek támogatva, meg béta persze, viszont tényleg natív futtatható állományt készít.
    Kérdés: minek neked ilyen egyáltalán?

    kösz

    hogy minek? csak elméleti kérdés volt, tényleg most ismerkedek vele, hogy egyáltalán mi ez, és mit tud.

    tudom, hogy ez is láma de:
    általában egy htm fájlba ágyazzák be, és a böngésző futtatja, már ha van JVM?
    gondolom az átlaguser nem parancssorból fogja a java.exe-vel futtatni a .class-t

  • yksz
    aktív tag

    Mobilokra IS lehet programot írni, igaz az egy nagyon szűk részhalmaza a ''teljes'' változatnak (standard edition), amit pl. PCre használunk.
    Letölteni... a mobilosat? Az nehezebb ügy mert minden mobilgyártónak van egy saját kis szabványa, így legjobb ha a gyártó honlapján keresed. A standard editiont pedig mondjuk java.sun.com.

    THX:C

  • andriscs
    aktív tag

    Használj free sun-os JRE-t (java.sun.com), és Eclipse IDE-t (www.eclipse.org). Mindkettő ingyenes, és nagyon minőségi termék. Eclipse-ben meg alapból nincs visual editor, ami nagyon előnyös, ha Java-t akarsz _tanulni_, nem gányolni,

    Hi!

    Én is az Eclipse-et használom, szerintem is az a legjobb IDE Java-hoz. A JEDPlus-t csak az egyszerűsége miatt ajánlottam.

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

Hirdetés