Hirdetés

Keresés

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

  • D4nte
    csendes tag

    "A változóknak két fajtája van: primitívek és hivatkozások.
    A primitív változók olyan értékekkel vannak tele, amelyek a változó tényleges értékét ábrázolják.
    Az objektum típusú változó (hivatkozó változó), azonban az objektum elérésének módját tárolják."

    Agyhullám: Java könyvben ez szerepel.
    Én nem értem, hogy lehet referencia egy primitív, habár még nem vagyok gyakorlott a Javaban :/.
    A referencia változó az egy objektumra hivatkozik aminek vagy van beállított példány változói vagy nincs, ha nincs akkor csak egy sima tulajdonság nélküli objektum, viszont a primitív változó az int, float, double stb... és használat előtt bekell állítani valamilyen értékre.
    Jelenlegi ismereteim alapján egyetlen közös tulajdonságuk van, hogy biteket ábrázolnak. De ha bonyolult az okkifejtése akkor tényleg hagyjuk :)

    Csak egy vessző hiányzott abból a hozzászólásból szerintem, nem úgy gondolta. Az oracle java tutorial-ban amúgy teljesen érthetően le van írva ez a paraméterátadásos téma.

  • D4nte
    csendes tag

    Ja persze. Azért annyira nem, hogy, azt mondjam tényleg őrült vagyok, ha manapság Eclipse-t használok. Ráadásul szabadon.

    Kezdődhetne az "én IDE-m a legjobb merthogy" harc is ezzel, de mivel ezt már sok helyen eljátszották felesleges az ismétlés. Örüljünk, hogy van választék. (Amúgy eclipse forevör alap :D)

  • D4nte
    csendes tag

    Üdv újra!
    Egy ABC rendezéssel szenvedek. Leegyszerűsítettem az egészet egy külön programba, elsősorban, hogy egy ilyen egyszerű esetben is csinálja-e, amit csinál. Sajnos igen. Az utolsó elemet berakja előre, és viszon'látás! :(
    Minimumkiválasztásos rendezéssel ezt csinálja, közvetlen kiválasztásossal pedig az égvilágon lófült sem tesz. A minimumkiválasztásost írom le, most az van kicsinyítve nekem.
    String csereseged;
    String []rendnev={"A","B","C","D","E"};
    int cser;
    int i=rendnev.length;
    for(int j=0;j<i-1;j++){
    cser=0;
    for (int k=j+1;k<j;k++){
    if (rendnev[j].compareTo(rendnev[cser])>0) cser=k;
    }
    csereseged=rendnev[j];
    rendnev[j]=rendnev[cser];
    rendnev[cser]=csereseged;

    }
    for(int j=0;j<i;j++) System.out.println(rendnev[j]);

    Az lenne a legjobb, ha magadtól rájönnél mi a hiba (ha az írás óta ez megtörtént az nagyszerű). Melléteszed a keresés Pszeudokódját segítségül esetleg (de ne görgesd le mert ott a java-s is!), és úgy már mindenképpen menni fog a javítás.

  • D4nte
    csendes tag

    Ez a futtatás nem akar nekem összejönni
    ezt írja ki:
    "Exception in thread "main" java.lang.Error: Unresolved compilation problem:

    at GameLauncher.main(GameLaucher.java:2)
    "

    Ezután már futtatható IDE-ből, exportálható JAR fájlba, majd futtatható a jar a JVM segítségével... -ezt, hogyan tudom megcsinálni ?

    "at GameLauncher.main(GameLaucher.java:2)"

    Fájlneveket ellenőrizd. Az a GameLaucher kicsit hiányos.

  • D4nte
    csendes tag

    Valójában mindegy, hogy 64 vagy 32 bit. A JDK verzió a lényeg. Egyébként szerintem itt ez sem zavarhat, mert a rosszabb esetben is Java 6-ot telepített fel, és csaknem buildelték Java 7-en a programot. :D

    Azért írtam oda, mert először 32bites swt-t töltöttem és azzal exception lett egyből, azzal az üzenettel, hogy jdk-nak megfelelő kell.

  • D4nte
    csendes tag

    a java-t már újraraktam,de semmi belinkelem inkább az oldalt mert írnak ott valamit csak nem értem mit kellene csinálni.

    [link]

    ez a hibaüzi:

    Nem írtad le konkrétan, hogy mit csináltál, de akkor a leírás alapján: Leszeded a programot (SamyGO ChanEdit v0.42.bz2). Leszeded a megfelelő swt-t (nem mindegy 32bit vagy 64, a jdk-nak megfelelő kell) mondjuk innen. Ezután ezeket kicsomagolod, ahogy írja elég csak a SamyGoChanEd.jar és a swt.jar, egy mappába. Aztán abban a mappában állva rányomod a "java -classpath .;swt.jar;SamyGoChanEd.jar gui.Main" parancsot, és mennie kellene. (Nálam jdk1.7.0_45-es jdk-s java van a Path-ba betéve, ha nálad nincs beállítva, akkor ahogy a leírásban is van, add meg neki javad (JDK legyen) elérési útját). Így nálam működött.

  • D4nte
    csendes tag

    Üdv! Van egy letöltéskezelő program, a JDownloader, amit Java nyelven írtak. Nagyon lelassult a Windows, ezért a Windows Feladatkezelőben az Alkalmazásoknál leállítottam a JDownloadert. De mikor később megint elindítottam, akkor a letöltési lista üres volt. Vissza lehet hozni a letöltési listát vagy elvesztettem?
    Bocs, hogy itt teszem fel a kérdést, de már máshol megtettem, eltelt 24 óra és nem volt válasz. Hátha itt valaki tudja.

    Rövid google keresés után ez a [link] idevágónak tűnik, hátha segít neked is.

  • D4nte
    csendes tag

    Értem, de nem teljesen jó (biztos béna vagyok még)

    String change = actor1.toUpperCase();
    String change = actor2.toUpperCase();

    Az első még jó, de a másodiknál már nem fogadja el

    change is already defined in main(java.lang.String[])
    String change = actor2.toUpperCase();

    change után definiálni kell, a változtatandót ?
    vagy teljesen rosszul értelmeztem ?

    A legegyszerűbb akkor, ha meg is mutatom, amit leírtam.

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";

    // az adatok megjelenítése
    System.out.println(title + " (" + year + ")\n" + "A "
    + director.toUpperCase() + " film.\n\n" +
    role1 + "\t" + actor1.toUpperCase() + "\n" +
    role2 + "\t" + actor2.toUpperCase() + "\n" +
    role3 + "\t" + actor3.toUpperCase() + "\n" +
    role4 + "\t" + actor4.toUpperCase());
    }
    }

  • D4nte
    csendes tag

    Na szóval akkor újra!

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 );

    }
    }

    Ez az eredeti kód.
    Mikor futtatom akkor megjeleníti a szövegeket. (tudom, hogy tudjátok :D csak magam miatt írom le)
    Pl: Ada Holly Hunter
    Baines Harvey Keitel
    stb
    És az volna a kérdésem, hogyan lehet a legkönnyebben úgy megváltoztatni a kódot, hogy csak az actorok és a director legyen Teljesen nagybetűvel a többi marad az eredetiben.

    String change = director.toUpperCase();
    Ugye ez megváltoztatja a directorhoz rendelt Jane Campion nevet JANE CAMPION-ra
    + "\n" + change
    Ez pedig megjeleníti.

    Na már most azóta én már átírtam a kódot, így fest most.
    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    // az adatok egy részének, nagy betűvel való megjelenítése
    String changedirector = director.toUpperCase();
    String changeactor1 = actor1.toUpperCase();
    String changeactor2 = actor2.toUpperCase();
    String changeactor3 = actor3.toUpperCase();
    String changeactor4 = actor4.toUpperCase();
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + changedirector + " film.\n\n" +
    role1 + "\t" + changeactor1 + "\n" +
    role2 + "\t" + changeactor2 + "\n" +
    role3 + "\t" + changeactor3 + "\n" +
    role4 + "\t" + changeactor4);
    }
    }

    A kérdés még mindig az, hogy van-e rövidebb megoldás erre ? vagy ez így jó ?
    Elnézést, hogy ilyen hosszúra sikeredet.

    Köszönöm a segítségetek.

    A change* változókba nem szükséges külön eltárolnod a nagybetűsített dolgokat, annyi, hogy a printedben hívod meg ugyan új a függvényt az eredetiekre, amennyiben a kiíratáson kívül másra nem akarod használni ezeket a nagybetűsített verziókat. Ettől még az eredeti stringek (az előző hozzászólásokból is kiderülten) változatlanok maradnak.

  • D4nte
    csendes tag

    Elég már csak abba is belegondolnod, hogyha nem lenne a megfelelőségi kapcsolat meg, akkor az alosztály ősosztály helyén való használata, szebb nevén helyettesíthetőség, nem tudna értelmesen működni.

    hoppá válasznak akart menni Laccesnek

  • D4nte
    csendes tag

    Hali!

    Köszönöm a válaszokat! Athlon64+, Davs :) :R

    Most jövők elméleti / gyakorlati kérdésekkel, majd. Leporoltam a Java könyveket, és erősen Java hivő lettem ;]

    A beágyazott osztályok, még odébb vannak, de ha ott tartuk, feltétlenül szólok!
    Classloader-t nem ismerem, feliírtam magamnak, az általában melyik nagyobb témakörrel együtt szerepel? Beágyazott osztályoknál? Nekem még ez új volt. :) Mindenképp utánaolvasok majd :)

    Ezt jó volt megjegyezni, hogy a static osztály, csak belső lehet.

    Akkor viszont, jöjjön a kérdés:
    "Mivel azonban a nested classod privát, ezért kívülről egyébként sem férhetsz hozzá az osztályhoz, így az adattagokhoz sem, csak és kizárólag a tartalmazó osztályból."
    1.
    - Miért fér hozzá a tartalmozó osztály? Hiszen ha a belső osztály privát, akkor elméletben nem férek hozzá. De mégis hozzáfér az őt tartalmazó osztály? Miért?
    Például van az A osztáy privát, a B osztály public, akkor az A hozzáfér a B osztály tagfüggvényeihez/adattagjaihoz, de a B nem férhet hozzá az A-hoz.

    2.
    - Milyen gyakorlati haszna van, és mikor érdemes belső static osztályt használni a sima osztály helyet?

    3.
    - Ősosztály példánya hajthat-e végre, az alosztály példányán műveleteket, ha az privát láthatóságú.
    Példa.: Ez így lehet nem állja meg a helyét, meg én Interfésszel valósítanám meg, de elméleti kérdés... Legyen adott egy publikus Állat ősosztály, itt van például az ugat() metódus. És van a publikus Kutya és a privát Farkas alosztály.
    Legyen egy függvény az állatban: hajtóvadászat(Állat állatPéldány) néven, amely meghívja az állat példányhoz tartozó ugat() metódust.
    Ha ezt a hajtóvadászat(Állat állatPéldány) függvényt meghívom úgy, hogy a paraméterben egyszer a Kutya osztály egy példánya van, akkor azon az ugat()-ot végre tudja hajtani, de ha Farkas osztály egy példányánál már nem tudja meghívni az ugat() fv-t igaz? Gondolom ilyenkor a JVM RuntimeException-t kéne dobnia.

    4.a
    Ha egy ősosztály privát (és vele együtt, minden adattag, és tagfv.), és rendelkezik alosztállyal, akkor a fordító automatikusan legenerálja az alosztály számára is a privát adattagokat/tagfv-t?
    4.b
    Vagy az ősosztály protected/privát, és van benne 1 privát adattag. Akkor az alosztály is megkap minden egyes adattagot, még a privát-ot is, csak annyi a különbség, hogy nem fér hozzá az ősosztály ezen privát adattagjához.
    Pl: Állatnak van a privát futás(), és van a publikus Farkas alosztály, akkor a farkas példányának is van futás() nevű fv-e, igaz?
    De akkor megint itt jön a helyetesíthetőség elve, hogy ha Egy Feldolgozó osztályban (Például egy függvényt, amely paraméterben egy állat osztályt vár)meghívom az Állat osztály egy állat nevű példányát, akkor a futás() fv-hez nem férek hozzá. És ha az állat példány helyett egy farkas példányt hívok meg, akkor annak a futás()-a meghívható...
    Nem tudom, hogy mennyire voltam érthető...

    5.
    Akkor ha egy osztály publikus vagy privát, és az adattagjainál nincs külön feltüntetve, hogy milyen láthatóságú, akkor automatikusa az osztály láthatóságát kapják meg, igaz? :)

    arn: http://nagygusztav.hu/java-programozas -ez az előbb említett fórumtárs által javasolt könyv, egy sokkal rövidebb és magyarosított változata.(néha van egy olyan érzésem, hogy csak egy fordító progi lett ráeresztve az eredeti könyvre...) A Thinking in Java könyv, tényleg nem rossz, de én félbe hagytam anno. De nagyon részletes, és még Design Pattern példák is vannak benne!

    5. Annyi azért legyen már tisztázva (csak azért, mert nem értem, miért pont publikus meg privát láthatóságot írtál itt), hogy egy normál osztály (nem belső) csak publikus, vagy ha nem teszel ki láthatósági jelölést, akkor csomagszintű (package) láthatóságú lehet.

    A belső osztály már más kategóriába esik, az lehet public, protected, private, package (nincs kulcsszó írva) szintű is.

    (Még itt érdemes megemlíteni, ha esetleg itt lehetne kavarodás, hogy az Interface egy külön eset, ott minden tag public alapból. (mindegy hogy kiírod, vagy sem))

    Végül pedig az igazi kérdésedre, az előbb leírtak mellett, NEM a válasz, már fentebb is írták. Ha nincs feltüntetve, hogy milyen láthatóságú egy osztály tagja, akkor csomagszintű lesz.

    3. Nem tiszta nekem, hogy most belső osztályokkal (remélem nem), vagy normállal akartad megoldani, de ilyen dolgoknál (meg a legtöbbnél szintén) egyszerűen ki kell próbálni, ha tudod.

    public class Allat {
    void ugat() {
    System.out.println("Állatugatás");
    }

    public static void hajtovadaszat(Allat allatPeldany) {
    allatPeldany.ugat();
    }

    public static void main(String[] args) {
    Allat allat = new Allat();
    Kutya kutya = new Kutya();
    Farkas farkas = new Farkas();

    hajtovadaszat(allat);
    hajtovadaszat(kutya);
    hajtovadaszat(farkas);
    }
    }

    class Kutya extends Allat {
    void ugat() {
    System.out.println("Kutyaugatás");
    }
    }

    class Farkas extends Allat {
    void ugat() {
    System.out.println("Farkasugatás");
    }
    }

    kimenet:
    Állatugatás
    Kutyaugatás
    Farkasugatás

    Ennél a példánál tökéletesen működik a polimorfizmus. Ne zavarjon meg, hogy a leszármazott osztályok csomagszintűek lettek, most azért igazából, mert egy fájlba tettem (de lényegtelen ennél e példánál éppen).
    Próbálgasd módosítani a láthatóságokat, és nézd az eredményt, így kitapasztalhatod a dolgokat.

    (Itt az Allat osztály és az ugat metódusa lehetne inkább abstract, de kérdésedhez nem kapcsolódik igazából)
    Csináltam egy belső osztályos verziót is, talán közelebb van ahhoz amit gondoltál.
    másikverzió

    Java tutorials-t gyors, Thinking in java-t részletes tanuláshoz én is ajánlom, ha jól átveszed benne a dolgokat, a kérdéseid mind megválaszolódnak, plusz, ami nem világos, próbáld is ki!

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

Hirdetés