Hirdetés

Keresés

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

  • Gyuri16
    senior tag

    Nekem is meg kellett nézni, hogy rosszul emlékszem-e. :D

    #11933:
    Helyesen unmodifiable-nek kellene hivni, mert attol fuggoen mi van a kollekcioban az elemeket lehet akar valtoztatni.

    Attól még maga a collection immutable.

    "An unmodifiable collection is not necessarily immutable. If the contained elements are mutable, the entire collection is clearly mutable, even though it might be unmodifiable. For example, consider two unmodifiable lists containing mutable elements. The result of calling list1.equals(list2) might differ from one call to the next if the elements had been mutated, even though both lists are unmodifiable. However, if an unmodifiable collection contains all immutable elements, it can be considered effectively immutable. "

    [link]

  • Gyuri16
    senior tag

    Android vonalon én java 8-nál tetőztem. Kotlinban ez pl. így működik:
    listOf(...) és mapOf(...) ha final kell és
    mutableListOf(...) és mutableMapOf(...) ha mutable kell

    Az List.of szintén List típust add vissza, csak gondolom dob egy csinos UnsupportedOperationException-t ha add-ot hívsz az outputra.

    igen, bovebben le van irva a dokumentacioban
    Collection
    List

    Helyesen unmodifiable-nek kellene hivni, mert attol fuggoen mi van a kollekcioban az elemeket lehet akar valtoztatni.

  • Gyuri16
    senior tag

    LOL. Olyan rég Kotlin-ra váltottam, hogy már el is felejtettem, hogy a list is definiálja az add metódust. Akkor ha jól rémlik talán az Iterable a jó analógia rá. :B

    Iteratornak is van remove metodusa: [link]

    Immutable kollekciokra tobb fuggveny van, pl. Collections.unmodifiableList, List.of (java 9), List.copyOf (java 10)

  • Gyuri16
    senior tag

    [link]
    An "In" Variable An "in" variable serves up data to the code. Imagine a copy method with two arguments: copy(src, dest). The src argument provides the data to be copied, so it is the "in" parameter.
    An "in" variable is defined with an upper bounded wildcard, using the extends keyword.

    Ott meg a bemenet consumer-re super-t ír?
    :F

    Itt csak a megnevezesekben van kis kavarodas. Es abban, hogy a mapper fuggvenynel a Function volt generikus, itt pedig a src es dest valtozok (tipikusan valamilyen Collection).

    A valtozok felhasznalasat kell nezni. A src egy Collection, ebbol a copy fuggveny olvasni fog ("The src argument provides the data to be copied"). Tehat a src egy producer.
    A dest valtozo az eredmeny, ebbe a fugveny irni fog, tehat consumer. "the dest argument accepts data"

  • Gyuri16
    senior tag

    <R> Stream<R> map(Fucktion<? super T,? extends R> mapper)

    ilyen esetben nem sérül a clean code elmélete?
    Előző példánál maradva e -> e.getValue0()
    miért
    ? super T
    az első type pataméter és miért
    ? extends R
    a második?

    vagy kár ezen filózni, elég "bután", rutinból használni ezeket a fucktional interface-ket és lambdákat?

    Ha nem akarsz rajta gondolkodni, akkor eleg megjegyezni hogy "Producer extends Consumer super" - PECS.

    mapper fuggveny elso parametere a bemenet, ez consumer. A masodik az eredmeny ez a producer.

    Ha erdekel bovebben, akkor lehet itt kezdeni: [link]
    Igaz collectionokrol van szo, de a lenyeg ugyanaz.

    map fuggvenynel maradva, vegyunk egy konkret mapper implentaciot.
    mapper fuggveny parametere egy valtozo. Azt akarod, hogy a valtozo el tudjon tarolni egy T tipusu objektumot. Milyen lehet a valtozo tipusa? Nyilvan lehet T. Lehet-e T-tol leszarmazott osztaly? Nem, mert akkor nem tudna egy T tipusu objektumot tarolni (pl. Integer valtozoba nem lehet Object-et tarolni). Lehet-e T elodje? Igen, altalanosabb tipusu valtozoba lehet leszarmazott osztalyt kuldeni. (ismet: Object-be lehet Integert). Ezert super.

    Nezzuk a mapper fuggveny eredmenyet. Itt azt szeretned, ha egy R tipusu valtozoba el lehetne menteni.
    R eredmeny = mapper(bemenet);
    Milyen osztalyokra igaz ez? R lehet. R elodje nem lehet (Integerbe Object-et). R-tol leszarmazott lehet. Ezert extends.

    Ha eloszor foglalkozol ezzel, kicsit zavaros lehet. Ajanlom, hogy probald ki egy egyszeru A->B->C hierarchian Collectionokkel (ami a linkben van).

    mod: amig irtam, nyilvan megeloztek :) most mar itthagyom, hatha segit a magyar verzio.

  • Gyuri16
    senior tag

    Rosszul kérdeztem, rossz példával :)
    Egy osztályban van 1 int x koordináta. Ennek bármilyen értéke lehet Integer.MAX_VALUE és Integer.MIN_VALUE között.
    Én csak azt látom eddig csak a getter/setter előnyének hogy ha 100 helyen olvassák és 1 helyen írják akkor könnyű megtalálni azt az 1 módosítási helyet.
    Hátránya hogy lassabb mert van közben egy metódus hívás.

    Hátránya hogy lassabb mert van közben egy metódus hívás.

    Nem feltetlenul, compiler ilyen dolgokat tud optimalizalni.

    Az elonyokrol mar irtak a tobbiek. Ha bovebben erdekel nezz utana valamilyen objektumorientalt programozasrol szolo konyvben/cikkben mirol szol az encapsulation.

    Ezeknek az OOP elveknek az elonye altalaban akkor latszik, ha az ember valami bonyolultabbat csinal. Vagy ha az eredetileg egyszeru osztalyokba uj dolgot kell hozzaadni. Ilyenkor elonyos ha mar az elejetol ugy volt irva a kod, hogy kesobb konnyu legyen valtoztatni. Viszont nyilvan tulzasba esni se jo, felesleges tulbonyolitani egy egyszeru kodot csak azert, mert egyszer lehet hogy szukseg lesz ra.

    Peldadhoz visszaterve: ha letrehoznal kesobb egy olyan osztalyt, ahol az x koordinata erteke csak egy kisebb intervallumbol lehet, akkor sokkal egyszerubb lesz megoldanod, ha a kodban mar van egy setter. Anelkul minden egyes helyet ahol uj erteket allitasz be at kell irnod.

  • Gyuri16
    senior tag

    Sziasztok!

    Egy programot kellene készítenem java nyelvben ami úgy néz ki hogy egy térképet használnék fel és ehhez szeretnék készíteni mondjuk checkboxokat, amelyeket kijelölve csak azok a dolgok jelennek meg a térképen amit kijelöltem. Ehhez kellene nekem valami olyan google által vagy bármely cég által készített szabadon felhasználható térkép/térképkivágat. Tudtok ebben segíteni nekem? Ha valami nem tiszta, hogy mit szeretnék akkor kérem szóljatok és pontosítok :) :R

    Ha 3D Google Earth-szeru program a cel, akkor a NASA WorldWind is meger egy probat: [link]. A leirasbol nem vilagos mit szeretnel pontosan csinalni.

  • Gyuri16
    senior tag

    azokat az instrukciókat kaptam, hogy nem párhuzamosan futnak a szálaim, mert a run metódusom törzse szinkronizált blokkban van, ehelyett azt a részt kellene szinkronizált blokkba tenni, ami módosítja az egyenleget.
    illetve azt kaptam még, hogy legyen az egyenleg static.

    akkor csak elég a staticot beírni pluszba. a párhuzamosság megoldására tudtok adni valami ötletet?

    hat akkor legyen static.. szabad tudni hol tanitjak ezt? (akar privatban is)
    de akkor ne konstruktorban allitsd be az erteket, hanem meg az elott, hogy letrehoznad az elso peldanyt.

    masik kerdesre: synchronized blokkot csak oda tedd ahol hozzafersz a valtozohoz, ne az egesz run metodusra

  • Gyuri16
    senior tag

    a magyar változóneveket magamnak készítettem, hogyha a későbbiekben visszanézem akkor könnyebb legyen a megértése.

    minden szalnak kolon egyenlege van, nem ugyanahhoz a valtozohoz fernek hozza

    itt nem elég az, hogy ha static lesz a változó?

    static valtozokat csak indokolt esetben illik hasznalni (ez nem az).

    helyedben letrehoznek egy Egyenleg osztalyt, amibol a program elejen letrehoznek egy peldanyt, amit aztan konstruktorban atadnam a Beadando objektumoknak. az egesz szinkronizacios moka pedig ebben az Egyenleg osztalyban lehetne. Termeszetesen ez csak egy lehetoseg, jobb lenne, ha magad talalnad ki az alapjan amit tanitottak.

    magyar valtozonevekkel szerintem nincs semmi gond, amig nem probalsz ekezeteket beletenni.

  • Gyuri16
    senior tag

    így most teljesen jó. :) valamit te még változtatnál rajta? :)

    illetve a program befejeződött kiíratást ha a run végére rakom, akkor kétszer írja ki, mindkét szálnál

    igen.
    az elso valaszomban is irtam, hogy most minden ugyfelnek/szalnak sajat egyenlege van. a feladat lenyege, hogy egy valtozohoz ferjen hozza az osszes szal es biztositsd, hogy korrekt modon irjak/olvassak a tartalmat. probald meg parszor lefuttatni a programod, es figyeld az egyenleg valtozasat: lesznek benne ugrasok.

    megoldani tobbfelekepp lehet, ugyhogy ajanlom nezd at, hogyan csinaltatok hasonlot - egy valtozohoz hozzaferni tobb szalbol.

    mod: a program vege kiiratast a main fuggvenybe tedd ne a szalakba

  • Gyuri16
    senior tag

    ArrayList<Beadando> felhasznalolista = new ArrayList<Beadando>();


    for (int i=1; i<=felhasznalok_szama; i++) {
    felhasznalolista.add(new Beadando(kezdeti_egyenleg));
    }

    for (int i = 0; i < felhasznalolista.size(); i++) {
    felhasznalolista.get(i).start();
    }

    for (int i = 0; i < felhasznalolista.size(); i++) {
    felhasznalolista.get(i).join();
    }

    így?

    még így is össze-vissza fut le

    ugy jo.

    ez helyett:
    if(rand_szam2 > i_kezdet ){
    i_kezdet-=i_kezdet;
    }else{
    i_kezdet-=rand_szam2;
    System.out.println("kivesz: " + rand_szam2);
    System.out.println("Új egyenleg: "+ i_kezdet);
    }

    inkabb igy:
    if(rand_szam2 > i_kezdet ){
    i_kezdet-=i_kezdet;
    }else{
    i_kezdet-=rand_szam2;
    }
    System.out.println("kivesz: " + rand_szam2);
    System.out.println("Új egyenleg: "+ i_kezdet);

  • Gyuri16
    senior tag

    az objektumokra hogyan tudom meghívni a join fv-t? :) vagyis hogyan tudok az objektumokra hivatkozni?

    el kell menteni a letrejovo objektumot egy valtozoba. Ha csak egy objektumot hoznal letre akkor igy nezne ki a main fuggvenyed vege:

    Beadando beadando = new Beadando(kezdeti_egyenleg);
    beadando.start();
    beadando.join();

    neked ugyanezt kell megcsinalnod, csak ciklusban. Letrejovo objektumok referenciait nem egy sima valtozoban fogod tarolni, hanem egy listaban. Tehat az elso ciklusban letrehozod az objektumokat, eltarolod egy listaban es meghivod a start() fuggvenyt. Miutan mindet elinditottad egy masik ciklusban vegigmesz a listan es mindegyikre meghivod a join() fuggvenyt.

  • Gyuri16
    senior tag

    Sziasztok,
    múlt hét után ismét megjelenek egy kérdéssel. az alábbi a feladat:

    Hozz létre egy osztályt Bankszamla néven. Parancssori argumentumként várja a bankszámla kezdeti egyenlegét és a számla felhasználóinak számát.
    Hozz létre minden felhasználónak egy külön szálat.
    A következőt ismételd 5-ször:
    - véletlenszerűen a felhasználó vegyen ki/rakjon be egy véletlenszerűen generált összeget a számlára
    - várjon 1-3 másodpercet, majd kezdje újra

    Minden tranzakciónál írd ki a tranzakció típusát, az összeget, illetve az új egyenleget. Pl.: Kivesz, összeg: 533, uj egyenleg: 313
    A számla egyenlege soha nem lehet kevesebb, mint 0 Ft. Ha valaki többet szeretne kivenni, mint a számlaegyenleg, akkor a számlán levő teljes összeget vegye ki, de csak annyit. Ha üres számláról szeretne kivenni egy összeget, akkor továbbra is 0 marad a számlaegyenleg. Ügyelj a konkurens hozzáférésből eredő problémák kiküszöbölésére!

    Várd meg, míg az összes szál lefut, majd írd ki a képernyőre a következő üzenetet: "A program befejeződött".

    itt a kódom:

    package beadando;

    import java.io.*;
    import java.util.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;

    public class Szalak {

    public static void main(String[] args) throws Exception {
    int kezdeti_egyenleg = Integer.parseInt(args[0]);
    int felhasznalok_szama = Integer.parseInt(args[1]);
    //boolean kesz =false;

    for (int i=1; i<=felhasznalok_szama; i++) {
    new Beadando(kezdeti_egyenleg).start();
    }
    for (int i=1; i<=felhasznalok_szama; i++) {
    new Beadando(kezdeti_egyenleg).join();
    }

    }
    }

    class Beadando extends Thread {
    Random rand = new Random();

    private int i_kezdet;
    //private boolean kesz;

    public Beadando(int kezdeti_egyenleg) {
    this.i_kezdet = kezdeti_egyenleg;
    //this.kesz = kesz;
    }

    @Override
    public void run() {
    synchronized (Szalak.class) {
    //int x = i_kezdet;

    for(int j=1; j<=5;j++){
    int rand_berakvagykivesz = rand.nextInt(2);

    if(rand_berakvagykivesz == 0)
    {
    int rand_szam = rand.nextInt(200000);
    i_kezdet+=rand_szam;
    System.out.println("berak: " + rand_szam);
    System.out.println("Új egyenleg: "+ i_kezdet);




    }else if(rand_berakvagykivesz == 1){
    int rand_szam2 = rand.nextInt(200000);
    if(rand_szam2 > i_kezdet ){
    i_kezdet-=i_kezdet;
    }else{
    i_kezdet-=rand_szam2;
    System.out.println("kivesz: " + rand_szam2);
    System.out.println("Új egyenleg: "+ i_kezdet);
    }

    }

    try {
    Thread.sleep(1000);
    } catch (InterruptedException ex) {
    Logger.getLogger(Beadando.class.getName()).log(Level.SEVERE, null, ex);
    }
    }

    }

    }

    }

    a hiba, hogy ha mondjuk 2 lesz a felhasználók száma, akkor ugye 10 szer kellene berakni vagy kivenni, mert mindkét esetben a for ciklus a run-ban 5ször fut le, viszont nálam van hogy 6-szor , de lehet hogy 8-szor, tehát össze-vissza. esetleg valami ötlet?

    itt a hiba:
    for (int i=1; i<=felhasznalok_szama; i++) {
    new Beadando(kezdeti_egyenleg).start();
    }
    for (int i=1; i<=felhasznalok_szama; i++) {
    new Beadando(kezdeti_egyenleg).join();
    }

    a masodik ciklusban az elsoben letrehozott beadando objektumokon kellene a join() fuggvenyt meghivni. Igy letrehoz egy uj objektumot, es azon var.

    Azon kivul van meg par problema a programmal:
    minden szalnak kolon egyenlege van, nem ugyanahhoz a valtozohoz fernek hozza
    ez nem tul szep es nem is effektiv: synchronized (Szalak.class)

  • Gyuri16
    senior tag

    Sziasztok!

    ArryList<String>list - ben for ciklussal ami végigmegy a tömbön for(String line : list) hogyan tudom az éppen aktuális Stringet összehasonlítani az éppen előtte vagy utána lévővel?
    Előre is köszönöm.
    attis71

    az iterator (ami a for-each ciklus mogott van) mindig az aktualis elemet fogja csak megmutatni. Ha szukseged van az elozo elemre, akkor vagy tarold el egy lokalis valtozoban vagy hasznalj klasszikus for ciklust es indexeld az ArrayListet: i, i+1, i-1...

  • Gyuri16
    senior tag

    sziasztok,
    egy SOAP webservicet gyartok, es nem igazan sikerul a kovetkezo: a SOAP request header reszeben kapok parametereket, es ez alapjan szinten a header reszben kell rajuk valaszolnom. Irtam egy SOAPHandlert, amivel hozza tudok ferni a headerhez, de nem tudom osszekapcsolni a request/response parost. A handleMessage fuggveny ugye meghivodik amikor a keres jon be es amikor a valasz megy ki. A kinom az, hogy amikor a valaszt gyartanam mar nem ferek hozza (?) a keres headerjehez.

    Valaki tudna segiteni, hogyan kell ezt megoldani? Azt lattam, hogy elvileg egy konkret fuggveny parameteret be lehet allitani a WebParam annotacio header attributumaval, de nekem ez tobb fuggvenyre es osztalyra is kellene, tehat jobb lenne az altalam probalt irany (minden service ele rakni csak egy annotaciot, fuggvenyek ne tudjanak rola).

    ugy nez sikerul, [link]
    SOAPMessageContext put/get.
    ez van amikor egy ismeretlen technologiaval kell tegnapra megcsinalni valamit :)

  • Gyuri16
    senior tag

    sziasztok,
    egy SOAP webservicet gyartok, es nem igazan sikerul a kovetkezo: a SOAP request header reszeben kapok parametereket, es ez alapjan szinten a header reszben kell rajuk valaszolnom. Irtam egy SOAPHandlert, amivel hozza tudok ferni a headerhez, de nem tudom osszekapcsolni a request/response parost. A handleMessage fuggveny ugye meghivodik amikor a keres jon be es amikor a valasz megy ki. A kinom az, hogy amikor a valaszt gyartanam mar nem ferek hozza (?) a keres headerjehez.

    Valaki tudna segiteni, hogyan kell ezt megoldani? Azt lattam, hogy elvileg egy konkret fuggveny parameteret be lehet allitani a WebParam annotacio header attributumaval, de nekem ez tobb fuggvenyre es osztalyra is kellene, tehat jobb lenne az altalam probalt irany (minden service ele rakni csak egy annotaciot, fuggvenyek ne tudjanak rola).

  • Gyuri16
    senior tag

    Integer a = 2;
    Integer b = 2;
    System.out.println(a == b); // true

    na ezt tudtátok? :)

    az autoboxing soran meghivott Integer.valueOf cacheeli a kis szamokat, ezert ugyanaz az objektum lesz mind a ketto. Ugyanaz nagy szammal nem fog mukodni.

    masik hasonlo:

    String a = "alma";
    String b = "alma";
    System.out.println(a == b); //true

    ez is egy optimalizacio eredmenye

    emvy: a felso hatar allithato: -XX:AutoBoxCacheMax

  • Gyuri16
    senior tag

    Joy of Clojure cimu konyv. Online nem tudom hirtelen, keress ra.

    Zarojelek temaja: ezt en se hittem el eloszor (ezert se foglalkoztam Lisppel sokaig), de az zarojeleket egy ido utan nem latod. Marmint persze latod, de megszokja a szem, csoppet sem zavaro -- es a zarojelezes teszi lehetove a homoiconicity-t, ami kb. semelyik mas nyelvben nem mukodik. Igy sajat nyelvi konstrukciokat is nagyon egyszeruen definialhatsz -- pl. Java-ban nem volt foreach egesz odaig, amig a nyelvnek nem lett resze, Clojure-ben siman csinalhatsz magadnak, ha epp az hianyzik.

    En mostanaban mindefelere ezt probalom hasznalni. A hatranya az, hogy nincs statikus tipusellenorzes. A legfobb elonye a konkurens programozas tamogatasa, ami szerintem jobb, mint barmelyik mas nyelvben. A clojure.async library (library, nem nyelvi elem vagy framework!) egy mestermu, ezenkivul az alapveto konkurencia-megoldas az STM (software transactional memory).

    koszi, megnezem

  • Gyuri16
    senior tag

    Teljesen irreleváns, hogy a következő projekt nyelve mi. Olyanokat keress, akik már csináltak vele nagyobb projektet. Szerintem. A többféle paradigma megtanulasara nem jo, mert mindenből van benne egy kicsi. Funkcprogra jobb a Clojure (vagy racket vagy akarmi) meg a Haskell.

    Tényleg nem muszáj nekem elhinni, de hidd el :d

    ha mar feljott a tema Clojure elkezdesehez tudsz ajanlani jo online anyagot? egy ideje rajta van a listamon, de csak annyit tudok rola, hogy sok irritalo buta zarojel :)
    esetleg ha hasznaltad munkaban is erdekelne mire (ha publikus), ill. miert pont erre esett a valasztas.

  • Gyuri16
    senior tag

    remelem belathato idon belul hasznalhatunk java8-at,

    LOL. MI nemrég tértünk át 7-esre, de szerintem pikkpakk lesz abból nyolcas. A fun benne az, hogy egy 6-os kódbázisra kell majd ráhúzni :)

    http://m.hwsw.hu/cikk.php?id=53920

    hat akkor nevetni fogsz: nalunk a kod legnagyobb resze meg 5-os es egyelore nem lehet updatelni. szerencsere utobbi evben en nagyreszt egy uj projekten dolgozok amit 8-assal kezdtunk, de aztan vissza kellett lepni 7-esre (mert JET nem tamogatja meg a 8-ast)

  • Gyuri16
    senior tag

    Nézd meg, hogy a nagy rendszereket gyártó cégek, akik Scalaztak, hogy állnak vissza Javára vagy valami másra. A Scala problémája az, hogy őrült bonyolult lett a nyelv. Fun megtanulni, es amikor használod, akkor nagyon produktívnak érzed magad. A probléma ott jön, amikor pár főnél nagyobb csapat kezd el dolgozni, és mindenkinek más rész tetszik a Scalabol.
    Nekem bejott a Scala, de amikor elkezdtem nézegetni a Scalaz-t meg társait, akkor ezt láttam. Aztán miután hagytam, kezdtek jönni az iparbol is a hírek, hasonló tapasztalatokról. (sok publikus hír is van, de privátban nem publikusbol is van pár sztorim)

    A Scala a JVM C++-a. Read this.

    Egyébként a Clj számomra nagyobb revelacio volt, de persze ízlés dolga..

    scala engem is erdekel, en ezt akarom atnezni bevezetokent: [link] aztan ha meg nem unom akkor ezt: [link]. leginkabb csak jatek szinten erdekel, reg nem tanultam valamit just for fun..

    munkaban javat hasznalunk, es nem ritkan szeretnek valami kifejezobb nyelvvel dolgozni. remelem belathato idon belul hasznalhatunk java8-at, kivancsi vagyok lambdak es collection streamek mennyire lesznek hasznalhatoak.

  • Gyuri16
    senior tag

    Azért, hogy okosodjunk, mutass egy példát - de most komolyan, hisz ez itt ontopic

    valoszinuleg long == Long tipusu osszehasonlitasra gondolt ahol tenyleg mukodni fog, viszont ugy ahogy leirta nem volt egyertelmu

  • Gyuri16
    senior tag

    Azért meg lehet oldani simán a thread-safe legyen, általában ezt szoktam használni:

    public class Singleton {

    private Singleton() { }

    private static class SingletonHolder {
    public static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
    return SingletonHolder.INSTANCE;
    }
    }

    persze, lehet igy is, csak nem latom ertelmet a lazy init.-nek. Singletonnal mast nem lehet csinalni, csak meghivni a getInstance fuggvenyet, ekkor betolti a classloader es letrejon az objektum is. Te szokod hasznalni az osztalyt anelkul, hogy szukseg lenne peldanyositani?

  • Gyuri16
    senior tag

    Hali!
    Singleton osztalyokkal es GC-vel kapcsolatban lenne egy kerdesem..Ha van egy osztalyom, pl
    public MyClass {
    private static MyClass myClassInstance = null ;
    private MyClass() {}

    public static MyClass getInstance() {
    if(myClassInstance == null) { myClassInstance = new MyClass(); }
    return myClassInstance ;
    }
    }

    Naugye most az osztalynak van referenciaja sajat magara. GC amennyire en tudom addig nem torol egy objektumot, amig van ra valahol strong reference. Mi a helyzet ebben az esetben? Mikor fogja a GC torolni az osztaly? Van kulonbseg az kozott, hogy egy osztalynak van referenciaja magara es akozott, hogy mas osztalynak van referenciaja az adott osztalynak?

    amig van referencia az objektumra, addig a gc nem torli. Singleton eseteben tobbnyire azt jelenti, hogy amig fut a program addig letezik az objektum is (amig van referencia a classloaderre).

    masik dolog: nem ajanlom, hogy igy implementald a singletont, a lazy initialization tobb threades kornyezetben kellemetlenseget okoz. egyszerubb igy
    private static MyClass myClassInstance = null ;
    helyett
    private static MyClass myClassInstance = new MyClass();

  • Gyuri16
    senior tag

    Ühüm, akkor fontos, hogy konstruktorral hozzam létre :)
    Integer s = 8;
    Integer t = 8;

    Így meg a kettő ugyanaz lesz... egyébként ilyenkor s és t primitív? Vagy 2 külön hivatkozó változó, ami ugyanarra az Integer objektumra mutat a kupacban?

    Karma: "A gyakorlatban meg az Integer.valueOf-ban van ez a cache implementáció." Milyen cahce implementáció van ott? :) Nekem ez új.

    Integer s = 8;
    ilyenkor autoboxing miatt az Integer.valueOf(int) kerul meghivasra, ami cacheli a -128 tol 127ig terjedo szamokat, hogy gyorsabb legyen:

    private static class IntegerCache {
    private IntegerCache(){}

    static final Integer cache[] = new Integer[-(-128) + 127 + 1];

    static {
    for(int i = 0; i < cache.length; i++)
    cache[i] = new Integer(i - 128);
    }
    }

    public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache
    return IntegerCache.cache[i + offset];
      }
      return new Integer(i);
    }

  • Gyuri16
    senior tag

    Van egy osztályom aminek a konstruktora hív egy eljárást ami szintén az osztályon belül van, de nem fut le, csak így:

    public static void main(String[] args) {
    Gui g= new Gui();
    g.initLoad();
    }
    }

    Ha a konstruktorból akarom hívni az initLoad eljárást akkor nem történik semmi:

    public class Gui implements ActionListener{
    Gui(){
    initLoad();
    ................
    }
    initLoad(){
    ................
    }
    }

    Biztos valami triviális a válasz, de sajna akkor sem tudom :/.

    tudsz mutatni egy minimalis mukodo (lefordithato) programot ahol jelentkezik amit irsz?

  • Gyuri16
    senior tag

    Elkezdtem a progit, de van egy erdekesseg amit nem ertek, adott az alabbi kodreszlet:

    public int readInt() {
    int szam = 0;
    BufferedReader is = new BufferedReader(new InputStreamReader(System.in));

    try{
    do{
    try{
    szam = Integer.parseInt(is.readLine());
    break;
    }catch (NumberFormatException e){
    System.err.println("Kérem csak egész számot adjon meg!");
    };
    }while(true);

    is.close();
    }catch (IOException ex){
    System.err.println("Nem olvasható a bemenet!");
    }

    return szam;
    }

    public int kvizValasztas() {
    int sorszam = 0;

    do{
    sorszam = this.readInt();
    if(sorszam > this.elerhetoKvizek.length || sorszam <= 0 ){
    System.out.println("Hibás számot adott meg, kérem adja meg újra: ");
    }else{
    break;
    }

    }while(true);

    return sorszam;
    }

    Hibas bemenet eseten mikor masodjara megy bele a readInt() fuggvenybe, akkor ahelyett, hogy bekerne a szamot belefut a catch agba, miszerint IOException van.
    Ha kiveszem az is.Close(); sort, akkor minden ok, de nem ertem, hogy miert, mindig egy uj BufferedReader-t inicializalok, nem a mar korabban lezartbol olvasnek. :F

    is.Close() bezarja a streamet amibol masodjara olvasni akarsz,ezert IOExceptiont kapsz. a stream itt a System.in, amit nem jo bezarni.

    en nem csinalnak minden esetben uj BufferedReadert, mert az, ahogy a neve is mondja bufferel. ez azt jelenti, hogy tobbet is olvas(hat) az alatta levo streambol mint amennyi kell, azert, hogy a legkozelebbi olvasasnal keznel legyen az adat. egy streamet egy BufferedReaderrel illik olvasni.

  • Gyuri16
    senior tag

    Sziasztok!
    Tudnátok javasolni valamilyen Java könyvet, ami gyorsan és alaposan elmagyarázza az alapokat? Valami olyan könyv érdekelne, ami SE vagy EE-vel foglalkozik és olyan embereknek készült, akik már programoztak más nyelvekben, de a Java-t most kezdik. Angolul kéne, szóval mindegy, hogy van-e belőle magyar kiadás.

    (Úgy néz ki, hamarosan Java programozót kell faragnom magamból, lehetőleg nagyon gyorsan :) )

    Bruce Eckel: Thinking in Java
    a weboldalon le is lehet tolteni (igaz csak a regebbi verziot) ingyen. az ujabb verzio sem tul uj, viszont elindulni szerintem jo.

    masik konyv az Effective Java. igaz ezt meg nem olvastam, de szoktak ajanlani. rajta van a listamon :)

  • Gyuri16
    senior tag

    Egy ötlet: Feltöltesz egy String típusú tömböt valamilyen szöveggel. Egy ciklussal végigmész a beírt szöveg karakterein (0-tól a tömb méretéig), és minden egyes karakternek megfeleltetsz egy másikat. Ezt eltárolod egy segédtömbben oly' módon, hogy amelyik karaktert vizsgálod, a segédtömböd annyiadik helyére beteszed az olvasott karakternek megfeleltetett karaktert. Így jóeséllyel egy teljesen értelmetlen szöveget kapsz.
    Dekódolásnál ugye az a fontos, hogy ismerd a szabályt, ami alapján kódoltál. Ilyenkor megcsinálod ugyanezt a megfeleltetést, csak ebben az esetben a segédtömbön mész végig (0-tól a tömb méretéig), és fordított irányban adod meg az értékeket.

    Ha elég egy fapados megoldás is, akkor sima switch-case módszerrel megoldhatod.

    Gondolom, van sokkal hatékonyabb algoritmus is erre a célra (ezt majd a pro emberek megmondják), de ha neked ebben az esetben nem fontos a futásidő, akkor a fent említett módszer tökéletesen megfelel.

    Próbáltam érthetően leírni. Ha mégsem lenne tiszta valami, írj bátran.

    nincs sokkal hatekonyabb algoritmus, ha a futasi idot nezed. linearis idonel jobbat nem tudsz csinalni. masik kerdes a biztonsag. ezt a titkositast ha eleg hosszu a szoveg akar papiron is fel lehet torni.
    megfelelo kriptografia hasznalata bonyolultabb kerdes, attol fugg a kerdezonek mire kell. ha egy iskolai feladat kezdo programozonak, akkor akar lehet ezt is implementalni, ha viszont tenyleg titkositas a cel, akkor valamilyen szabvanyos algoritmust erdemes hasznalni.

  • Gyuri16
    senior tag

    jdbc kerdesem lenne. van egy date tipusu mezom, amit prepared statementes setDate-el akarok feltolteni, viszont a gond az, hogy igy csak a datumot menti el, az orakat kinullazza. neten azt talaltam, hogy ez igy van jol, viszont nekem kellene oda a pontos ido is (a mezo tipusat nem lehet megvaltoztatni). kiprobaltam setTimestamp-et ugyanerre a mezore, es mukodott is (az idot is elmentette), viszont nem tudom ez mennyire megbizhato. van valakinek tapasztalata ezzel, mit kellene csinalnom?

  • Gyuri16
    senior tag

    Sziasztok!

    Tömbkezelés és feltétel kezeléssel van gondom Java-ban
    aRows != bRows nem működik, arra nem dobja ki a hibát, hanem lefut, összeadja a két mátrixot

    public static double[][] addMatrix(double[][] a, double[][] b) {

    int aRows = a.length; // arrays' number in matrix
    int aCols = a[0].length; // arrays' length in matrix
    int bRows = b.length;
    int bCols = b[0].length;

    if (aCols != bCols && aRows != bRows)
    throw new IllegalArgumentException("matrices don't match: " + aCols
    + " != " + bRows);
    ....}

    main(){

    double x[][] = { {7, 6, 3}};
    double y[][] = { { 5, 4, 6 }, { 5, 6, 7 } };
    double z[][] = AddingMatrices.addMatrix(x, y);

    }

    a feltetelbe nem es kell hanem vagy

  • Gyuri16
    senior tag

    Ha Java-ban így írom be ezt az utasítást, az miért szintaktikai hibás? :R

    (count%10==0) ? newLine = true: newLine=false;

    bar Jester01 a masik topicban leirta a rovidebb megoldast, de igy helyes:
    newLine = (count%10==0) ? true: false;

  • Gyuri16
    senior tag

    Sziasztok!

    Elnézést a gagyi kérdésért: még nem programoztam Javában (de most lehet, hogy muszáj lesz).

    Azt szeretném kérdezni, hogy egy böngészőben futó java-alkalmazásnak (nem java-script) bele lehet-e nézni a forráskódjába (esetleg vissza lehet-e fejteni) vagy sem.

    Köszi előre is!

    lehet. megkeresed az oldal forraskodjaban az appletet (applet, esetleg object tag) azon belul a java allomany nevet (.jar, .class). azt letoltod. ha jar akkor kicsomagolod (zip). a class fajlokat pedig vissza lehet forgatni pl jad-dal (java decompiler).

  • Gyuri16
    senior tag

    1,
    int i = 0;
    while(true) {
    if(i > myArray.length - 1)
    break;
    System.out.println(myArray[i++]);

    ez a ciklus gyonyoru :)
    igy azert elegansabb:

    for (String str : myArray) {
    System.out.println(str);
    }

  • Gyuri16
    senior tag

    Azt azért megcsináltam, hogy a cucc szépen generáljon egy xml-t is, ne csak úgy kiköpjön egy text file-t.

    Hasonlít is az eredetire, kivéve abban hogy néhány attribútumnak van egy d: eleje/vége is, tehát például xmlns="http://blbabla" helyett xmlns:d="http://blablaa", vagy ilyen hogy d:type meg d:blob.
    Mik ezek a d:-ok? jelentenek valamit?

    Ilyennek kéne lennie[link]
    ilyen amit a programom generál: [link]

    A kód xml felépítés része meg ilyen:
    Document xmldoc=impl.createDocument("http://www.kuju.com/TnT/2003/Delta", "cRecordSet", null);
    Element root= xmldoc.getDocumentElement();
    root.setAttribute("id", Integer.toString(rnd.nextInt(randomsize)));
    Element record= xmldoc.createElement("Record");
    Element heightfieldtile= xmldoc.createElement("cHeightFieldTile");
    heightfieldtile.setAttribute("id", Integer.toString(rnd.nextInt(randomsize)));
    Element x= xmldoc.createElement("X");
    x.setAttribute("type", "sInt32");
    x.setTextContent(Integer.toString(tileX));
    Element y= xmldoc.createElement("Y");
    y.setAttribute("type", "sInt32");
    y.setTextContent(Integer.toString(tileY));
    Element blob= xmldoc.createElement("blob");
    blob.setAttribute("size", "65536");
    blob.setTextContent(heightfield);
    root.appendChild(record);

    d:type azt jelenti, hogy a d namespace type elementje. xml namespacek nagyjabol ugyanugy mukodnek mint c++ban. egy dokumentumon belul hasznalhatsz tobbet is, ezt kell a gyokerelementben definialni. a default namespace a xmlns es ha tobbet akarsz akkor xmlns:d formaban kell irni. kesobb pedig az elementekre ezzel a nevvel hivatkozol, tehat pl d:type. az hogy konkretan milyen betut rendelsz hozza mindegy, csak a xmlns attributumnak legyen beallitva a megfelelo URI. ha ezt az xml dokumentumot masnak kuldod feldolgozni, akkor jo lenne ha kompatibilisre csinalnad.
    javaban az NS vegzodesu fuggvenyekkel lehet megnevezni a hasznalni kivant namespacet

  • Gyuri16
    senior tag

    c01d44 ilyesmiket kéne fix 8 karakterre formázni, úgy hogy ha nincs meg 8 karakter a string akkor elé rak annyi 0-t hogy 8 legyen. ezzel próbálkoztam "%8S" de ez behúzza csak, 0kat nem rak az üres helyekre. Tehát a fenti hexet pl 00C01D44 formára kéne hoznia.

    gondolom eredetileg valamilyen szam tipusu valtozoban van az amibol a hexadecimalis stringet akarod. akkor lehet ilyet:

    int i = 1234;
    String s = String.format("%08x", i);

    mod: kicsit egyszerusettem..

  • Gyuri16
    senior tag

    Elnézést! :U

    Milyen könyvből érdemes kezdeni a Java tanulását? :U

    ahogy nezem mar az osszes programozos topicban megkerdezted, hogy milyen konyvet/kornyezetet ajanlotok kezdoknek xy nyelvhez? pl legutobb egy honapja delphi.. ebben a topicban is mar szoltal hozza, akkor netbeanseztel, most meg megint kerdezed, hogy miben kell java-t kodolni. azt ajanlom, hogy tanuld azt amit suliban nyomatnak. ha jol tudom nalatok java masodikban van. ha elsos vagy akkor csinald azt amit akarnak toled (gondolom c/c++), nem hiszem, hogy ez a jo megoldas, hogy ennyi nyelvbe belekezdesz, de a for ciklusnal nem jutsz tovabb sehol. ha egy c alapu nyelvet megtanulsz jol, akkor szinte az osszeset tudod alapszinten hasznalni. konyvet nem tudok, ha masodikos vagy akkor figyelj oda oran. neten van egy rakas tutorial hello world szintu programokhoz, tovabb meg mar latod mit szeretnel, mi nem megy.

    ezt ne vedd tamadasnak, csak fura, hogy ennyi mindent elkezdesz. ha egyet tovabbviszel, akkor tobbe nem kell kezdo szinten kinlodnod a tobbivel. programozni/algoritmikusan gondolkodni tanulj meg, es ne egy konkret nyelvet

  • Gyuri16
    senior tag

    Az melyik?

    - Eclipse IDE for Java EE Developers (189 MB)
    - Eclipse IDE for Java Developers (92 MB)
    - Eclipse IDE for Java and Report Developers (220 MB)

    legalapabb = legkisebb, avagy a kozepso utat valaszd

  • Gyuri16
    senior tag

    Sziasztok!

    Most akarom majd kezdeni a Java programozást! Milyen fejlesztő környezetet ajánlotok hozzá? :U

    tobbseg eclipset vagy netbeanst hasznal. en az elobbit ismerem, jo, csak nagyon nagy, igy aztan regebbi gepen nem tul gyors (+ kis felbontast se nagyon kedveli)

  • Gyuri16
    senior tag

    Sziasztok

    Nem tud valaki egy joo kis java alapú gps progit ami nem a neten log tehát offline ingyenes SE w760-ra kellene :R

    Köszönöm :R

    ez nem az a topic, itt java programozasrol van szo. probald meg valamelyik mobilos topicban, pl itt: [link]

  • Gyuri16
    senior tag

    Valóban nem ez a teljes feladatleírás, az 5x ennyi, csak nem akartam ennyit beírni:) Mert csak ez a része nem megy. A boltok nyitását attól az órától kezdve nézzük, amikor az első pizzát eladta (pl 15:44 akkor 15-kor nyitott). Az adatok nincsenek sorban rendezve. Meg elvileg ugye mindig néznem kell a bolt id-t, megjegyezni mikor nyitott, és aszerint nézni tovább, majd ha kell a pizza.txt-ből valami, akkor a pizza_id alapján kikeresem a szükséges adatot. Ezzel az a gond, hogy több száz bolt is lehet akár. Szóval arra gondoltam, létrehozni egy objektumot a kigyűjtött adatok tárolására, egy boltnak egy objektum, és mondjuk ArrayList-ben tárolom őket, majd egy for ciklussal végigmegyek az objektumokon, és megkeresem a kért eredményt. Ez nem tudom mennyire működne, az a baj, hogy a héten öszesen aludtam kb 20 órát, még egy hello world progi is kifogna rajtam... :W

    "Szóval arra gondoltam, létrehozni egy objektumot a kigyűjtött adatok tárolására, egy boltnak egy objektum, és mondjuk ArrayList-ben tárolom őket, majd egy for ciklussal végigmegyek az objektumokon, és megkeresem a kért eredményt."

    ezt irtam en is, csak nem ArrayList, hanem TreeMap (vagy HashTable). amiben a bolt_id a kulcs es (nyitas,feltet,paprika) harmast tarolsz. ez elvileg gyorsabb mintha ArrayListben tarolnad
    tehat beolvasod soronkent a dat-ot. mindig megnezed, hogy ilyen boltrol van e mar infod a Mapban, ha igen akkor tudod a nyitvatartast, es nezed a pizzat (ha nem akkor letrehozol egy uj objektumot a Mapban), hozzaadod amit kell es mesz tovabb. vegen egy iteratorral vegignezed.

  • Gyuri16
    senior tag

    Sziasztok, tudnátok segíteni abban, hogyan lehet "összefűzni" egy bináris és egy szöveges fájlt?

    Kicsit konkrétan, így néz ki a txt fájl tartalma:
    <pizza_id> <pizza_feltetek_szama> <feltetekbol_paprika> <pizza_nev>

    a .dat tartalma (persze binárisan):
    <bolt_id> <pizza_id> <eladas_oraja> <eladas_perce>

    A feladat: keszitsunk programot, ami megkeresi azt a boltot (<bolt_id>-t), ami a
    nyitvatartasanak elso ket orajaban a legkevesebb feltetet adta el osszesen, es
    kiirja azt, hogy ez a bolt a nyitvatartasanak masodik (csak a masodik) orajaban
    mennyi paprika feltetet adott el. (A program kimenete a konzolra tehat egyetlen
    szam!)

    A program csak az eredmeny szempontjabol relevans adatokat gyujtse!
    NEM elfogadhato megoldas az, ha minden adatot beolvas a memoriaba, majd
    ott eldonti a problemat.

    Hát ez lenne, gugliztam én ma egész nap, meg olvastam a java könyvet, de nem jutottam előrébb. beolvasom a txt és dat fájl tartalmát, elvileg össze kéne fűzni valahogy hashtable-el, vagy nem tudom. Esetleg valami link is jó ami ehhez hasonló progit magyaráz el.

    ez az egesz feladat? nem vilagos, hogy honnan tudod mikor nyitott a bolt, ill. a fajlokrol jo lenne tudni, hogy valahogy sorba vannak e rendezve az adatok, vagy nem?
    a feladatban ott van, hogy nem olvashatod be az egeszet, szoval amit te mondasz nem jo
    egyelore ez a legjobb (igazabol egyetlen) otletem:
    mesz sorban a .dat fajlodon, megnezed az idopontot, ha benne van az elso ket oraban akkor megnezed pizza_id-t a masik fajlban, onnan megtudod a feltetek szamat es ha a masodik oraban vagy akkor a paprikat is. Amit megtudtal hozzaadod a mar meglevo adatokhoz amit mondjuk egy Mapban tarolhatsz (bold_id, feltet, paprika). vegen atfutod a Mapot, es megnezed hol a legkevesebb a feltet es kiirod a paprikat
    ha a .dat fajlod bolt_id szerint sorba van rendezve akkor nem kell az egesz Map, hanem eleg ha megjegyzes az eddig legjobbat, es mindig ahhoz viszonyitasz
    ezzel az a gond, hogy ha a txt fajlod nincs valahogy sorbarendezve akkor minden egyes kereses benne akar az egesz fajl atnezeset jelenti.

  • Gyuri16
    senior tag

    Csao!
    Az alábbi feladattal bajlódom, még nagyon kezdő vagyok javaban. van egy jsp oldalam amin van egy label meg egy gomb, ha megnyomom a gombot akkor a labelen kiíratott számot növelje. Ha egyszer rányomok a gombra akkor megnöveli egyel de utána marad ugyanaz akárhányszor rákattintok. Ez volna a kód:
    <%
    int szam = 0;

    if(request.getParameter("uj") != null)
    {
    szam++;
    }
    %>

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
    <title>JSP Page</title>
    </head>
    <body>
    <label> <% out.print(szam); %> </label>
    <form action ="index.jsp" method="POST">
    <input type="submit" value="Növel" name="uj"/>
    <br/>

    </form>

    </body>
    </html>

    Mit kéne átírnom hogy működjön? Köszi előre is!

    ez nem igy mukodik..
    jsp egy szerver oldali nyelv, tehat a szerveren fut le, es az eredmenyt elkuldi a bongeszodnek. jelen esetben az tortenik, hogy behivod az oldalt, a szerveren ez lefut: szam=0, mivel a feltetel nem teljesul marad is annyi, ezt kiiratod. ha megnyomod a gombot a szkript ismet lefut a szerveren, tehat szam=0 aztan megnezi az ifet, mivel megnyomtad a gombot ezert eggyel noveli, es ezt ki is irja. a szerver ezutan elkuldi neked a valaszt, es elfelejti hogy volt valamilyen valtozoja. ha ismet ranyomsz a gombra akkor szinten az egesz lefut, onnan hogy szam=0, ezert igy nem fogsz nagyobb szamot kapni.
    tobb megoldas van arra, hogy hogyan jegyezz meg valtozokat, ehhez a peldahoz talan a session valtozok illenek leginkabb

  • Gyuri16
    senior tag

    Hello,
    egy valószínűleg nagyon egyszerű kérdésem lenne. Nem rég kezdtem tanulni a nyelvet és a következő problémára egyszerűen nem tudok rájönni.
    Van egy kódom, ami megvalósítja azt a feladatot, hogy egy adott stringet többször kiír:

    public class Multi {

    public static void main(String[] args) {

    int n = 4;
    String str = "hi";
    String result = "";
    for (int i = 0; i < n; i++) {
    result += str;
    }
    System.out.println(result);

    }
    }

    Hogyan tudok ennek a kódnak

    public class Multi {

    public String StringTimes(String str, int n) {
    String result = "";
    for (int i = 0; i < n; i++) {
    result += str;
    }
    return result;
    }
    }

    egy másik osztályban található mainből értékeket adni és kiiratni a végeredményt.
    Azaz pl innen:

    public class Main {

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

    }

    Köszi a segítséget!

    erre vannak a statikus metodusok (static kulcsszo, erre keress ra).
    ilyenkor nem kell peldanyositani az objektumosztalyt. ilyenkor csak az osztaly statikus valtozoihoz ferhetsz hozza (ezt ritkan hasznaljuk, leginkabb minden adat a parameterekben van)
    konkret pelda igy fog kinezni:

    public class Multi {

    public static String StringTimes(String str, int n) {
    String result = "";
    for (int i = 0; i < n; i++) {
    result += str;
    }
    return result;
    }
    }

    public class Main {

    public static void main(String[] args) {
    String str = Multi.StringTimes("abc",5);
    System.out.println(str);
    // System.out.println(Multi.StringTimes("abc",5));
    }

    }

    mod: figyelmetlenul olvastam, termeszetesen az egyszeru megoldas letrehozni egy peldanyt belole, ilyenkor nem kell static:

    public class Main {

    public static void main(String[] args) {
    Multi m = new Multi();
    String str = m.StringTimes("asdf",5);
    System.out.println(str);
    }

    }

  • Gyuri16
    senior tag

    Lenne pár kérdésem.... Most kezdtem tanulni ezt a nyelvet,és a beolvasással(bill.-ről) kapcsolatban lenne kérdésem.

    BufferedReader be=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Kérem az 'a' oldalt:");
    String s1=be.readLine();
    System.out.println("Kérem a 'b' oldalt:");
    String s2=be.readLine();
    System.out.println("Kérem a 'c' oldalt:");
    String s3=be.readLine();
    a=Integer.parseInt(s1);
    b=Integer.parseInt(s2);
    c=Integer.parseInt(s3);

    Itt a kódrészlet,ahol egymás után 3szög 3 oldalát kérjük be. Így adta le a tanár a beolvasást.
    Hogy kell,pl. olyat,h egymás után olvasom be?
    Vagy olyat,hogy egy dárumot szeretnék beolvasni pl.: 2009.4.26 és ezeket feldolgozni.

    Másik: NetBeans-ben ha programokat írok mindegyiket külön packege-be kell rakni?vagy hogy működik ez? Még nem értem teljesen.
    Mert létrehoztam egy projektet és azon belül a default packege-be dolgozok,írtam egy progit az fut. Aztán mikor a másodikat futtatnám (NB-n belül) akkor az első fut.

    a readline egy sort olvas be, szoval ha azt irod hogy 2009.4.26 es entert nyomsz, akkor azt kapod meg a String-be. Ezt aztan fel lehet dolgozni, attol fuggoen milyen az adat

    NetBeans tapasztalatom nincs, de java-ban a package gyakorlatilag egyenlo egy konyvtarral. minden egyes file ami abban a packageban van, tudatja magarol, hogy a package resze (elso sorban package xy). ha aztan ebbol az filebol akarsz egy osztalyra hivatkozni (kivulrol, tehat mas packagebol) akkor package.osztalynev kell. egy program altalaban tobb packagebol all, ez az embereknek segit logigailag csoportositani az osztalyokat.
    minden programban egy main metodus celszeru (elvileg lehet tobb is, de meg nem jottem ra mire jo). igy ha uj programot akarsz irni akkor ahhoz egy uj projektet kell csinalnod, uj osztallyal, main metodussal.

  • Gyuri16
    senior tag

    Javában kell metódust írnom faktoriálisszámításhoz, a következő kóddal dolgoztam

    public static void main(String[] args)
    {
    int n;
    System.out.println("Kérem a számot:");
    n=Input.readInt();
    for (int i=1;i<n;i++)
    {
    System.out.println(fakt(n));
    }
    }
    public static long fakt (int szam)
    {
    int eredmeny=1;
    for (int i=1;i<szam;i++)
    {
    szam=szam*i;
    eredmeny=szam;
    }

    return eredmeny;
    }

    Lehet nem tiszta a számomra a metódusok használata, de a fakt metódus szam helyére helyettesítődik be a main metódus n értéke?

    a fakt egy fuggveny, melynek egy int tipusu parametere van. a main-ben fuggvenyhivasnal az n valtozo erteke at van adva a fakt fugvenynek (ami onnan szam neven ismeri)

  • Gyuri16
    senior tag

    Üdv!

    Egy generikus típusú tömböt szeretnék létrehozni azonban egyszerűen nem tudom, hogyan lehet létrehozni egy ilyen tömböt.
    Megnéztem a google-ban és ott ezt írták:

    T[] pile = (T[]) new Object[255];

    Ennek alapján én is megcsináltam:

    LinkedList<Pont<E>>[] szintLista = (LinkedList<Pont<E>>[]) (new Object[MAX + 1]);

    Azonban futtatásnál az alábbi kivételt dobja:
    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.util.LinkedList;

    Várom a tippeket, hogy mi lehet vele a gond.

    ez kell neked szerintem:
    Array.newInstance(class, size)
    [link]

    sarkany007, Oszkár26: ti probalkozzatok inkabb itt:
    [link]

  • Gyuri16
    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

  • Gyuri16
    senior tag

    Köszi!
    A main-be írnám, de ezt dobja hibának:

    unreported exception java.io.IOException; must be caught or declared to be thrown

    Kivételkezelés?

    igen, kivetel. vagy teszel kore egy try-catch blokkot, vagy a fv melle odairod hogy throws
    bovebben it:
    [link]

  • Gyuri16
    senior tag

    köszi

    amit én csináltam azzal is az volt a baj hogy a 4 számot összehasonlítja és kiírja a legnagyobbat de azon kívül még 1 számot és nemtudtam hogy miért. köszönöm a gyors megoldást :R

    szivesen.
    az hogy a tied miert ir ki ket szamot egyszeru, nezd meg hogyan vannak az ifek

    if(szam1>szam2){
    if(szam1>szam3)
    System.out.println("A legnagyobb szam a "+szam1);
    }
    else
    System.out.println("A legnagyobb szám "+szam3);
    //////////////////////////////////////////////////////////////////////////
    if(szam2>szam3){
    System.out.println("A legnagyobb szam a "+szam2);
    }
    else
    System.out.println("A legnagyobb szam "+szam3);

    ami a //////// folott van, az egy if, ami alatta egy masik, es mindketto kiirhatja a sajat megoldasat, ezert van ott ket szam

  • Gyuri16
    senior tag

    helló

    lenne egy egyszerű java feladat de nekem nem megy. az a feladat hogy 4 számot be kell kérni billentyűzetről majd ezeket összehasonlítani és a legnagyobbat hiíratni de egymásba ágyazott if elágazásokkal. nekem 3számra sikerült megcsinálni de a +1 szám kifogott rajtam. a feladat holnapja kellene:) itt az én verzióm de ez csak 3számot hasonlít össze:
    import java.util.Scanner;
    public class Legn{
    public static void main (String[] args){
    Scanner billentyuzet = new Scanner(System.in);
    System.out.println("Adj meg 3 számot");
    Double szam1= billentyuzet.nextDouble();
    Double szam2= billentyuzet.nextDouble();
    Double szam3= billentyuzet.nextDouble();
    double szam4= billentyuzet.nextDouble();
    if(szam1>szam2){
    if(szam1>szam3)
    System.out.println("A legnagyobb szam a "+szam1);
    }
    else
    System.out.println("A legnagyobb szám "+szam3);
    if(szam2>szam3){
    System.out.println("A legnagyobb szam a "+szam2);
    }
    else
    System.out.println("A legnagyobb szam "+szam3);
    }
    }

    köszi :R

    amit irtal nekem nem volt jo ( kiir tobb valaszt is..)
    en megoldasom a 4 szamra:

    import java.util.Scanner;

    public class Legn {

    static void kiir(Double d) {
    System.out.println("A legnagyobb szam a "+d);
    }

    public static void main (String[] args) {
    Scanner billentyuzet = new Scanner(System.in);
    System.out.println("Adj meg 3 számot");
    Double szam1= billentyuzet.nextDouble();
    Double szam2= billentyuzet.nextDouble();
    Double szam3= billentyuzet.nextDouble();
    Double szam4= billentyuzet.nextDouble();
    if (szam1 > szam2){ //1>2
    if (szam1>szam3) { //1>2, 1>3
    if (szam1 > szam4) { //1>2, 1>3, 1>4
    kiir(szam1);
    }
    else { // 1>2, 1>3, 1<=4
    kiir(szam4);
    }
    }
    else { // 1>2, 3>=1
    if (szam3 > szam4) { //1>2, 3>=1, 3>4
    kiir(szam3);
    }
    else { //1>2, 3>=1, 3<=4
    kiir(szam4);
    }
    }
    }
    else { // 1<=2
    if (szam2 > szam3) { // 1<=2, 2>3
    if ( szam2 > szam4 ) { //1<=2, 2>3, 2>4
    kiir(szam2);
    }
    else { // 1<=2, 2>3, 2<=4
    kiir(szam4);
    }
    }
    else { // 1<=2, 2<=3
    if ( szam3 > szam4 ) { // 1<=2, 2<=3, 3>4
    kiir(szam3);
    }
    else { // 1<=2, 2<=3, 3<=4
    kiir(szam4);
    }
    }
    }
    }
    }

    probaltam kommentezni es zarojelezni, hogy atlathato legyen, remelem segit
    semmi magia nincs mogotte, egyeduli dolog ami hasznalva van, hogy a < tranzitiv

    mod: sajna a tabokat megette a forum, de azert igy is hasznalhato

  • Gyuri16
    senior tag

    szeretnek irni egy programot, ami egy problemara tobb megoldast tud nyujtani (kulonbozo algoritmusok, amik ugyanazt a celt szolgaljak), es ezeket osszehasonlitani (futasi ido).
    ugy kepzeltem el, hogy lesz egy absztrakt osztalyom, amiben benne lesz az osszes funkcio amit hasznalni szeretnek. ezutan megirom a kulonbozo algoritmusokat (mind kulon osztalyban). itt jonne a kepbe egy tesztelo user interface, ahol lehetne valogatni az algoritmusok kozott, es kulon tesztelni oket (bemeno adatokat megadni, stb).
    egeszet ugy szeretnem megcsinalni, hogy barki irhasson ilyen algoritmust, es azt is lehessen tesztelni a programomban. vegulis ugy gondolnam, hogy pluginkent kezelne ezeket az osztalyokat, es tudna oket futtatni, listazni (mondjuk egy konyvtarbol). termeszetesen az osszes osztalynak az en absztrakt osztalyomtol kellene orokolnie a fuggvenyeket.
    kerdes az lenne, hogy hogyan tudok letrehozni egy fajlt, amit aztan hasznalhatok pluginkent, tehat oda tudom adni a programnak, o felismeri, hogy bizony azt csinalja amit kell, es meg tudja hivni a fuggvenyeit?
    (ha van ilyesmire standard eljaras eleg valami link leirasra, de hirtelen google nem segitett, nem igazan tudom mit kellene keresnem)

  • Gyuri16
    senior tag

    Exception in thread "main" java.lang.NullPointerException
    at Aruhaz$Termek.access$300(Aruhaz.java:4)
    at Aruhaz.Eladas(Aruhaz.java:106)
    at Aruhazteszt.main(Aruhazteszt.java:15)

    De még nem volt időm megnézni, biztos valami banális hiba. :(

    ez a hiba szerintem akkor fordulhat elo ha az utolsot tavolitod el igy:
    while(seged.kovetkezo!=null) seged=seged.kovetkezo; // ellepdelsz az utolsoig

    seged.elozo.kovetkezo=seged.kovetkezo; // ez beallitja nullra, jo
    seged.kovetkezo.elozo=seged.elozo; // seged.kovektezo == null, ez hibat dob
    ...

    aztan lehet hogy valami mas a hiba, de megneznem ezt

  • Gyuri16
    senior tag

    Láma kérdés, de hogy törlöm? :F

    javaban leginkabb sehogy. de mondjuk ha az osszes referenciat ami ra mutatott beallitod nullra (vagy valami masra, hogy megmaradjon a listad), akkor elobb vagy utobb ki lesz torolve

  • Gyuri16
    senior tag

    Láncolt listából hogy törlünk? Helyes ez a logika?:
    a segéd a futó listatag

    seged.elozo.kovetkezo=seged.kovetkezo;
    seged.kovetkezo.elozo=seged.elozo;
    seged.kovetkezo=null;
    seged.elozo=null;

    szerintem jo ez igy. az elso ket sor is eleg arra hogy kikeruljon a listabol, es ha mar nem lesz hogyan odajutni akkor mindegy hova mutatnak onnan a elozo es kovetkezo referenciak.
    hasznalhatsz LinkedList-et is, az megoldja helyetted.

  • Gyuri16
    senior tag

    Jad és Jadclipse.

    Ha van róla rendes forrásod akkor eclipse-ben meg kell adni, hogy hol keresse a classokhoz a forrást.

    vegulis sikerult, letoltottem a forrasokat innen:
    [link]
    aztan mar csak attach source.

    amugy neztem amit irtal is, de a jad-nak mar nem mukodik a honlapja.

    koszi a segitseget :R

  • Gyuri16
    senior tag

    mit kell lehuznom ahhoz, hogy eclipseben ctrl+egergomb kombora megkapjam a standard fuggvenyek es classok forraskodjat (a sajatoknal ez mukodik, de hogy mukodjon a java sajatjaira is). most azt irja hogy nincsenek meg neki a forrasfajljai.

  • Gyuri16
    senior tag

    sziasztok
    ahogy azt nemsokára meglátjátok még kezdő java-s vagyok, és hát mondhatni 'elakadtam'.
    egy mátrixot szeretnék úgy feltölteni,hogy először oszlopot aztán sort,ahogy az ugye a nagykönyvben meg van írva két egymásbaágyazott for ciklussal,ellenben annak ellenére hogy lefordul a program,futás közben kapok egy hibát. mutatom a kódrészletet ami ehhez tartozik és a hibát is, és ha tudtok, akkor légyszi segítsetek:)

    System.out.print("A mátrix sorainak száma:");
    int n = Input.readInt();
    System.out.print("A mátrix oszlopainak száma:");
    int m = Input.readInt();
    int matrix[][] = new int[n][m];
    for(i=0;i<=n-1;i++)
    {
    for(j=0;j<=m;j++)
    {
    matrix[i][j]=x;
    x++;
    }
    }

    és az eredmény pedig: A mátrix sorainak száma:1
    A mátrix oszlopainak száma:1
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at matrixos.main(matrixos.java:16)

    a belso for ciklusban a j valtozod 0-tol m-ig fut, de a tombodnek csak m sora van (j<=m-1 kell, mint a kulso ciklusban is)

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

Hirdetés