Új hozzászólás Aktív témák
-
Karma
félisten
válasz alratar #4126 üzenetére
Szerintem (ezt most JDK híján nem tudom tesztelni) ha explicite Objectre castolsz és az Objectet valami másra, az fordítási időben nem okoz problémát, csak futásidőben ClassCastExceptiont dob. Ezzel meg lehet kerülni a közös ágat, de újfenn futni nem fog
“All nothings are not equal.”
-
trisztan94
őstag
válasz alratar #4207 üzenetére
A <= es a >= logikai operatorok, jelentesuk: kisebb egyenlo, nagyobb egyenlo.
a => hozzafuzesre valo, amit irtal:
x => 10 azt jelenti, hogy x legyen egyenlo 10-el. Altalaban asszociativ tombnel hasznaljak leginkabb php-ban, pl: elem => 15 es akkor ugy hivatkozol ra, hogy array[elem] -> ennel az erteke 15
szerk: javitom magam: csak php-ban van ertelme (+ olyan nyelvekben ahhol vannak asszociativ tombok)
[ Szerkesztve ]
https://heureka-kreativ.hu
-
-
WonderCSabo
félisten
válasz alratar #4843 üzenetére
Csak az, hogy mégsem String típusú objektumot adtál át az add metódusnak, hanem elnéztél valamit. Fontos, hogy a statikus típusnak is String-nek kell lennie, mivel fordítási időben történik a típusellenőrzés, szóval egy Object statikus típusú objektumot nem tudsz átadni, hiába dinamikus típusa String.
Egyébként látom nem csak sikerült megfogadni a tanácsot, és ArrayList-et használni.
[ Szerkesztve ]
-
WonderCSabo
félisten
válasz alratar #4850 üzenetére
Nem biztos, hogy jó lesz, nem teljesen értem, hogy mit akarsz. Egyébként Object-et típusparaméternek nem sok értelme van megadni, legalábbis ebben az esetben semmi.
Ha Object-et adsz meg típusparaméternek, akkor bármilyen objektumot berakhatsz a konténerbe. Pl.
Vector<Object> vector = new Vector();
vector.add(new String());
Integer integer = (Integer) vector.get(0);Az utolsó sor fordítási időben teljesen legális kód, de ClassCastException-nel jár, hiszen a String nem Integer. A vicc az, hogy a generic-et pont arra találták ki, hogy ezt a problémát kiküszöbölje, Te pedig arra akarod használni, hogy mégis probléma lehessen belőle...
[ Szerkesztve ]
-
WonderCSabo
félisten
válasz alratar #4855 üzenetére
Itt eléggé nagy kavar van.
A Vector<String> aru példányváltozót elfedi a lokális Termek aru - ez bár legális, nem éppen okos döntés. Valamelyiket mindenképpen nevezd át, az elsőnek van rossz neve mellesleg.
A zoldsegek Vector hol van definiálva?
Termek aru = new Temek(nev, 0.0);
if (zoldsegek.contains(aru)) {Ez itt mindig false-ot fog visszaadni, mivel a contains az equals metódust hívja meg, ami pedig alapesetben a referenciákat hasonlítja össze, azok pedig sosem fognak egyezni, hiszen mindig új objektumot hozol létre. Definiáld felül az equals és hashCode metódust a Termek osztályban, hogy ez értelmesen működjön.
A Vector<String> aru típusparamétere miért nem Termek?
Console.readLine
Csak kíváncsiságból kérdezem: ezt az osztályt milyen framework szolgáltatja?
[ Szerkesztve ]
-
Jim-Y
veterán
válasz alratar #4855 üzenetére
Én ezt így csinálnám.
Nyílván csinálhatnál ekkor a gyümölcsöknek is egy külön osztályt. De akár az is játszik, hogy nem csinálsz egy külön interface-t, hanem pl a Zöldséget a Termék osztályból származtatod, mint ahogy a Gyümölcsöt is.
Ez sem egy világbajnok kód, de szerintem annál amit csináltál jobb[ Szerkesztve ]
-
Karma
félisten
válasz alratar #4855 üzenetére
A menny += menny csak nekem tűnt fel?
Mindenesetre eddig ez elég FUBAR, szerintem lassítanod kéne egy kicsit és két dolgot mindenképp megejteni: kicsit végiggondolni hogy ki kivel van, és némi konvenciót is kéne találnod a tagváltozókban (vagy kiírni a this-t, mert így a settereid nem sokat csinálnak.
WonderCsabo: a += -re gondoltam explicite
[ Szerkesztve ]
“All nothings are not equal.”
-
WonderCSabo
félisten
válasz alratar #4865 üzenetére
Az, hogy amikor ezt írod, hogy
public void setMenny(double menny) {
menny += menny;
}Akkor a paraméterben kapott menny változó értékét növeled meg, és nem a példányváltozóét. A lokális változó mindig elfedi a tagváltozót. Úgy tudsz ilyen esetben a tagváltozóra hivatkozni, hogy:
public void setMenny(double menny) {
this.menny += menny;
}A másik opció, hogy átnevezed a paramétert. Tényleg el kéne olvasnod valami alap Java könyvet, vagy vmi tutorialt végigcsinálni. De egyébként ez a jelenség más nyelveken is így vna.
[ Szerkesztve ]
-
WonderCSabo
félisten
válasz alratar #4867 üzenetére
De ennek semmi értelme! A függvény lefutása után a lokális változó felszabadul, és a növelt érték megy a kukába... Gondolom itt azt akartad elérni, hogy az osztály által reprezentált áru mennyisége változzon meg, nem?... Mert arra a jelenlegi függvényed nincs hatással.
[ Szerkesztve ]
-
Karma
félisten
válasz alratar #4865 üzenetére
A másik baj amellett, hogy a mennyiség mindig nulla marad az előzőek miatt az az, hogy úgy nevezted el a metódust, hogy "set". Ez azt jelenti mindenki más számára, hogy a paraméterben megadott szám lesz az új érték, nem pedig megnöveled azzal
“All nothings are not equal.”
-
floatr
veterán
válasz alratar #4878 üzenetére
Akkor hadd szóljak ki egy kicsit az enterspájzból én is. Ha egy metódusnak a neve "set...", de nem értéket állít be, hanem összead, akkor -- még ha azt is csinálná, amit kellene -- egy kód review-nál fognak hátba vágni. Másrészt meg sokak számára fájó pont, de célszerű legalább az elnevezések esetében angolt használni. Ha egy végzős egyemistát bedobnak a mély vízbe, nagy eséllyel kerülhet olyan projektbe, ami külföldi kooperációban készül.
De ha a konkrét példánál maradunk, akkor sokkal hatékonyabb lenne egy Map-be tárolni, és kulcs (név) alapján keresni, vagy Set-be pakolni, és hashCode/equals metódusokat használni. Ha ez valami oktatáshoz kötődik, akkor nem értem, hogy miért nem lehet életszerűbb példákon keresztül oktatni.
-
floatr
veterán
válasz alratar #4885 üzenetére
Ha a cél a Vector használata, akkor nem életszerű.
Az ilyen nyilvántartásokat Map vagy Set használatával sokkal egyszerűbb, és gyorsabb is kezelni. Ha rendezési elv is van mögötte, akkor vannak rendezhető Map-ek is. Nem véletlen, hogy általában adatbázist is raknak mögé.
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Imperium Ryzen 5 Phoenix 8000 PC Ryzen 5-8600G, A620TUF, 16GB DDR5 RAM, 1TB SSD
- Garanciális be quiet! Silent Loop 2 360mm (BW012) ( Light Wings ventikkel )
- IPad Mini 4 - 128 GB - Cellular + Wifi (+ TOK + FÓLIA)
- ÚJ Lenovo Legion 5 16IRX9 - 16" WQXGA 2k 165Hz - i5-13450HX - 16GB - 512GB - RTX 4060 - 3év garancia
- 1 TB Samsung M.2 2280, NVMe, PCIe, Gen4X4, SSD /számlával / 12 hónap jótállással
Állásajánlatok
Cég: HC Pointer Kft.
Város: Pécs
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest