- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
- AMD Navi Radeon™ RX 9xxx sorozat
- Blogjában leplezte le a 12V-2x6 tápkonnektor hibáját a Corsair
- Canon MILC: EOS R és M topik
- Sony MILC fényképezőgépcsalád
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Milyen TV-t vegyek?
- Apple MacBook
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Szentjánosbogárral venné fel a versenyt a Macbook Neo ellen az Intel
-
Fórumok
PROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
Aethelstone
addikt
Sziasztok,
újabb feladathoz értem, ahol elakadtam.
Az alábbi Comapre osztályban minden max metódus azonos, kivéve a típusok neveit. LEhetséges lenne egyetlen max metódussal valamennyit helyettesíteni? Ha igen, akkor melyik megoldást használná?
public class Compare {
public byte max(final byte a, final byte b) {
return a > b ? a : b;
}
public short max(final short a, final short b) {
return a > b ? a : b;
}
public int max(final int a, final int b) {
return a > b ? a : b;
}
public long max(final long a, final long b) {
return a > b ? a : b;
}
public float max(final float a, final float b) {
return a > b ? a : b;
}
public double max(final double a, final double b) {
return a > b ? a : b;
}
public char max(final char a, final char b) {
return a > b ? a : b;
}
}Mire gondolhat, ha a könyvben még nem taglalta a generalizáció fogalmát, a generikus függvényeket? Egyelőre amik voltak: Procedurális nyelvi elemek, OO nyelvi elemek (osztályok, öröklés, beágyazott osztályok).
Vagy ilyet is lehet, ha már a generikusokra rákérdeztél. Ez viszont működik explicit típusokkal is.
(Természetesen a korábban vázolt megoldások tejesen jók)
public class GenericTest<T extends Comparable<T>> {
public T max(T a, T b) {
return (a.compareTo(b) > 0 ? a : b);
}
public static void main(String[] args) {
GenericTest<Double> gt1 = new GenericTest<Double>();
System.out.println(gt1.max(10d, 12d));
GenericTest<Integer> gt2 = new GenericTest<Integer>();
System.out.println(gt2.max(12, 23));
// És így tovább....
}
}Ennek a megoldásnak az az előnye, hogy tulajdonképpen mindenféle típusra lehet max() metódust írni. Kivéve természetesen a primitív típusokat, azokat a generikusok nem támogatják

-
Szmeby
tag
Ezt már kipróbáltam, viszont a main-ben probléma van:
public static void main(String[] args) {
final Compare maxObject = new Compare();
final byte a = maxObject.max((byte) 3, (byte) 5);
System.out.println(a);
final short b = maxObject.max((short) 3, (short) 5);
System.out.println(b);
final int c = maxObject.max(3, 5);
System.out.println(c);
final long d = maxObject.max(3L, 5L);
System.out.println(d);
final float e = maxObject.max(3.4f, 5.1f);
System.out.println(e);
final double f = maxObject.max(3.4, 5.1);
System.out.println(f);
final char g = maxObject.max('a', 'b');
System.out.println(g);
}A double-ösön kívül aláhúzza mindegyiket a maxObject-től a sor végéig, "Type mismatch: Cannot convert double to <éppen aktuális típus>" jelzéssel.
Na igen. Ha kényszeríted, nem adja meg magát.

Bezzeg így:
byte x = 3;
byte y = 5;
byte a = (byte) maxObject.max(x,y);
System.out.println(a);Az oké, hogy a paraméterek mind elférnek a double által lefoglalt területen, viszont így kénytelen vagy double típust visszaadni. A double értéket viszont csak double típusú változóba tudsz beletölteni hiánytalanul.
Ha lefelé castolod (pl. byte-ra), akkor információ veszhet el.
Egy nagy vödörből nem tudod az összes vizet áttölteni egy kis vödörbe. Viszont ha a nagy vödörben eleve kevés víz van, és ezt tudod is, akkor az áttöltés veszteség nélkül megoldható. Bocs a hülye metaforáért.
Bár gányolásnak tartom, de ennél a példánál (két szám maximumát adja vissza) nincs túl nagy veszély. A programozó józanságára van bízva, hogy ha byte-okat ad be, akkor byte-ot biztonságosan visszakaphat. Ha az egyik int lenne, de az érték nem változna, még az is oké. Viszont ha az int értéke pl. 300, akkor gáz van, mert az nem fér bele a byte-ba.
De még 2 byte paraméternél is lehet gond, ha nem maximumot ad vissza a metódus, hanem az összegüket. Bár ez double esetén is gond, ha elegendően nagy számokkal dolgozol.
Amúgy azért nem szeretem ezt, mert figyelmetlenségből is könnyű rontani, ami egy nagy alkalmazásnál aranyos bugokat szül. -
WonderCSabo
félisten
Sziasztok,
újabb feladathoz értem, ahol elakadtam.
Az alábbi Comapre osztályban minden max metódus azonos, kivéve a típusok neveit. LEhetséges lenne egyetlen max metódussal valamennyit helyettesíteni? Ha igen, akkor melyik megoldást használná?
public class Compare {
public byte max(final byte a, final byte b) {
return a > b ? a : b;
}
public short max(final short a, final short b) {
return a > b ? a : b;
}
public int max(final int a, final int b) {
return a > b ? a : b;
}
public long max(final long a, final long b) {
return a > b ? a : b;
}
public float max(final float a, final float b) {
return a > b ? a : b;
}
public double max(final double a, final double b) {
return a > b ? a : b;
}
public char max(final char a, final char b) {
return a > b ? a : b;
}
}Mire gondolhat, ha a könyvben még nem taglalta a generalizáció fogalmát, a generikus függvényeket? Egyelőre amik voltak: Procedurális nyelvi elemek, OO nyelvi elemek (osztályok, öröklés, beágyazott osztályok).
Nem, itt nem erre gondol szerintem. Itt az a lényeg, hogy elég lenne a double-vel megírni a metódust, mivel a többi típus mind szűkebb tartományt ábrázol, implicit, bővítő típuskonverzióval működni fog ha int-et, short-ot stb. adsz át neki.
-
geckowize
őstag
Sziasztok
Elég beginner levelen vagyok Java-ból és gyakorlok egy könyv segítségével (Gál Tibor: Java programozás, Műegyetemi kiadó, 2002) és elakadtam egy feladatnál, amelyet hosszas guglizás követett, de mégsem jutok semmire.
A feladat a következő:
Konstruáljon meg egy osztályt egy parkolóban lévő autók nyilvántartására! Az
osztály tartalmazzon két példányváltozót a rendszám és a belépési idő, tovább
egy statikus változót a parkolóban jelen lévő autók számának tárolására. Az
utóbbit mindig növeljük eggyel, ha egy autó belépésekor létrehozunk egy új
autó objektumot, illetve csökkentsük eggyel, ha megszüntetünk egy autó
objektumot a null hozzárendeléssel.Ebből az utolsó rész nem megy, azaz, nem tudom a csökkentést hol végezzem. Mainben persze meg tudnám írni (simán meghívok egy függvényt a nullá tétel után), de nyilván nem ez a cél, a Car osztályban kellene valahogy megvalósítani, azonban mivel ez nem C++ és nincs destruktor, a finalize()-nak meg nem garantált a lefutása, nem tudom hogyan kellene figyelni, hogy egy-egy példányt null-á teszek.
Eddig a kód a következőképpen néz ki:
Car.java:
import java.util.Date;
public class Car {
private String licensePlate;
private Date arrival;
private static int numOfCars;
public Car(String lp, Date arr) {
this.licensePlate = lp;
this.arrival = arr;
numOfCars++;
}
public static int getNumOfCars() {
return numOfCars;
}
}Main.java:
import java.util.Date;
public class Main {
public static void main(String[] args) {
Date da = new Date();
Car a = new Car("AAA-111", da);
Date db = new Date();
Car b = new Car("BBB-222", db);
System.out.println(Car.getNumOfCars());
a = null;
b = null;
System.out.println(Car.getNumOfCars());
}
}Sziasztok,
újabb feladathoz értem, ahol elakadtam.
Az alábbi Comapre osztályban minden max metódus azonos, kivéve a típusok neveit. LEhetséges lenne egyetlen max metódussal valamennyit helyettesíteni? Ha igen, akkor melyik megoldást használná?
public class Compare {
public byte max(final byte a, final byte b) {
return a > b ? a : b;
}
public short max(final short a, final short b) {
return a > b ? a : b;
}
public int max(final int a, final int b) {
return a > b ? a : b;
}
public long max(final long a, final long b) {
return a > b ? a : b;
}
public float max(final float a, final float b) {
return a > b ? a : b;
}
public double max(final double a, final double b) {
return a > b ? a : b;
}
public char max(final char a, final char b) {
return a > b ? a : b;
}
}Mire gondolhat, ha a könyvben még nem taglalta a generalizáció fogalmát, a generikus függvényeket? Egyelőre amik voltak: Procedurális nyelvi elemek, OO nyelvi elemek (osztályok, öröklés, beágyazott osztályok).
-
cacattila
csendes tag
Ez esetben egy rendkívül ronda trükkel bár elérheted amit akarsz,viszont ez nem megbízható, ugyanis a GC-re hagyatkozol, arra meg nem nagyon vagy befolyással, és őszintén kétlem, hogy a feladatban ilyet kérnének, tekintve a körítést. Lényeg a lényeg, ha felülírod a finalize() metódust, akkor amikor a GC megszünteti az objektumot, akkor ez a fv 1x meghívódik. Ismétlem, nem tartom valószínűnek hogy ez a feladat célja,ugyanis erre nem lehet építkezni, mivel ilyenkor a számláló csökkentésének időzítése nem determinisztikus a program szempontjából. Gyanítom egy destruktorral rendelkező programnyelvhez való példát próbál a tanár Java-ra erőltetni, ez így kicsit veszélyes dolog.
-
WonderCSabo
félisten
-
WonderCSabo
félisten
Sziasztok
Elég beginner levelen vagyok Java-ból és gyakorlok egy könyv segítségével (Gál Tibor: Java programozás, Műegyetemi kiadó, 2002) és elakadtam egy feladatnál, amelyet hosszas guglizás követett, de mégsem jutok semmire.
A feladat a következő:
Konstruáljon meg egy osztályt egy parkolóban lévő autók nyilvántartására! Az
osztály tartalmazzon két példányváltozót a rendszám és a belépési idő, tovább
egy statikus változót a parkolóban jelen lévő autók számának tárolására. Az
utóbbit mindig növeljük eggyel, ha egy autó belépésekor létrehozunk egy új
autó objektumot, illetve csökkentsük eggyel, ha megszüntetünk egy autó
objektumot a null hozzárendeléssel.Ebből az utolsó rész nem megy, azaz, nem tudom a csökkentést hol végezzem. Mainben persze meg tudnám írni (simán meghívok egy függvényt a nullá tétel után), de nyilván nem ez a cél, a Car osztályban kellene valahogy megvalósítani, azonban mivel ez nem C++ és nincs destruktor, a finalize()-nak meg nem garantált a lefutása, nem tudom hogyan kellene figyelni, hogy egy-egy példányt null-á teszek.
Eddig a kód a következőképpen néz ki:
Car.java:
import java.util.Date;
public class Car {
private String licensePlate;
private Date arrival;
private static int numOfCars;
public Car(String lp, Date arr) {
this.licensePlate = lp;
this.arrival = arr;
numOfCars++;
}
public static int getNumOfCars() {
return numOfCars;
}
}Main.java:
import java.util.Date;
public class Main {
public static void main(String[] args) {
Date da = new Date();
Car a = new Car("AAA-111", da);
Date db = new Date();
Car b = new Car("BBB-222", db);
System.out.println(Car.getNumOfCars());
a = null;
b = null;
System.out.println(Car.getNumOfCars());
}
}Őszintén szólva annyira nem jó ez a feladatkiírás. Én konkrétan nem is értem, hogy milyen null hozzárendelésre gondol.
Új hozzászólás Aktív témák
-
Fórumok
PROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- AMD Navi Radeon™ RX 9xxx sorozat
- Xiaomi Mi 8 - így csinálunk csúcsmodellt Mi
- Linux kezdőknek
- Luck Dragon: Asszociációs játék. :)
- Filmvilág
- Okos lesz a következő szemüveged
- Blogjában leplezte le a 12V-2x6 tápkonnektor hibáját a Corsair
- Fotók, videók mobillal
- Facebook és Messenger
- Autós topik
- További aktív témák...
- Amazon Kindle 10th Generation ébresztős tok
- Ventilátorok és modding termékek kitűnő árakon! Most további extra kedvezmények!
- Playstation VR2 3 hónap garancia, számlával!
- BESZÁMÍTÁS! 8TB WD GOLD WD8004FRYZ HDD meghajtó garanciával hibátlan működéssel
- Lenovo Yoga 7i - 14" WUXGA OLED Érintő - Ultra 5 125H - 16GB - 1TB - Win11 - 1 év garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest





