Új hozzászólás Aktív témák
-
sztanozs
veterán
válasz
smallmer #10687 üzenetére
Ultimate Edition: professional and fully-featured commercial IDE provided by JetBrains. The Ultimate Edition is built on top of the Community Edition with many extra features for web and enterprise development. You can download IntelliJ IDEA Ultimate from http://www.jetbrains.com/idea. You can evaluate it for free for 30 days, purchase a license, or get a free license if you're a contributor to an established open-source project.
-
Szmeby
tag
-
sztanozs
veterán
válasz
smallmer #10144 üzenetére
Úgy, hogy az
fis.read(buffer)
visszaadja, hogy ténylegesen mennyit tudott olvasni (nem csak -1 et, ha nincs már adat).
Így, ehelyett:while (fis.read(buffer) > 0) {
dos.write(buffer);
System.out.println("ír");
}Ez kell:
int count;
while ((count = fis.read(buffer)) > 0)
{
dos.write(buffer, 0, count); //*buffer*-ből a *0* elemtől elküld *count* számú elemet
System.out.println("ír");
}Ezzel az utolsó (maradvány részt) is helyes mérettel küldi át.
-
Drizzt
nagyúr
válasz
smallmer #10103 üzenetére
Még szebb éenne amúgy, ha try with resources-t haszbálnál. Ezt olyan osztályokra lehet alkalmazni, amik implementálják az AutoCloseable interface-t. Ilyenkor a try blokk végé a try után közvetlenül zárójelbe írt példányok close-a implicit meg lesz hívva.
Tehát valahogy így nézni ki:
try(PrintWriter kuldes = new PrintWriter(beerkezoKliens.getOutputStream(), true);) {
for (int i = 0; i < szamCimek.size(); i++) {
kuldes.println(szamCimek.get(i));
}
} catch (IOException ex) {
System.out.println("Nem kuldott semmit");
}Persze lehetne még csomó mindent csinálni. Kinn is try-with-resourcest használni, többszálúság, etc.
-
Zahze
csendes tag
válasz
smallmer #10096 üzenetére
A programod max akkor nem megy tovább ha a szerver nem állítja le a küldést.
Ha a szervered tényleg csak annyit küld mint amennyit belinkeltél (for ciklus), akkor a ciklus kilépése után null-t kéne kliens oldalról olvasnod és ki kéne lépni.
Nincs még valami a háttérbe ?
Mit ír ki a kliens a kimenetre amikor vége a szerver oldalon a for ciklusnak ? ( null-t ? üres karaktersort ? ) -
Atapi
senior tag
válasz
smallmer #10096 üzenetére
én nem látom indokoltnak do-while használatát (akkor használod, ha valamit legalább egyszer szeretnél megcsinálni, de bizonyos feltétel esetén folytatod is. de te miért akarnál egyáltalán belépni a ciklusba, ha a beolvasásod null?).
emellett a jelenlegi struktúrában a ciklus elején beolvasol, ami ha null érték, azt még megpróbálod feldolgozni, amit szerintem nem szeretnél (ez okozhatja is az újabb gondodat), de ebben tévedhetek. -
M_AND_Ms
veterán
válasz
smallmer #9726 üzenetére
Ott kezdeném, ahol a Google kereső is ajánlja : Client Libraries for Google Maps Web Services, illetve ahol a hasonló kérdéseken rágódók felteszik a kérdéseiket stackoverflow.com: How use Java with google maps api?
-
Aethelstone
addikt
-
Lortech
addikt
válasz
smallmer #9299 üzenetére
Az alapokat azért nem ártana elsajátítani mielőtt nekiállsz egy hello worldnél komolyabb feladatnak. Az értékadás pl. elég alap.
A kliensek.get(i) egy függvényhívás. Függvényhívás mint bal oldali kifejezés azt jelentené, hogy a hívás visszatérési értékének akarsz értéket adni. Ennek nincs értelme nyilván javában. Értéket adni változónak lehet. Egy lista adott elemét a set metódussal tudod lecserélni.
szerk: mindegy, már itt marad. -
Sirpi
senior tag
válasz
smallmer #9294 üzenetére
A kiíró for ciklust is lehetne szebben írni, pl. nézhetne ki így az inicializálás utáni rész:
for (Domino domino : myList) {
pw.println(domino.getX());
pw.println(domino.getY());
System.out.println("elküldve");
}
Iterator<Domino> it = myList.iterator();
while (it.hasNext()) {
it.remove();
}Vagy az iterátoros rész helyett ennyi is elég lenne, ha csak a funkcionalitásra megyünk:
myList.clear();
-
Lortech
addikt
válasz
smallmer #9292 üzenetére
A lista nem tömb, ha a listából törölsz egy elemet, akkor csökken a lista hossza.
Tehát az utolsó for ciklusodban, ha jól látom i=4-nél már csak 3 elemed lesz a listában, és nem tudsz megcímezni a get(4) hívással 4-es indexű elemet. Ha minden elemet törölni akarsz, akkor MyList.clear(); Ha egyesével akarod, akkor mindig az elsőt a MyList.remove(0) hívással, vagy inkább iterator.remove. -
skoda12
aktív tag
válasz
smallmer #8796 üzenetére
Valószínűleg a kliens befejezi a futást, mire a szerver olvasná, hogy mit küldött. Tehát a szerveroldalon valami ilyesmi történhet az első futáskor
Socket s = server.accept();
// kliens csatlakozott, küldött valamit, leállt, ezért a socket lezárult
// ...
Scanner sc = new Scanner(s.getInputStream());
name = sc.nextLine();
// lezárt socketről olvasnál valamitMásodik futás azért lehet sikeres, mert a jvm addigra már "bemelegedett" (osztályok betöltődtek, cuccok a code cacheben, stb), így gyorsabb és azelőtt ér el az olvasásig, hogy a kliens lezárná a socketet.
De ezt csak így ránézésre mondom. Ki kellene íratnod a stacktracet (e.printStackTrace()) és akkor látni lehetne, hogy mi a pontos problémája. -
Taoharcos
aktív tag
válasz
smallmer #8670 üzenetére
Bevallom én is gyenge vagyok angolból, de TÉNY csak angolul szabad! Akkor ki kell szótárazni/google.translate-zni. Szokni kell, és közben ráadásul az ember nem csak a programozást tanulja, hanem az angolt is. Ráadásul a használható tutorialok, jó oldalak angolul vannak.
A Clean Code elvek miatt is szükség van a jól kifejező angol nevek ismeretére. -
proci985
MODERÁTOR
válasz
smallmer #8673 üzenetére
nem párhuzamosan futnak a szálaim, mert a run metódusom törzse szinkronizált blokkban van
igen, ez az amit mondtam korabban.akkor szerintem most nyisd ki az eloadast / konyvet es nezd vegig a potencialis szinkronizacios mechanizmusokat.
Javaban van egy csomo beepitett megoldas a problemara, pl explicit mutual exclusion, lock, monitor. ha az egyenleg static es eleg ha egyszerre egy thread tartja a resourcet akkor van keyword szintu megoldas is.
de tenyleg nezd meg az elmeleti hatteret mert anelkul nem fogod megerteni.
Gyuri16: gondolom elso beadas a targybol es nem akarjak komplikalni OOval a helyzetet.
-
Gyuri16
senior tag
válasz
smallmer #8673 üzenetére
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
-
proci985
MODERÁTOR
-
Gyuri16
senior tag
válasz
smallmer #8670 üzenetére
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
válasz
smallmer #8667 üzenetére
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
válasz
smallmer #8665 üzenetére
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
válasz
smallmer #8663 üzenetére
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
válasz
smallmer #8661 üzenetére
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) -
PumpkinSeed
addikt
válasz
smallmer #7014 üzenetére
Gondolom valami ilyesmire gondolsz. Az első osztályban megadod a pontokat, majd a második osztályban van egy Pont adattípusú tömböd amiben tárolod a pontokat. A Pontok-ban van egy konstruktor ami megadja a tömböt, meg egy hozzáad metódus.
A Pont adattípus annyit takar, hogy példányosított pontokat lehet neki adni. pl.:
Pont p1 = new Pont(1,2);
Pontok pontok = new Pontok();
pontok.pontHozzaAd(p1); -
-
axioma
veterán
válasz
smallmer #7008 üzenetére
En ebbol azt bogoztam ki, hogy
- lesznek valahol keletkezo Hely tipusu objektumaid
- lesz egy koord.-rendszernek megfelelo 2D tombod
es ebbol szeretnel olyat, hogy:
- minden pontra az i,j-vel letrehozott pont keruljon a tomb[i][j]-be
Ekkor erzesem szerint neked a ket getter hianyzik: getX() es getY() a Hely objektumnak.Vagyis a tokures tombbe az egyikHely nevut igy illeszted be: (szerk. termeszetesen elotte ellenorizve, hogy belefer-e)
tomb[egyikHely.getX()][egyikHely.getY()]=egyikHelyHa ez se az, amit gondoltal, akkor passzolok...
-
bucsupeti
senior tag
válasz
smallmer #7008 üzenetére
mi lenne a célod? Az hogy egy tömbben el tudj tárolni számpárokat, vagy egy adott számpár által jelzett koordinátapont meg legyen jelölve? Esetleg a megadott Hely objektumot kell tárolni egy tömbben?
Kérlek pontosan fogalmazd meg, egyelőre nem tisztán értem a kérdésedet. -
floatr
veterán
válasz
smallmer #4729 üzenetére
Ha egyébként tényleg érdekel az ékezethelyes rendezés, akkor nézz be ide
-
modder
aktív tag
válasz
smallmer #4701 üzenetére
a throws kulcsszót (E/3-ban) metódus szignatúrába írjuk az argumentumlista után.
void doSuchThing(int arg0) throws BusinessException {
...
}Javában az Exception osztályból származtatott kivételek checked exceptionök. Ez azt jelenti, hogy ha egy metódus ilyen exceptiont dob, akkor meg kell jeleníteni a metódus szignatúrában a fenti módon, különben fordítási hiba lép fel. Ez elvileg arra jó, hogy a programozó felkészülhet arra, hogy milyen kivételeket generálhat egy metódus, illetve köteles is azt lekezelni, mert ha nem kapod el, vagy dobod tovább, akkor szintén fordítási hiba.
Hasznossága vitatott, általában nem használják jól
[ Módosította: Qru ]
-
M_AND_Ms
veterán
válasz
smallmer #4701 üzenetére
Vagy egy már létező (a catch ágban elkapott) Exception-t dobsz tovább, vagy egy teljesen újat hozol létre és azt dobod vele.
Pl.:....
catch (Exception e) {
//Valamit csinál hiba esetén
DbHandler.transaction(DbHandler.TRANSACTION_OPERATION.ROLLBACK);
//és továbbdobja
throw e;
}if (result == null) {
//Létrehoz egy új hibát és azt dobja
throw new Exception("Nem található a rekord.");
} -
Peter Kiss
őstag
-
sztanozs
veterán
válasz
smallmer #4632 üzenetére
Végül is megoldható így is... Csak létre kell hoznod a csapatokat, végigzongorázni rajtuk és kiszámítani a csapatra a védekező és támadóértékeket, majd a csapatokat össze kell hasonlítani. Erre esetleg létre lehet hozni meccs osztályt is és így tovább.
Bajnokság -> Meccsek (List<Meccs>)
Meccs -> Csapatok (Csapat1, Csapat2)
Csapat -> Játékosok (List<Jatekos>) -
sztanozs
veterán
válasz
smallmer #4628 üzenetére
Írd le először ide, hogyan folyik le egy meccs egy erősen leegyszerűsített modellben (3 lépésben).
Majd azon belül írd le, hogy melyik részben történik a gólszerzés, és annak mi a menete (mondjuk ezt is 3 lépésben). Ha ez megvan, abból már tudok tovább magyarázni. Csak próbálj meg te elgondolkodni egy kicsit rajta -
sztanozs
veterán
válasz
smallmer #4625 üzenetére
Szóval próbáld meg szavakkal (vagy folymatábrával) leírni a játék menetét (ciklikusság, idő telése, támadás menete) gyűjtsd ki az ehhez szükséges folymatokat, mérőszámokat és ezek alapján már fel tudod építeni az osztályodat. Olyan tulajdnságokkal, amit meg nem használsz fel a játék során (név, testtömeg, magasság, stb) nem kell törödni.
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Asus ROG Phone 9 Pro 16GB/512GB - 3 ÉV GARANCIA - MAKULÁTLAN!
- Thrustmaster TS -Pc bázis
- Eladó egy Asus g751j Dobozzal gyári tőltővel
- HP 13"FullHD IPS,i5 8265u(8x3,9Ghz)Villágító billentyűzet,8GB Ram,256-512SSD,jó akku,Szép állapot
- Újszerű Asus,játékra is,17,3"FullHD,i7 8550(8X4Ghz)GT920mx 2/4GB DDR5 VGA16GB RAM,SSD+HDD,
- Fujitsu USB Port Replicator PR09 docking station (1x5K vagy 2x4K felbontás) (DisplayLink)
- Akció! Újra Gamer EGEREK! Glorious , Endgamer XM1R , Nibio
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RX 9070 16GB GAMER PC termékbeszámítással
- Bomba ár! Lenovo X1 Yoga 2nd - i7-7G I 8GB I 256SSD I 14" WQHD Sérült I W11 I CAM I Garancia!
- iKing.Hu - Apple iPhone 14 Plus - Yellow - Használt, karcmentes
Állásajánlatok
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest