- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- GoodSpeed: ASUS RT-BE92U WiFi 7 router a felsőházból
- gban: Ingyen kellene, de tegnapra
- gerner1
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- djculture: Az elvileg már senkinek nem kellő HDD-k ára is egekbe emelkedett 4 hónap alatt
- eBay-es kütyük kis pénzért
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokPROHARDVER! - 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ésFÁ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
-
WonderCSabo
félisten
Ez már rossz. Legyen a JDK1.8 a default VM? Jól van beállítva? Ha editre kattintasz fel vannak sorolva a jarok stb? Csinálj egy új projektet, és nézd meg úgy, mert a Libraries alatt ott kell lennie a JRE System Librarynek.
-
WonderCSabo
félisten
-
WonderCSabo
félisten
-
WonderCSabo
félisten
Próbáltam egyedül megoldani, de nem ment, így ide írok remélve, hogy segítetek!
Írtam egy osztályt mely tartalmazza a JFrame-et:
class OwnFrame extends JFrame {Azonban aláhúzza a JFramet és ezt írja ki:
Access restriction: The type JFrame is not accessible due to restriction on required library C:\java\jre8\lib\rt.jarPróbáld úgy, hogy nem a JRE-ben lévő libet használod, hanem a JDK-ban lévőt.
-
xTc
aktív tag
-
floatr
veterán
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é. -
floatr
veterán
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.
-
WonderCSabo
félisten
-
Karma
félisten
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

-
WonderCSabo
félisten
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.
-
WonderCSabo
félisten
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.
-
Karma
félisten
És ez így is van.
class Termek{
private String nev;
private double ar;
private double menny;
public Zoldseg(String nev, double ar) {
this.nev = nev;
this.ar = ar;
menny = 0.0;
}
public String getNev() {
return nev;
}
public double getAr() {
return ar;
}
public double getMenny() {
return menny;
}
public void setMenny(double menny) {
menny += menny;
}
}
public class Raktar {
Vector<String> aru = new Vector<String>();
public void felvitel() {
String nev = Console.readLine("Kérem adja meg az áru nevét: ");
Termek aru = new Temek(nev, 0.0);
if (zoldsegek.contains(aru)) {
System.out.println("Az áru már létezik!");
return;
}
double ar = Console.readDouble("Adja meg az áruárát: ");
double menny = Console.readDouble("Adja meg az áru mennyiségét (kg): ");
aru.add(new Termek(nev, ar));
}A Termek osztály még nincs kész és valszeg nem is jó.
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

-
Jim-Y
veterán
És ez így is van.
class Termek{
private String nev;
private double ar;
private double menny;
public Zoldseg(String nev, double ar) {
this.nev = nev;
this.ar = ar;
menny = 0.0;
}
public String getNev() {
return nev;
}
public double getAr() {
return ar;
}
public double getMenny() {
return menny;
}
public void setMenny(double menny) {
menny += menny;
}
}
public class Raktar {
Vector<String> aru = new Vector<String>();
public void felvitel() {
String nev = Console.readLine("Kérem adja meg az áru nevét: ");
Termek aru = new Temek(nev, 0.0);
if (zoldsegek.contains(aru)) {
System.out.println("Az áru már létezik!");
return;
}
double ar = Console.readDouble("Adja meg az áruárát: ");
double menny = Console.readDouble("Adja meg az áru mennyiségét (kg): ");
aru.add(new Termek(nev, ar));
}A Termek osztály még nincs kész és valszeg nem is jó.
É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
-
WonderCSabo
félisten
És ez így is van.
class Termek{
private String nev;
private double ar;
private double menny;
public Zoldseg(String nev, double ar) {
this.nev = nev;
this.ar = ar;
menny = 0.0;
}
public String getNev() {
return nev;
}
public double getAr() {
return ar;
}
public double getMenny() {
return menny;
}
public void setMenny(double menny) {
menny += menny;
}
}
public class Raktar {
Vector<String> aru = new Vector<String>();
public void felvitel() {
String nev = Console.readLine("Kérem adja meg az áru nevét: ");
Termek aru = new Temek(nev, 0.0);
if (zoldsegek.contains(aru)) {
System.out.println("Az áru már létezik!");
return;
}
double ar = Console.readDouble("Adja meg az áruárát: ");
double menny = Console.readDouble("Adja meg az áru mennyiségét (kg): ");
aru.add(new Termek(nev, ar));
}A Termek osztály még nincs kész és valszeg nem is jó.
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?

-
modder
aktív tag
És ez így is van.
class Termek{
private String nev;
private double ar;
private double menny;
public Zoldseg(String nev, double ar) {
this.nev = nev;
this.ar = ar;
menny = 0.0;
}
public String getNev() {
return nev;
}
public double getAr() {
return ar;
}
public double getMenny() {
return menny;
}
public void setMenny(double menny) {
menny += menny;
}
}
public class Raktar {
Vector<String> aru = new Vector<String>();
public void felvitel() {
String nev = Console.readLine("Kérem adja meg az áru nevét: ");
Termek aru = new Temek(nev, 0.0);
if (zoldsegek.contains(aru)) {
System.out.println("Az áru már létezik!");
return;
}
double ar = Console.readDouble("Adja meg az áruárát: ");
double menny = Console.readDouble("Adja meg az áru mennyiségét (kg): ");
aru.add(new Termek(nev, ar));
}A Termek osztály még nincs kész és valszeg nem is jó.
Te minket itt át akarsz verni ezzel a kóddal!
-
WonderCSabo
félisten
Nos, röviden azt szeretném, hogy letároljam egy termék (pl valamilyen gyümölcs) nevét, és az adott termék két tulajdonságát (ár és, hogy mennyi van belőle).
Erre írtam egy termek nevű osztályt, ahol az adott árura vonatkozó metódusok vannak. (nevének a lekérdezése, árának a lekérdezése stb.)
És írtam egy másik, Raktar osztályt, ahol deklaráltam a vektoromat és hozzá szeretném adni a vektorhoz a három adatot. (áru neve, ára, és a mennyisége)Igen, és előbb jött erre az a válasz, hogy a termék nevét is vedd bele a termek osztályba (Java osztály nagybetűvel kezdődjön BTW). Így a Vector-od típusparamétere pedig lehet termek.
-
WonderCSabo
félisten
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...
-
Jim-Y
veterán
Szerintem csinalj egy POJO-t aminek 3 propertyje lesz, egy nev es a ket szam, majd a Vektorod ilyen tipusu objektumokat taroljon.
-
WonderCSabo
félisten
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.
-
floatr
veterán
Pedig jobban teszed, ha hozzászoktatod magad még a gyakorló feladatoknál is, mert így gyorsabban is fut majd a kód. A Vector<E> lényegesen lassabb, mint az ArrayList<E>. Ugyanígy a Hashtable<E> is thread-safe, de lassabb, mint a HashMap<E>.
-
fatal`
titán
-
WonderCSabo
félisten
-
bajaki
őstag
Meglesem, köszi!

Hopp, lehetett volna még szerkeszteni, bocsánat.

-
modder
aktív tag
-
n00n
őstag
-
xTc
aktív tag
-
trisztan94
őstag
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)
-
modder
aktív tag
nincs olyan operátor, hogy =>
(http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)
mondjuk a hibaüzenet lehetne jobb is -
Superhun
addikt
-
Karma
félisten
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

-
Karma
félisten
Szabályosan castolni nem csak egy szintet lehet, viszont közös öröklési ágon kell lenniük. A Double osztály és a boolean primitív tíousnak semmi köze nincs egymáshoz, meg értelme sincs sok...
Új hozzászólás Aktív témák
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokPROHARDVER! - 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ésFÁ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?:))
- GYÖNYÖRŰ iPhone 13 Pro Max 128GB Graphite -2 ÉV GARANCIA -Kártyafüggetlen, MS5551
- iPhone 13 128GB 100% Green (1év Garancia) - ÚJ EREDETI AKKUMULÁTOR - AKCIÓ
- 15,6" Dell Latitude laptopok: E5550, E5570, 5590, 5500, 5501, 5510, 5520 / SZÁMLA + GARANCIA
- BESZÁMÍTÁS! Asus Z370A i7 9700 16GB DDR4 512GB SSD RTX 3060 12GB Rampage SHIVA Adata 600W
- 27% - Samsung 980 PRO NVMe 2TB M.2 PCIe 4.0 SSD
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest






!

