- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
- Projektor topic
- Napokon belül váratlan versenyzővel bővül a VGA-piac
- Kezdő fotósok digitális fényképei
- Új Intel CPU-kkal jön a Surface Pro 12 és a Surface Laptop 8 for Business
- Nem kell még temetni: 2 éves órajelcsúcsot döntöttek meg Raptor Lake-kel
- HiFi műszaki szemmel - sztereó hangrendszerek
- Házimozi belépő szinten
- Apple MacBook
- Milyen egeret válasszak?
- AMD K6-III, és minden ami RETRO - Oldschool tuning
-
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 Tabletek, E-bookok Nyomtatók, szkennerek 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
-
lanszelot
addikt
Nezd, en elvet adtam at, nem megoldast. Igy lehet az elozo kerdesedben szereplo ertekadast [letrehozassal egyutt] megoldani. Egy tipust csak at tudsz irni... mobilrol ket masik tennivalo kozott ezt tudtam beszurni.
Visszanezve az elozmenyeket, az imageviewx-ek letrehozasat lehet ugy meguszni, h ahol most az imageview1 = stb sorok vannak, oda azt irod hImageView[] viewNr= new ImageView[5];
viewNr[0]=findViewById(R.id.Egyes);
<stb>
es utana csak a tombbol hasznalod oket csak.Először is köszönöm szépen a segítséget.
Igen at tudom írni a tipust

Csak mint írtam még kezdő vagyok és összezavarna.
Így ránézésre azonnal tudom, hogy az image, vagy text.
Nekem még kellenek ezek.
Azért is rakom tele megjegyzéssel.
Számomra sokkal jobban átlátható.
Pl ha nincs időm 2 napig rá, akkor ezek segítenek mi merre.
-
lanszelot
addikt
Először is köszönöm szépen a segítséget.
Így én bis tudom, csak az úgy nem jó.
Ahol létrehozzon ott még nincs imageView1-5
Tehát ott nem tehetem bele.
Csak ott tehetem bele ahol már léteznek.
Azt írtad ott kint hozzam létre, azért tettem oda ki.
Viszont én nem tudom, és nem találtam, hogy lehet egybe hozzá adni az elemeket. Ezért kérdeztem.A tipus az ImageView, nem View.
Így tanultam, és mindenhol így is van.
TextViewnek is TextView és nem View.
És minden tipusnak önmagát adják meg.
Kezdő vagyok, így lehet, hogy lehet másképp, de össze zavar és inkább úgy csinálom ahogy tanultam.
-
lanszelot
addikt
Hello,
Azóta azt próbálom megtalálni, hogyan kell eztviewNr[0] = imageView1;
viewNr[1] = imageView2;
viewNr[2] = imageView3;
viewNr[3] = imageView4;
viewNr[4] = imageView5;
Egy sorban hozzá adni. -
lanszelot
addikt
Jaaa, akkor felreertettelek. OK, nevezzuk imageNumber-nek, az imageId az alfanumerikusra utal inkabb.
Szoval az altalad "one" id-val ellatott resource-hoz az R resource class hozzarendelt egy imageNumber-t, ami int, es ezt tarolja az R.drawable.one alatt. Igy mar talan ertheto.A teljes switch elhagyhato. Az ertelme annyi, mintha a teljes
switch(r) {...}helyett azt irnad, hogyviewNr[v].setImageRescource(imgId[r])
(mondjuk nincs default agad, igy annyi kulonbseg azert van, hogy ha a v nem [0..5], akkor a switch lefut csak semmit nem allit be, az egysoros meg hibat ad)Van tobb aprosag amit lehetne me'g javitani. Pl. a viewNr letrehozas miert kerult be a listenerbe, es miert ket lepesben kap erteket?
ImageView imageView1 = findViewById(R.id.Egyes);viewNr[0] = imageView1;
ehelyettviewNr[0] = findViewById(R.id.Egyes);A randszam feleslegesen van inicializalva randomra, azt nem hasznalod, felulirja a for ciklusban - ez gondot nem okoz csak kod-olvashatosagot, mire gondolhatott a kolto alapon...
Switch - valóban
Azt el is kezdtem átnézni kell e még, de jött a postás, és huss elfelejtettem 
viewNr scope miatt. Az imageView nem érhető el kintről.
For ciklus nem lesz. Egyesével lesznek meghivva if -hez kötve, többször, többféleképpen.
Emiatt lehet kell majd a randSzam, így nem nyúltam hozzá. -
lanszelot
addikt
de nem int-et adtam meg.
one, two, three, four, five - ezek az id-k amiket megadtam.itt a progi.
Persze nem így lesz, csak most for -al csináltam, hogy azt is gyakoroljam.
De a for nem jó, for helyett method kell nekem majd.ImageView viewNr[] = new ImageView[5];
int imgId[] = new int[]{R.drawable.one, R.drawable.two, R.drawable.three, R.drawable.four, R.drawable.five, R.drawable.six};
public void kockaAkcio(int v, int r){
switch(r) {
case 0:
viewNr[v].setImageResource(imgId[0]);
break;
case 1:
viewNr[v].setImageResource(imgId[1]);
break;
case 2:
viewNr[v].setImageResource(imgId[2]);
break;
case 3:
viewNr[v].setImageResource(imgId[3]);
break;
case 4:
viewNr[v].setImageResource(imgId[4]);
break;
case 5:
viewNr[v].setImageResource(imgId[5]);
break;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
Random random = new Random();
ImageView imageView1 = findViewById(R.id.Egyes);
ImageView imageView2 = findViewById(R.id.Kettes);
ImageView imageView3 = findViewById(R.id.Harmas);
ImageView imageView4 = findViewById(R.id.Negyes);
ImageView imageView5 = findViewById(R.id.Otos);
Button button01 = findViewById(R.id.Dobas);
button01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int[] kockak = new int[5];
int randSzam = random.nextInt(5);
//itt hozom letre a kepek helyenek a valtozot es tombbe rakom tombben
viewNr[0] = imageView1;
viewNr[1] = imageView2;
viewNr[2] = imageView3;
viewNr[3] = imageView4;
viewNr[4] = imageView5;
for (int i =0; i<5; i++){
randSzam = random.nextInt(5);
//itt rakom be a dobast
kockak[i] = randSzam;
//itt hivom a methodot
kockaAkcio(i, randSzam);
}
}
});
} -
lanszelot
addikt
Milyen ertelemben nem egesz szam? az egy egesz, pontosabban az adott nyelv int-je (az egeszek egy reszhalmaza) - a rendszer hozzarendelt ahhoz a megadott (kephez, ha jol ertem) egy azonositot, amit ezentul az R.drawable.one uton ersz el. Ha egy masik eleme't erned el a resource osztalynak, akkor annak (jo esellyel) mas tipusa lenne.
Amugy ha most kezd mar osszeallni, akkor tekintsd meg a switch-edet. A dobas 0-5 kimenetelehez rendelsz egy masik szamot, amit elore tudsz. Tehat az egesz kicserelheto arra, hogy csak indexeled oket egy elemeivel definialt tombben:int[] imageIds = new int[] {R.drawable.one, R.drawable.two... };
randszam = ...;
viewNr.setImageResource(imageIds[randszam]);
Igy meg kulon fuggveny se fog kelleni.Hello,
Nem a rendszer rendelt hozza azonosítót. Én adtam neki.
Úgy mint a html-ben az id. Majd JS alól hivatkozok rá.
Itt pedig java alatt hivatkozom rá. -
lanszelot
addikt
hogy int: hat az int x =5; utan az x is int... de amugy 1. ott az ide, menj az utolso tag [one] fole, nem jon fel buborekban, h mi az? 2. log-old ki az erteket
az R.drawable.one _nem_ string, egy azonosito [ok, egyszerusitve], nem egyezik az "R.drawable.one" stringgel. Igen, backend-es voltam vilag eletemben de hallottam hiret hogy frontend egyes technologiaiban ez csiki-csuki... itt nem [ill. kerulendo, mint korabban angolul is, meg tolem is elhangzott].
csinalj csak ennyit:int imageId = R.drawable.one;imageView1.setImageResource(imageId);
Ha ez elfut, akkor menjunk tovabb. Ha nem, hibauzenetet mutasd.
[az termeszetesen _nem_ varhato, hogy az imageId -nak barmi koze lesz a 'one'-hoz, lehet h csak nemletezo id-val probaltad, az id nem feltetlen folytonos, sot, az inkabb index nevet kapna]Nagyon szépen köszönöm a segítséget.
Így sikerült:
ImageView viewNr = imageView1;
int imgId = R.drawable.one;
viewNr.setImageResource(imgId);Így már be tudom rakni for ciklusba, tömbbe, method-ba.
Viszont ezzel teljesen felborul az adat tipusok.
Mivel ebben az esetben int nem egész szám.
Ha viszont azt nézem hogyan használja, akkor minden boolean, mert a cpu 0 és 1 -eseket értelmez.
Tehát nem értem hogy int a String, ami nincs idézőjelben. -
hoopy
csendes tag
hogy int: hat az int x =5; utan az x is int... de amugy 1. ott az ide, menj az utolso tag [one] fole, nem jon fel buborekban, h mi az? 2. log-old ki az erteket
az R.drawable.one _nem_ string, egy azonosito [ok, egyszerusitve], nem egyezik az "R.drawable.one" stringgel. Igen, backend-es voltam vilag eletemben de hallottam hiret hogy frontend egyes technologiaiban ez csiki-csuki... itt nem [ill. kerulendo, mint korabban angolul is, meg tolem is elhangzott].
csinalj csak ennyit:int imageId = R.drawable.one;imageView1.setImageResource(imageId);
Ha ez elfut, akkor menjunk tovabb. Ha nem, hibauzenetet mutasd.
[az termeszetesen _nem_ varhato, hogy az imageId -nak barmi koze lesz a 'one'-hoz, lehet h csak nemletezo id-val probaltad, az id nem feltetlen folytonos, sot, az inkabb index nevet kapna]El fog futni, mert az R.drawable.* az android által generál resource azonosítója lesz.
pl src/drawable/one.png => R.drawable.one
R az android által generált resource osztály, amiben lehet csomó bepakolt resource azonosítója és azon keresztül lehet ezekre hivatkozni. Ezért is lesz int az értéke amit ki lehet debugolni, de amúgy lényegtelen, hogy mi is az.
@lanszelot: Egyszerűbb lenne ha felraknád a kódod valahova, pl github-ra és viszonylag gyorsan meglenne a megfejtés. A hiba pedig amit ír csak szemantikai hiba, nem runtime vagy fordítási. Szerintem rossz helyre másoltad be a kódot vagy ilyesmi.
-
lanszelot
addikt
Először is köszönöm szépen a választ mindenkinek.
Azt láttam hogy int -et kér.
De ez "R.drawable.one" hogy int?
Int az egész szám.
Az meg String. Az a kép ID megadása. Az id "one" az is string.Most nagyon meg vagyok kavarodva.
Nem tudom hogy adhatok int -et.hoopy: este ha haza érek megpróbálom.
-
lanszelot
addikt
ne a switch-ben set-eld csak
a szamBetuvel mintajara egy objektumnak adj erteketja egybol return jobb
fg-ben az int randszam-tol csakcase 0: return R.drawable.one;
stilus, majd foprog-ban:imageView1.setImageResource(myFunc());...imageView5.set...A map hasznalata me'g korai, ezt bogozd ki es ertsd meg elobb, aztan ki lehet a switch-et o[timalizalni ahogy emlitettem..
[megj. lehet olyat is h forditva, a fg parametere h imageViewN, es annak allitod a switch-ben, de ott me'g kene elobb egy ertek v ref. szerinti atadas gyostalpalo, maradj az egyszerubben programozhatonal]
Biztonság kedvéért kipróbáltam, de egyik se működik.
Vagy én csinálok valami hülyeséget, vagy nagyon rosszul mondom el.imageView1.setImageResource(R.drawable.one);
Ez a sor szent és sérthetetlen.
Semmit se lehet benne változtatni.
Nem használhatok változót, se kikérést, se függvényt, semmit.imageView1.setImageResource(myFunc())
Tehát ez nem működik. /myFunc()/
Az "R.drawable.ID" -nek kell ott lenni. Semmi mást nem fogad el.
Igen, létre hoztam a method-ot returnnal ami azt a sort adja vissza. Próbáltam rengetegféle képpen, de nem.Vagy nem így kell beírni. Lehet össze kell fűzni.
Php-ban ponttal fűzöm össze, JavaScript -ben +. -erre gondolok.
Tudom, hogy html-t js-el, de nem fogad el semmit.
Valahogy másképp kell. -
lanszelot
addikt
Először is köszönöm szépen a segítséget.
Folyamatosan agyalok azon amit írtál.
Van pár dolog amit nem értek.
Nagyon kezdő vagyok valószínűleg azért.fg - ez nem tudom mi. Függvényre gondolnék, de én nem tudok java-ban függvényéről. Method és class -ról tudok csak.
Map az miért lenne jó?
Map az érték párok bevitele, módosítása stb -re jó.
Nekem fix értékek vannak amik sohase változnak, és sohase kell hozzáadni. Minden fix.
Akkor miért lenne jó a map? -
axioma
veterán
ne a switch-ben set-eld csak
a szamBetuvel mintajara egy objektumnak adj erteketja egybol return jobb
fg-ben az int randszam-tol csakcase 0: return R.drawable.one;
stilus, majd foprog-ban:imageView1.setImageResource(myFunc());...imageView5.set...A map hasznalata me'g korai, ezt bogozd ki es ertsd meg elobb, aztan ki lehet a switch-et o[timalizalni ahogy emlitettem..
[megj. lehet olyat is h forditva, a fg parametere h imageViewN, es annak allitod a switch-ben, de ott me'g kene elobb egy ertek v ref. szerinti atadas gyostalpalo, maradj az egyszerubben programozhatonal]
Ja latom tarolnad is a dobast, akkor a fg csak szambol visszaad objektumot legyen, kint generald
most me'g szemetes lesz de idovel [ha nem eleg h vhogy mukodjon] kigyomlaljuk, de kis lepesekben jobb lesz haladni -
lanszelot
addikt
azt emeled ki fg-be ami ugyanaz lenne
irdd meg 2-re a 'hosszut'
ami egyforma [szam kitalalas, szambol object switch] az s fg, visszaadja az objektumot, te meg 5x hivod 5 valtozoba setImageResource-olva az eredmenyt [a parameter maga egy fg-hivas]
ha elakadsz, szurd be hogy allsz ne csak meta-beszelgessunk rolaNagyon szépen köszönöm a segítseget.
Sajnos nincs semmi ami ismétlődne.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
Random random = new Random();
ImageView imageView1 = findViewById(R.id.Egyes);
ImageView imageView2 = findViewById(R.id.Kettes);
ImageView imageView3 = findViewById(R.id.Harmas);
ImageView imageView4 = findViewById(R.id.Negyes);
ImageView imageView5 = findViewById(R.id.Otos);
Button button01 = findViewById(R.id.Dobas);
button01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int[] kockak = new int[5];
//elso kocka
int randSzam = random.nextInt(5);
kockak[0] = randSzam;
switch(randSzam) {
case 0:
imageView1.setImageResource(R.drawable.one);
break;
case 1:
imageView1.setImageResource(R.drawable.two);
break;
case 2:
imageView1.setImageResource(R.drawable.three);
break;
case 3:
imageView1.setImageResource(R.drawable.four);
break;
case 4:
imageView1.setImageResource(R.drawable.five);
break;
case 5:
imageView1.setImageResource(R.drawable.six);
break;
}
//masodik kocka
randSzam = random.nextInt(5);
kockak[1] = randSzam;
switch(randSzam) {
case 0:
imageView2.setImageResource(R.drawable.one);
break;
case 1:
imageView2.setImageResource(R.drawable.two);
break;
case 2:
imageView2.setImageResource(R.drawable.three);
break;
case 3:
imageView2.setImageResource(R.drawable.four);
break;
case 4:
imageView2.setImageResource(R.drawable.five);
break;
case 5:
imageView2.setImageResource(R.drawable.six);
break;
}
//harmadik kocka
randSzam = random.nextInt(5);
kockak[2] = randSzam;
switch(randSzam) {
case 0:
imageView3.setImageResource(R.drawable.one);
break;
case 1:
imageView3.setImageResource(R.drawable.two);
break;
case 2:
imageView3.setImageResource(R.drawable.three);
break;
case 3:
imageView3.setImageResource(R.drawable.four);
break;
case 4:
imageView3.setImageResource(R.drawable.five);
break;
case 5:
imageView3.setImageResource(R.drawable.six);
break;
}
//negyedik kocka
randSzam = random.nextInt(5);
kockak[3] = randSzam;
switch(randSzam) {
case 0:
imageView4.setImageResource(R.drawable.one);
break;
case 1:
imageView4.setImageResource(R.drawable.two);
break;
case 2:
imageView4.setImageResource(R.drawable.three);
break;
case 3:
imageView4.setImageResource(R.drawable.four);
break;
case 4:
imageView4.setImageResource(R.drawable.five);
break;
case 5:
imageView4.setImageResource(R.drawable.six);
break;
}
//otodik kocka
randSzam = random.nextInt(5);
kockak[4] = randSzam;
switch(randSzam) {
case 0:
imageView5.setImageResource(R.drawable.one);
break;
case 1:
imageView5.setImageResource(R.drawable.two);
break;
case 2:
imageView5.setImageResource(R.drawable.three);
break;
case 3:
imageView5.setImageResource(R.drawable.four);
break;
case 4:
imageView5.setImageResource(R.drawable.five);
break;
case 5:
imageView5.setImageResource(R.drawable.six);
break;
}
}
});
}
}Másik fórumon ezt írták, de egy szót sem értek belőle /nem az angol miatt/
"Do you want to have a dynamic drawable resource ID? If yes, there is a way to get the ID by the resource name. However, I strongly suggest you think carefully before taking this path. Having a map where you associate static resource IDs with another value might be better." -
lanszelot
addikt
Pont ez a bajom, hogy nem tudom se függvényében, se for ciklusba tenni.
Mert nem pontosan ugyanazt kell végrehajtani.
Az "imageView" - t és az ID -t is módosítani kell.
De nem tudom, mert se paramétert, se változót nem tudok beletenni.Többel is ugyanaz, kikérést se tudok bele tenni.
Nem tudom hogyan kell. -
lanszelot
addikt
Ez jó lenne, de ebben az esetben iszonyat hosszú kódot kell írnom.
Generálok egy szamot,
Switch berakja imageView1 -esbe
Majd
Generálok egy számot
Switch berakja imageView2-esbe
Stb
Mindent 5ször ismétlek.Mint ahogy írtad, majd a végén azt szeretném, hogy for ciklus végig szalad rajta.
De még tanulom, így igaz, hogy ez megoldás, de nem tanulok.
Nem tudom hogy tudok oda változót berakni.
Azért van tömbből a változó, hogy majd tovább haladhassak a tanulással.Elnézést, hogy kuszán írok. Még kezdő vagyok.
-
lanszelot
addikt
Ennyi a kód.
Tanulok. Hogyan lehet változót használni ahelyett hogy én írom be.
Random generál egy számot 0-5 között.
Switch ezt a vectror image nevére át váltja.
Beilleszti az imageView-ba.
Telefonon megjelenik a kép.
Kész.
Semmit se csinál.Még csak most tanulom. Az én agyam nem úgy működik mint az atlagé. Nekem így kell tanulnom.
Tudom fura másoknak.
-
lanszelot
addikt
zold: sztem mert nem ertelmes angol szo
69. hiaba tudod h mindig erteket kap a szamBetuvel, az ott statikus kodelemzes alapjan lehet inicializalatlan
[vagy legyen default ag, vagy a deklaracional irj egy ="" -t, akkor mar csak letezo erteket irsz felul]mit csinalj: ha 5 kockadobas kene, akkor a for ciklusban kene beirni [nem latszik h az-e az a blokk] az eredmenyeket
Először is köszönöm szépen a választ.
71 es sor - "cannot resolve symbol 'kockak' " hibát dob
Gondolom azért mert idézőjelben rakja be:
"four" nem pedig four.
De ezt csak gondolom.For ciklus azért nem jó, mert "imageView" 1-5 ig van, tehát a végén a számot változtatnom kellene, de azt se tudom hogy kell.
Csak azzal már nem akartam bővíteni a kérdéseim számát.69 sor már nem dob hibát, hogy adtam alap értéket.
Azt sikerült javítani.
"" Értéket adtam a létrehozásnál..Switch-ben a default -ot nem szeretem használni, mert sok galibát tud okozni. Volt már vele szerencsém. Így sokkal egyszerűbb a hibát megtalálni, ha nincs default

-
BE4GLE
senior tag
Vagy csak olyanok kozott dolgozom akik a problemat oldjak meg a szoftver letrehozasaval es az implementacio helyesseget tesztelik megfelelo szintu tesztekkel utat helyesebbnek tartjak.
Tesztet irni TDD-hez DE ugy, hogy az tenyleg minden lehetseges implementacio eseten minden hibat elkap, akkora befektetes, hogy annyi ido alatt az _egyik_ implementaciot tesztelessel egyutt egy-harom masik problemara is megcsinalja [JOL]. Teljes tesztet elore megirni ugy, hogy egy lehetseges implementacio mar a fejeben van, az meg a menet kozben kiderulo donteseknel csinal lyukat [aztan vagy betomik vagy nem... talan ahol merge feltetelbe fut].
Egy esetben jo lehet: az "agy" irja a teszteket, a code monkey-k/juniorok/etc. meg az implementaciot. De akkor sem biztos hogy kicsit is hosszabb tavra nezve.
[Termeszetesen az elozoleg irt kiveteleket fenntartva, altalanosabb meretu/beagyazottsagu/bonyolultsagu fejlesztesi feladatokra.] Es persze SZVSZ.Nem értem mi igényel ebben olyan sok időt.
Az én tesztjeim nem szoktak olyan robosztus kódok lenni. Hiszen csak pár mock adat, fake hívás, és assert az egész. Viszont a teszt nélküli legacy kódok javítására borzalmasan sok idő megy el. A menet közben kiderülő döntések pedig mindenképpen megkavarják a dolgokat. Ez nem érv a TDD-vel szemben. -
floatr
veterán
Nalam a tdd ott bukik, hogy mikor me'g semmi nincs a szoftverbol csak tervek, akkor forditjak le a kovetelmenyeket tesztesetekre. Ami meg csak akkor mukodik jol, ha vagy eleve valami mechanikus, a kimenetekkel csak elgepelest ellenorzo a feladat [protokoll vagy kodolas stb. megvalositasa], vagy meglevo 10 eve futo cuccba +1 feature, ahol minden mas kobe van vesve, nincs fejlesztoi dontesi helyzet. Ezektol eltero esetben nagy esellyel lesz menet kozbeni varialas vagy olyan fontos kepesseg amit elfelejtettek tesztesetbe fogalmazni, mert annyira trivialis ha az egeszet nezne a fejleszto, nem csak a fixalando teszteseteket egymas utan.
(Az meg nem tdd, hogy ir teszteket, ir ettol fgtl a kovetelmenyekbol egy szoftvert, es mikor kilora kesz akkor engedi ra a teszteket, es kezd javitgatni. Legalabbis szvsz.)Túl cinikus vagyok a TDD-hez

Az utóbbi években csak olyan agilis projektekben dolgoztam, ahol az agilitás leginkább arra vonatkozott, hogy menetközben találja ki a megrendelő, hogy mit is akar (vagy nem). A projektek óriási keretrendszereket használnak, amiben az egyes funkciók deklaratív elemeken keresztül automatikusan készülnek el. Ritka volt az, amikor nem változott hétről hétre a követelmény, és nagyon kevés része volt a kódnak az, amiben unit tesztre érdemes dolgok történtek.
Ha ilyen projektekre valaki rávág egy coverage kritériumot, mert az jól mutat, a teljes csapat egy emberként áll fel, és megy át a konkurenciához.
De hello ${username} példakódban piszkosul jól mutat... -
nevemfel
senior tag
-
floatr
veterán
-
Oryctolagus
tag
Ha ugyis tanulas a cel, es nem elsosorban az IDE-t akarod megtanulni, akkor keress fel egy szimpatikus site-ot amelyik hasznal online ide-t (codechef, hackerearth, leetcode stb.) - ezekne'l meg kesz feladatokat is talalsz.
Viszont fontos kerdes, hogy mennyire munkadhoz kotodik a programkod alkotasa (fejleszto vagy csak mas nyelvben, vagy teljesen mas), mert a cegen policy-je siman kizarhatja az aka'r ilyen kezdo szintu kod barmilyen (pendrive, online ta'rolas) kivitelet a ceg rendszerein kivulre, tajekozodj. [Mi prog.club-ot csinalunk a ceg profiljatol teljesen fuggetlen stilusban, de ha akar ceg altal tamogatott oktatasban vagy, akkor sem lehet cegbelso kornyezetbol kodsorokat kifele vinni, pl. feladatot megoldani/beadni, mert az mar a ceg tulajdonaban levo kod leak-elesenek szamit.]Kimaradt info.
Nincs internet elérése ezeknek a gépekenek. -
mobal
nagyúr
En tobb dologban nem ertek egyet a sonarlint-tel, de ettol me'g orulok hogy van, mert neha egyszeru teveszteseknel felhivja a figyelmet a potencialis hibara.
A baj az amikor kotelezove teszik az osszes sonarlint hiba javitasat, es olyan szornyek keletkeznek, hogy az mar nem konnyiti hanem neheziti a megertest. Mert azt megertem hogy a sonarlint celja olyan szintre levinni a fejlesztes szinvonalat hogy egysegsugaru programozo is kovetni tudja, de ez minden csak nem hatekony, ha nem egysegsugaruakkal csinalod amugy a projektet.
Nyilvan SZVSZ."En tobb dologban nem ertek egyet a sonarlint-tel, de ettol me'g orulok hogy van, mert neha egyszeru teveszteseknel felhivja a figyelmet a potencialis hibara."
Akinek nem inge ne vegye magára, de én meg azt nem fogom soha megérteni, ha van egy tool aminek a célja a minőség javítása és igen népszerű akkor miért kell kiakadni ha valakinél esetleg jobban tudja a dolgokat? Én nem mondom azt, hogy nincs így de nem is értem ez.
"szornyek keletkeznek"
Én megint csak pont az ellentetjével találkoztam. Ha túl komplex egy metódus szól, hogy nagy. Szerintem ez pont jó. És az esetek 99%-ban igen, tudod még jobban fragmentálni a dolgokat.
Szerintem simán jó dolog, de tényleg, felőlem aki akarja használja aki nem nem. Én látok benne elég sok potenciált és tudást mögötte.
-
mobal
nagyúr
"4*(3+sin(12))" -> a szamologepen ezt is ugy irod be leginkabb, hogy 12 sin +3, *4
Ha nagyon muszaj zarojelezest is tudni, akkor is ilyesmi:
4,* -> vissza 4
( -> vissza 0
3, + -> vissza 3
12, sin -> vissza sin(12)
) -> vissza 3+sin(12)
= -> vissza 4*(3+sin(12))
Tehat minden nem szamjegynel vagy 1 vagy 2 parametert kuldesz, ha volt szam akkor azt es a muveletet, ha nem, akkor csak a muveletet (zarojelet, akarmit).
Probald ki a windows tudomanyos szamologepben.
A nehezites a precedencia. De csak az osszeadas, szorzas eseten (max. ha kell hatvanyozas ott is). A sin() es mas 1-operandusu muvelet az mindig arra vonatkozik, amit epp kiir. -
axioma
veterán
Me'g mindig nem. A szamologepbe NEM copy-zol olyat ami oda van irva (legalabbis az mar nem szamologep hanem mini-excel...). A szamologep a billentyunyomkodasok menten mukodik. Peldaul azt irja be hogy 12 / 17 sin. Ez lesz a sin(12/17). De mi a fenenek kuldened ebben a formaban a backend-nek? Te a nem szamjegy gombnyomasoknal, ha volt uj szam akkor azt es a muveletet kuldod el, es reszeredmenyt vissza. Tehat 12,/ eseten vissza 12, 17 sin-re vissza a sin(12/17). Ha megengeded a precedenciat (es/vagy zarojelet, de ez azert eggyel komplexebb, en elsore megneznem hogy a feladatleiras alapjan muszaj-e, mert a sima szamologep NEM tudja es a legtobb usernek kb. nem is kell), akkor annyi hogy a backend-en kell egy verem is. De a szamologepen tulkepp forditott lengyel, tokenizalt a bemenet (ugye a sin-ra se a 3 betut kell atkuldeni, hanem egy kodot ami azt jelenti nalad hogy a sin gombot nyomtak meg).
"4*(3+sin(12))" -> a szamologepen ezt is ugy irod be leginkabb, hogy 12 sin +3, *4
Ha nagyon muszaj zarojelezest is tudni, akkor is ilyesmi:
4,* -> vissza 4
( -> vissza 0
3, + -> vissza 3
12, sin -> vissza sin(12)
) -> vissza 3+sin(12)
= -> vissza 4*(3+sin(12))
Tehat minden nem szamjegynel vagy 1 vagy 2 parametert kuldesz, ha volt szam akkor azt es a muveletet, ha nem, akkor csak a muveletet (zarojelet, akarmit).
Probald ki a windows tudomanyos szamologepben.
A nehezites a precedencia. De csak az osszeadas, szorzas eseten (max. ha kell hatvanyozas ott is). A sin() es mas 1-operandusu muvelet az mindig arra vonatkozik, amit epp kiir. -
-Faceless-
őstag
Mit szeretnel parse-olni? Ha jol ertem akkor a tied a frontend. Ha meg igy van, akkor a gombnyomasok tulajdonkeppen megcsinaljak neked a tokenizalast, sot tulkepp rogton a kifejezesfat is felepitheted mindig ahogy jon a kovetkezo gombnyomas (nyilvan szamoknal a szamjegyeket erdemes a frontenden osszevarni es 1x konvertalni). De mar csak azert is igy erdemes mukodnie mert a szamologep a reszeredmenyt altalaban mar irja.
Vagy valamit nem ertek jol.Enyém minden frontend backend ahogy van.
Most hogy mondod igen ennek több értelme van. Én teljesen úgy gondolkodtam, hogy a műveleti mezőnek TextField-nek kell lennie, és ha mondjuk becopy-zod a "4*(3+sin(12))"-t akkor nincs gombnyomás ami mentén felosztod a műveleteket meg nyeljen le üres zárójelet ilyenek.
De akkor "csak" össze kellene foltoznom egy reguláris kifejezést amivel szétbontom, és műveleti sorrendben végigmegyek tömbbön.Semmis akkor a kérdés, csak évek óta nem csináltam ilyesmit, és túl későn este akartam hozzákezdeni. Inkább le is tagadom, hogy hozzákezdtem volna megy a letagadom kupacba.
-
Szmeby
tag
Egy kicsit a kodminoseghez. Ez is olyan, hogy at lehet esni boven a lo tuloldalara. Lassan mar hulyenek nezes esete forog fent, amikor rankeroltetik a 16-os complexity-t (vayg mennyire van allitva), nem beszelve az abbol adodo extra feladatokrol (a complexity miatt letrehozott kulon fuggvenynek vajon kell-e ujra parameter-ellenorzest csinalnia, es a unit test-jenek kell-e olyan eseteket is lefednie, ami az egyetlen hivasi helyen nem fordulhat elo?). Szoval en egyetertek az elvekkel altalaban, de nagyon durva amikor valaki nem azt nezi hogy milyen egy masik - az adott feladattal megbizhato! ha valami komplex cucc kozepe, akkor nem egy most esett ki a bootcamp-bol - fejleszto megerti-e, hanem hogy a szintetikus pontozassal mibe tud belekotni.
Nyilvan ez nem jelenti azt, hogy nincs szarul megirt kod. Csak hogy neha annyira de annyira tullihegik... en 20+ ev multtal pont nem tudnam felsorolni a solid betuszo feloldasat, ettol fuggetlenul azert lehet megis annak megfeleloen dolgozni. Kicsit olyan mint a torvenyek betartasa: egyreszt a torveny a tarsadalmi normak osszegyujtese, megfogalmazasa; masreszt meg senki nem tudja beteve a BTK-t, megis tud esetekrol zsigerbol jo ertekelest adni. A solid is nem csak ugy kinott es tanitjak, hanem a "termeszetesen" kialakult best practice-nek egy szaraz, es megis gumiszabaly osszefoglaloja. Kb. arra jo hogy indokolni tudd, hogy a masiknak (vagy plane kezdonek) az elkepzelese miert nem jo, de nem ugy adsz ki tervet a kezedbol hogy elotte gyorsan leellenorzod, hogy vajon stimmel-e minden betu.
Szerintem. YMMV.Igen.
-
#68216320
törölt tag
Biztos kozos ososztaly kell neked, nem lenne jobb a kozos interface? Mar persze ha arrol van szo hogy azert szeretned oket valahogy kozositeni, mert kesobb egyforman kezelned a kettot (az egyforma tulajdonsagokkal). Ha most sehol nem kezeled egyutt, akkor meg siman ket osztaly, az nem akadalyozza hogy kesobb kozos interface is legyen, ha valos indok lesz ra.
Nagyon hasonlóan kezelném őket, de még csakbaz egyik van meg. A különbség köztük annyi lenne, hogy az egyik saját projecten belüli adatokkal jön létre, a másik külső (request) és egyben néhány másik adattal jön létre. A perzisztens rétegben is külön vannak tárolva. Ezen kívül közösen kezelem. Például együtt listázom, stb.
Ennek ellenére semmi akadálya nincs, hogy teljesen külön osztály legyen, hamár külön is tárolom őket.
-
Lortech
addikt
Van egy szamomra nem ismert oku jelenseg, bocs kicsit hosszu.
A feladat: volt egy 2 adott tipusu objektumot kombinalo osztaly, most ugyanez kene altalanosan, tobb elemre.
Az objectumok tipusabol ami lenyeges:public interface SpecInterface<K extends Serializable & Comparable<? super K>>
extends DoublePanel<K, String>
ahol:public interface DoublePanel<R extends Serializable,C extends Serializable>
Ezen kivul kene hasznalni a kombinalashoz mindket iranybol egy-egy fuggvenyt:
A SpecInterface-bol:Optional<SubType> getMyList()
A DoublePanel oldalrol meg egy Utils osztalyon keresztul:public static <R extends Serializable, C extends Serializable>
DoublePanel<R, C> mergeColumns(DoublePanel<R, C> left,
DoublePanel<R, C> right)
Ami az eddig kodban volt:SpecInterface<K> f1=...SpecInterface<K> f2=...
es ezutan siman ment a ketfajta meghivas:...=f1.getMyList()...=DoublePanelUtils.mergeColumns(f1, f2)
Most viszont az elemeket praktikus okokbol Stream-bol vennem es hasznalnam ezeket a kombinalashoz szukseges lepeseket. Az elso nyilvanvaloan csak akkor megy vegig, ha a tipusaStream<SpecInterface<K>> fobjs, viszont ekkor a...=fobjs.reduce((f1, f2) -> DoublePanelUtils.mergeColumns(f1, f2)).get();
sornal azt mondja, hogy nem tudja R,C, es K erteket meghatarozni.
Ellenben ha beszurom hogyStream<DoublePanel<K, String>> fobjs2 = fobjs.map(f -> f);
akkor siman lefordul az...=fobjs2.reduce((f1, f2) -> DoublePanelUtils.mergeColumns(f1, f2)).get();
Mukodik, de randa, es jogosan nem szeretnek code review-n, de azt se tudom hogyan kene rakeresni az okra es megoldasra. El tudna valaki legalabb iranyitani hogy merre keressek?Nem látom át teljesen a problémádat, a streamektől nem egyértelmű, hogy mi történik. Egy működő példa talán segítene, hogy pontosan lehessen vizsgálni, mire gondoltál.
Nekem úgy tűnik, hogy a lambdák type inference limitációjába ütköztél.
Néhány link, ami indulásnak jó lehet, Brian Goetz kommentjeit érdemes olvasni:
[link]
[link]
[link]
Ha nagyon beleásod magad, javac-vel debug paraméterezéssel (utolsó link) ki lehet vsz. deríteni, hogy mi történik pontosan. -
axioma
veterán
Az a baj h legyinthetnek de az mar kiveri a biztositekot hogy irracionalis megoldast csinalnak. Atterveztek, full tipusos [eddig jo], de ehhez 'en' a szamolo rutin mondjam meg melyikkel akarom hasznalni [implnev.class]. Mert hogy csak igy lehet. Magyarul, atnezve az atalakitast, csak nem akarjak h naluk legyen default. Ez mar reg nem a tipusossagrol szol... Megmodositottam offline ugy [azaz lehetseges, szoval vegulis +1 nap alatt kiderult a valasz, h o"k erveltek rosszul -- bar tovabbra is randa, rosszabb mint volt, karbantarthatalanabb], hogy jojjon 'toluk' default, mi a velemenyuk - a vicc hogy azt meg egy darab if miatt [hogy jofej legyek es ne null-t adjak at ha a default-ot kerem] le-felesleges-bonyolitasozta. Ja ok Londonban ulnek csak en Mo-on...
Mind1, egyelore dokumentalom az egyet nem ertesemet, mar ha benne marad nalam az implementacio megadasa a calc-os osztalyban, aztan ha telik a pohar [mert kozben a manager fonoknek meg en vagyok lasu mig ok ezen ulnek] akkor aktivalom a linkedin-emet...
Viszont sokat javult a generic-ekrol a tudasom, eddig ahhoz hasonlitanam mint nyelvtudasnal a passziv szokincset, hat most beaktivaltak ;-)Nyilvan ugy alakitottak, hogy az lesz amir ok kitalaltak. Orvendek...
-
Aethelstone
addikt
A raw típus manapság csak a probléma kikerülése. Nyilván a full típusosság több tervezést igényel, de meg szokta érni.
-
mobal
nagyúr
Nem az a bajuk, de most varjunk egy kicsit mert a comment-emre azt mondtak megoldjak.
Amugy igy nezett ki valahogy eredetileg:
interface XMatrix<M> ...
interface XMatrixUtils<M>
interface Linalg<T> ... { XMatrixUtils<T> newXMatrixUtils()...
A linalg implementacioja meg visszaadta az apachecommons-os valtozatot jelenleg, hosszutavon meg beallitasbol. Es a ...utils az ami eloallitja a nyers adatokbol a matrixosztalyokat, es utils-bol egy szamitasi folyamatban egy peldany van, szoval vedve volt ez elegge.
De igy a kodban ugy hasznaltam, hogy
XMatrixUtils mtxUtils= ...
XMatrix mtx= ...
ahol a bal oldalak meg rawtype-ok. Ami "nem jo" mert nem lesz type check...
Most valami koztes allapot van (nalam ugy hogy a sajat szamolos osztalyom es a unit test-je is generic az <M> felett, ok meg halalra generic-eltek a sajat interface-uket onmagukkal stb. de a vegen az en kodomba hard code-olva tettek hogy "csak igy lehet". Aztan ugy tunik most javitjak, ezek szerint nem csak igy lehet...
En el nem hiszem hogy ez az egesz megeri azt hogy 3 fejleszto most mar tobb mint 1 napot dob ra, sot a generikus alkalmazas fejlesztesi vezetojet is belerangattak, szerintem atlathatatlanabb es hasznalatban zavarobb lesz, mint az a szerencsetlen raw type lett volna.Mondjuk minél tipusosabb annál jobb.
-
mobal
nagyúr
Na belenyultam egy specko esetbe.
Elkepzeles: tobbfele matrixszamitasi (2dim, altalaban java-hoz kepest kezelheto meretu de sok szamitast igenylo) implementacio hasznalatanak lehetosege. Interface, utils osztaly stb. minden megvan, a factory alapbol rendszervaltozobol veszi az aktualisat, es ha nincs default-ozza, szoval egyszerre biztositott hogy egyfele lesz.
Minden popec, egyszer csak benyogi az egyik review-er, hogy ne hasznaljunk raw type-okat, egyaltalan, mert az antipattern, nem tud a fordito osztalytipust ellenorizni. Java 8. Fogta az interface eredeti kitalaloja, minden fugg mar szinte onmagatol is, de a vege csak az lett, hogy az en kodomban nemes egyszeruseggel a konkret tipust (egyelore egy van elfogadva, bar masik kettot megcsinaltunk) hard code-olta'k mint hibajavitas. Innentol ki van dobva az egesz flexibilitas, ami a lenyeg lett volna...
En siman azt mondanam, hogy a raw type kerulese altalaban nem jelenti azt, hogy - foleg hogy a kodhoz nem fognak egysegsugaruak hozzaferni a domain es a kodresz fontossaga miatt - benne hagynam azt a nem felreertheto raw type-ot, de gondoltam megkerdezem, van-e barmi lehetoseg amit kihagytunk.
Fontos dolog a review es a rossz mintak kerulese, de ez boven a lo tuloldalanak tunik.? extends Akármi? Vagy nem értem...
-
floatr
veterán
Es ha a tanarod olvassa? Es ha mar azt sem csinalod meg, aminel a teljes internet a rendelkezesedre all es egy zh-hoz kepest tengernyi ido, vagy nem vallalod fel a felkesz-seget, akkor ugyan mar hogyan akarsz kesobb a szakmaban dolgozni? Kismillioszor kell rovid hataridore alig ismert teruleten valamit alkotni. Ez pont felkeszitene arra... vagy kegyetlenebbul fogalmazva kiszurne ha nem vagy ra "kepes" (a kepessegnel beleertem a nem elegge akarast ill. kitartast is).
Olyan diákból sosem lesz épkézláb szakmabeli, aki ennyire nem akar megcsinálni feladatokat. Teljesen mindegy milyen jegyet kap rá, magával cseszik ki. Ebben a szakmában pont nem a jegyek számítanak, hanem a hagyományos értelemben vett agilitás. Diákként magának kéne feladatokat kitalálni, nemhogy a kiadottakat is mással megoldatni

-
floatr
veterán
Na valahogy igy nez ki:
public interface ProjMatrix<M> {
public ProjMatrix(double[][] mtx);
public ProjMatrix(M mtx);
public M getUnderlying();
public ProjMatrix add(M mtx);
..
}
Es van harom megvalositas, ebbol ketto ketretegu, az Nd4j-s hasonlo ehhez:public class ApacheMatrix implements ProjMatrix<RealMatrix> {
private final RealMatrix underlying;
public ApacheMatrix(double[][] mtx){... underlying=new RealMatrix(mtx); ...}
public ApacheMatrix(RealMatrix mtx){ underlying=mtx; }
public RealMatrix getUnderlying() { return underlying; }
public ApacheMatrix add(RealMatrix other) { return new ApacheMatrix(underlying.add(other.getUnderlying());}
...Es en csinalnek egy ilyet:
public class FlatMatrix implements ProjMatrix<FlatMatrix> {
private final double[] data;
private final dataLen;
... // segedvaltozok
public FlatMatrix(double[][] mtx) { ....dataLen=...; data=new double[dataLen]; ...}
public FlatMatrix getUnderlying() { return this;}
public FlatMatrix add(FlatMatrix other) { ... }
...Persze ebben az esetben az underlying-gal nem lehet "szepen" konstrualni, az tulkepp egy masolas lesz, de ennek nem lenne jelentosege.
Csak fejbol kb. a lenyeg, lehet benne egyeb hiba, nem az szamit, hanem a konstrukcio osszessegeben mehet-e igy minden gond nelkul.Kosz!
A Spring Data lényegében eszerint a minta szerint működik. Ha van értelme így használni, akkor én nem gondolkoznék azon, hogy valaki szerint esetleg anti pattern

-
Drizzt
nagyúr
Na valahogy igy nez ki:
public interface ProjMatrix<M> {
public ProjMatrix(double[][] mtx);
public ProjMatrix(M mtx);
public M getUnderlying();
public ProjMatrix add(M mtx);
..
}
Es van harom megvalositas, ebbol ketto ketretegu, az Nd4j-s hasonlo ehhez:public class ApacheMatrix implements ProjMatrix<RealMatrix> {
private final RealMatrix underlying;
public ApacheMatrix(double[][] mtx){... underlying=new RealMatrix(mtx); ...}
public ApacheMatrix(RealMatrix mtx){ underlying=mtx; }
public RealMatrix getUnderlying() { return underlying; }
public ApacheMatrix add(RealMatrix other) { return new ApacheMatrix(underlying.add(other.getUnderlying());}
...Es en csinalnek egy ilyet:
public class FlatMatrix implements ProjMatrix<FlatMatrix> {
private final double[] data;
private final dataLen;
... // segedvaltozok
public FlatMatrix(double[][] mtx) { ....dataLen=...; data=new double[dataLen]; ...}
public FlatMatrix getUnderlying() { return this;}
public FlatMatrix add(FlatMatrix other) { ... }
...Persze ebben az esetben az underlying-gal nem lehet "szepen" konstrualni, az tulkepp egy masolas lesz, de ennek nem lenne jelentosege.
Csak fejbol kb. a lenyeg, lehet benne egyeb hiba, nem az szamit, hanem a konstrukcio osszessegeben mehet-e igy minden gond nelkul.Kosz!
Alapvetően probléma nincsen vele, de én inkább csinálnék egy másik mátrix típust(Matrix), ami teljesen a ProjMatrix implementációitól. És akkor nem lenne generikus a ProjMatrix interface, a getUnderlying helyett meg lenne egy Matrix getMatrix. És az egyes implementációknak lenne az az implementation detail-je, hogy a belső saját mátrixából hogyan fog mátrixot csinálni, factory-kal, különböző bemenő adatok alapján. Pl.: lenne egy ilyen a Matrix createMatrix(double[][] mtx), illetve valami más értelmes adat. A konstruálás paramétereit mindig az vezényelje, hogy milyen adataid lesznek ahol felhasználod ezt az interface-et.
Működni tökéletesen működni fog amit csináltál, viszont az nem fog nekem tetszeni, hogy a felhasználó kódnak végül mindenképpen tudnia kell a konkrét implementáló osztályokról, mert van olyan method az interface-ben, ami implementáció specifikus értéket vár/ad vissza. Így nem tudod pl.: ServiceLoaderrel betölteni az implementációkat, hanem minden új implementációnál újra kell majd fordítanod a kódot. Ami nem feltétlenül probléma, de egy megfontolandó dolog.
Ami sérül ebben az interface-ben, az a SOLID design elvekben a "dependency inversion principle". Nem jó practice, ha az interface felhasználója bármilyen specifikus dolgot kell tudjon az implementációból(esetedben az M típust).
-
axioma
veterán
Na valahogy igy nez ki:
public interface ProjMatrix<M> {
public ProjMatrix(double[][] mtx);
public ProjMatrix(M mtx);
public M getUnderlying();
public ProjMatrix add(M mtx);
..
}
Es van harom megvalositas, ebbol ketto ketretegu, az Nd4j-s hasonlo ehhez:public class ApacheMatrix implements ProjMatrix<RealMatrix> {
private final RealMatrix underlying;
public ApacheMatrix(double[][] mtx){... underlying=new RealMatrix(mtx); ...}
public ApacheMatrix(RealMatrix mtx){ underlying=mtx; }
public RealMatrix getUnderlying() { return underlying; }
public ApacheMatrix add(RealMatrix other) { return new ApacheMatrix(underlying.add(other.getUnderlying());}
...Es en csinalnek egy ilyet:
public class FlatMatrix implements ProjMatrix<FlatMatrix> {
private final double[] data;
private final dataLen;
... // segedvaltozok
public FlatMatrix(double[][] mtx) { ....dataLen=...; data=new double[dataLen]; ...}
public FlatMatrix getUnderlying() { return this;}
public FlatMatrix add(FlatMatrix other) { ... }
...Persze ebben az esetben az underlying-gal nem lehet "szepen" konstrualni, az tulkepp egy masolas lesz, de ennek nem lenne jelentosege.
Csak fejbol kb. a lenyeg, lehet benne egyeb hiba, nem az szamit, hanem a konstrukcio osszessegeben mehet-e igy minden gond nelkul.Kosz!
-
Aethelstone
addikt
Az mennyire antipattern, hogy van egy generic-es intergace-em, es csinalok egy olyan osztalyt, ami megvalositja a sajat maga 'feletti' interface-t? Az interface kivulrol adott, a kerdes hogy erre csinaljak- ket szintet osztalyban is - nem tennem, csak igy meg furan hat, vagy csak tul sokaig voltam oldschool, foleg 10+ eves kodok kozott. [Me'g mindig a matrixmuveletek megvalositasa tema, bar 90% hogy ez nem lesz prod-ban soha... de ha mar csinalom, csunya se legyen.]
Konkrét kód nem ártana, de egyébként elsőre nem antipattern.
-
Lortech
addikt
Vagy nagyon pentek van, vagy mindenki masnak trivialis hogy ilyen nincs... es meg hetfon is jo lesz csak felre akarom tenni a problemat es a tobbi reszt csinalni.
Tehat ha van ket osztalyom, Imp1Class es Imp2Class, akik azonos interface-t akarnak megvalositani, amiben van hogy "onmaguk" tipusa kell legyen a parameter, mondjuk van benne egy addMtx(... other) fuggveny. Ilyenkor van-e arra megoldas, hogy az other tipusa az az osztaly legyen amelyik eppen megvalosit? Mert ha az interface-t magat irom tipusnak, akkor nem lehetek biztos benne, hogy ugyanazt kapom (holott az a terv, hogy mindenkit csak sajat tipusaval szabadna osszeereszteni).
Igen, lehet ellenorizni instanceof-fal es akkor meghivni csak a sajatot amugy exception. De ez igy onmagaban nem egy megoldhato dolog? Vegulis nem szukseges, foleg hogy egyutt vszinu csak bemutatozni kene, de most mar idegesit, hogy ennyire hianyos a tudasom vagy megint tul sokat gondolok termeszetesnek.Röviden: tényleg nincs.
Csinálhatsz generikus interface-t:
public interface IF1<T extends IF1> {
void add(IF1<T> other);
}
public class Imp1 implements IF1<Imp1> {
@Override
public void add(IF1<Imp1> Other) {
}
}
public class Imp2 implements IF1<Imp2> {
@Override
public void add(IF1<Imp2> other) {
}
}
{
IF1 impraw = new Imp2();
IF1<Imp1> impl1 = new Imp1();
IF1<Imp2> impl2 = new Imp2();
impraw.add(impraw);
impraw.add(impl1);
impraw.add(impl2);
impl1.add(impl1);
impl1.add(impraw);
impl2.add(impl2);
impl2.add(impraw);
pass(impraw, impl1);
pass(impl1, impraw);
pass2(impl2, impl1);
}
private static void pass(IF1<Imp1> one, IF1 other) {
one.add(other);
other.add(one);
}
private static void pass2(IF1 one, IF1 other) {
one.add(other);
other.add(one);
}De ez jobbára csak bohóckodás, mert ha használni akarod, úgyis meg kell adnod a típus paramétert fordítás időben, hogy garantáltan *csak saját magával tudd átadni neki, vagy típus paraméter nélkül hagyod és unchecked leszel. Valamint raw IF1 (impraw-t) IF1 példányt oda vissza tudod passzolgatni futási és fordítási hiba nélkül.
-
Aethelstone
addikt
Hat, me'g ha flat-kent is kezelem es final, azert egy indexeles me'g akkor is van per elem, ha siman vegigfutok az osszesen. C-ben meg mehetne pointer aritmetikaval. Mivel ez suru muvelet, sok matrixon, lehet rajta kulonbseg, erre gondoltam.
Pont eliminalas nem kell, nem linearis egyenletrendszerrol van szo, hanem mindenfele matrixszorzasok, osszegzesek sorra/oszlopra, siman vagy negyzetesen, meg ilyesmik... csak sok.Én nem érzem, hogy sokat dobna rajta, de nyilván ha kétségeid vannak, akkor mérni kell.
-
Aethelstone
addikt
OK, koszi. En orulok ha nincs es megirhatom
Csak azert probaltam guglizni meg kerdezni, hatha van valami, mert ki tudja. Es hat ugye a cegnek se mindegy, hogy dolgozom rajta vagy csak hasznaljuk. (Bar amennyit az nd4j-nek a sikertelen approve-jaba belefektettek, mar reg keszen lehetnek...)
Az egyetlen kerdes, hogy probaljam meg java-ban, vagy egybol C es JNI. A cucc csak nalunk fog futni (inputot general a userek altal hasznalt programhoz), nem baj ha platformhoz kotjuk. Na majd meglatjuk, nem csak rajtam mulik, koltoi kerdes volt. Sot me'g az is lehet hogy meregetjuk, hogy a mi specko felhasznalasunknal (tipikus matrixmeret 70x70 es 70x250, nem oriasi, csak a muveletek vannak sokan) mennyit hozna a C, ha adnak arra is idot.
(A fonok elsosorban egy nagyon basic matrix-muveletes interface-t akar es alarakni most az apache-ost, hatha kesobb lesz olyan nd4j verzio ami atmegy es/vagy elokerul valami jobb. Csak hat az jelenleg minden lesz csak nem gyorsabb, sot, attol hogy a lepeseket elemibbre bontja, szebb a kod de lassabb lesz, van ami 2-3x menne igy vegig az elemeken, mig a jelenlegi nativan, for ciklusokkal megirtban egyben benne lehet egy osszetettebb muveletsor. De szerencsere egyelore ugy latszik, hogy nyitott az egyeb megoldasokra.)Szerintem jni felesleges. A Java is gyors, a szűk keresztmetszet nyilván a választott algoritmus lehet. Bár egy elimináció 70x70 esetén lassú lesz, akármiben, akárhogy írod
Az apache egyébként korrekt, én is azt választanám. -
Aethelstone
addikt
Van az nd4j-n kivul olyan library (az nem kapta meg a 3rd party approve-ot, de jo esellyel azert mert egy csomo minden nekunk felesleges dolog miatt vannak nem approve-olhato dependency-k), amelyik optimalisan tud kezelni double[][] (fix meretu letrehozas utan) tipusu matrixokon vegzett muveleteket? Optimalison azt ertem, hogy peldaul nem a double[][] van alatta mint pl. az apache math3-janak, vagyis nem megy el az ido nagy resze a java hulye 2dim indexalasaval... na meg azert van valami nd4j jellegu eszkozkeszlete (pl. elemenkenti gyokvonas pont kene meg hasonlok).
Nyilvan meg lehet irni, de fura hogy nem talaltam letezot. Ami van az minden tul altalanos akar lenni.
Igen, konkretan ebben a projektben csak masik reszen letezik mar python integracio, de akkora valtoztatas most nem menne at, hogy mindent oda attenni. Egy uj funkcio lenne de a tobbihez is hozzanyulnank, mert vannak sebesseggondok.Annyira specifikus nem nagyon lesz. A Java általános célú nyelv, nem speciálisan matematika problémák megoldására találták ki. Ha nagyon speckó valami kell, meg köll írni, nincs mese.
-
mobal
nagyúr
En lattam 5+ eves tapasztalattal rendelkezo java programozot, aki nem volt tisztaban a szamok (sot: sima, 1-2-4 byte-os elojeltelen egeszek) memoriaban valo tarolasanak mikentjevel. Nezett nagyott mikor egy byte-stream-ben kellett volna adott modon a periferiara kuldenie...
(Arra mar nem emlekszem, hogy a kettes szamrendszer mennyire volt neki ujdonsag, de amikor a kettes komplemens elokerult, az tuti nullarol kellett neki elmondani.)
Ja es diplomaja volt mernoki szakrol, nem ilyen himi-humi tanfolyamos, meg ugy kb. 5 evvel ezelotti sztori, nem is azert vettek fel mert barkit.
A kedvencem a temaban akkor is az a 4. eves prog.terv.mat-os, aki a koleszban jott nekem, hogy "torol a space!" - nem ismerte az insert billentyut...Ez minden csak nem mindennapi kérdés. Ha mondjuk világ életedben REST apit csinálsz, vágod kivülről belülről és tényleg profi vagy akkor ez kizáró tényező?

Szerk.: ha kifejezetten ez a tudás kellet az más ofc.
-
Lortech
addikt
En lattam 5+ eves tapasztalattal rendelkezo java programozot, aki nem volt tisztaban a szamok (sot: sima, 1-2-4 byte-os elojeltelen egeszek) memoriaban valo tarolasanak mikentjevel. Nezett nagyott mikor egy byte-stream-ben kellett volna adott modon a periferiara kuldenie...
(Arra mar nem emlekszem, hogy a kettes szamrendszer mennyire volt neki ujdonsag, de amikor a kettes komplemens elokerult, az tuti nullarol kellett neki elmondani.)
Ja es diplomaja volt mernoki szakrol, nem ilyen himi-humi tanfolyamos, meg ugy kb. 5 evvel ezelotti sztori, nem is azert vettek fel mert barkit.
A kedvencem a temaban akkor is az a 4. eves prog.terv.mat-os, aki a koleszban jott nekem, hogy "torol a space!" - nem ismerte az insert billentyut...Lehet ilyeneken szörnyülködni, de ezek tudása / nem tudása pont nem mond el semmit arról, hogy az illető milyen szoftverfejlesztő.
Sok-sok interjún túl számtalan példát tudnék hozni, hogy ki mit nem tudott interjún, olyanok is akiket később felvettünk és tök jó kollégák lettek. Valószínűleg tőled is lehetne java témában 5/5-öt kérdezni, amit nem tudnál, ~mindenkitől. -
Cathfaern
nagyúr
Fibo-ra egyebkent van logaritmus ideju rekurziv szamolo - modulo <nagyprim> mert anelkul abrazolhatatlan -, de azt fejbol tudni nem feher embernek valo, versenyhez neha ki kell guglizni. Pl. itt az utolso.
Viszont anno nekunk az algoritmusok tantargy elso gyakorlatainak egyiken volt, hogy miert _nem_ rekurzivan szamoljuk a fibot... minimum tombben vagy persze sima ciklusban. Nekem furcsa, hogy eleve ugy szolt a feladat, hogy valaszthatonak fel volt a rekurziv is sorolva, szinte talcan kinalva.Valószínűleg pontosan azért, mert valós programozási körülmények között nagyon ritka, hogy a fibonacci sorozat számításának az optimalizálása számít bármit
Csak gondolom ki akarták szűrni azokat, akiknek még az értő olvasás se megy, megy programkódot is csak akkor látták amikor átküldték neki fizetés után a beadandóra beküldendő programját. -
Orionk
senior tag
-
Orionk
senior tag
20 perc alatt nem lehet tul sok mindent megme'rni... szerintem ez valami olyan lehet, amiben mondjuk kell tudni (absztrakt szintre forditva) tagadni egy "xor"-t es megmondani, hogy ha "nehany smirf az smurf, de minden smarf smirf is, akkor lehet-e olyan smurf, aki nem smarf" (el ne kezdd elemezni, csak veletlenszeruen irtam a valtozatokat koze, keso van mar). Esetleg valamelyik cegnel volt me'g kezdoket szuro tesztben algoritmus-vegrehajtas (folyamatabra, 'mi tortenik ha' kerdessel, vagy hianyzo boxokba beleirni szoveg alapjan a szerepet).
Azert majd gyere vissza a valodi valasszal
Megvolt ez az interjú feladat.
Az N-edik Fibonacci számot kellett kiszámolni rekurzívan VAGY ciklussal. 20 perc volt rá. Csak a metódust kellett megírni.Kb. 12-15 perc alatt megcsináltam rekurzívan és egy kis körítés ként egy Java-s Main classba azért beletettem, ahol meghívódik ez a metódus. Hibátlan lett.
Aztán kérdezte a fejlesztő srác, hogy meg tudnám-e a metódust csinálni ciklussal. Ott annyi nem sikerült, hogy a for cikluson belül véletlenül elszámoltam, de már kevesebb időm volt hátra a ciklusos verzióra.
Remélem, hogy ez miatt még átmentem. 2 hét múlva lesz visszajelzés. -
nji
aktív tag
Kicsit tajekozodhatnal mielott lebunkozol segitsegmegtagadas okan. Masreszt meg mi lett volna, ha az elso _kerdesed_ (hol akadtal el) teszed ide, es melleirod, hogy penzert segitseg is erdekel? Egyreszt kiderulne, miben kene segitseg, milyen szintu, masreszt kiderulhet hogy ket jo linkkel ki tud valaki segiteni amivel egyedul megoldod.
Ja segitseget beadandohoz csak csoporton belul megbeszelest vettunk igenybe - es me'g net se volt nagy segitseg 91-98 kozott.Az a gondom, hogy nem tanultam még javat és a szükséges algoritmusokat csak c-ben és c++-ban találtam meg és nem tudom átírni úgy, hogy működjön a processingben.
Csoporton belül nem tudok segítséget kérni, mert csak ketten vettük fel a tárgyat az egész évfolyamon és a másik diáktól már kérdeztem, de nem nagyon akar segíteni, mert ha hasonló lesz a megoldás, akkor mindketten megbukhatunk. Ezért érthető , hogy nem fogja megosztani a magoldását, amit lehet, hogy ő is valakivel megoldatott. -
nji
aktív tag
Mindegy hogy mit gondolsz, mert nem érdekel.
Aki segít az segít, ha meg nem tudsz segíteni, akkor minek szólsz bele és mit érdekel?
Gondolom Te mindig mindent segítség nélkül csináltál meg.
Amúgy meg elég érdekes ez a fórum, hogy szakmai hozzászólás egy sincs csak kötözködés. Tipikus magyar ugar.... -
nji
aktív tag
Helyettem nem kell elmenni vizsgázni, de levelezőn akkora fos az oktatás és emiatt keresek korrepetálásra tanárokat. Ha itt nem lehet ilyesmit, akkor hol máshol ? Olyan helyre (fórumra) lenne szükségem, amit nem 5-6 éve látogattak, mert pl. az index fórumon a processing több éve halott, néztem a logouton is, ott egyetlen egy hozzászólás volt 2011-ben, a processing.org fórumában meg senki nem tudja megoldani a feladatot.
De nekem nem az kell hogy csinálja meg helyettem ezt vagy azt hanem KORREPETÁLÁS!!! Sajnos évi 400 ezer Ft-os tandíjért nem jár megfelelő oktatás a levelezősöknek. Az iskolát inkább nem nevezem meg egyelőre, de ennyi pénzért többet várnék. -
floatr
veterán
Nincs azzal gond, ha pörög a piac

-
IvoryBrown
csendes tag
Eloszor letrehozol egy 0 meretu tombot, utana ugyan a tombmeretnek hasznalt nDiakTantargy valtozonak adsz egy uj erteket, de akkor mar nem valtozik a tomb.
Elobb olvasd be, majd utana kapjon erteket (new String[....])
Ezzel ezt az egy problemat megoldod. De maga a konstrukcio nem jo. Minden diak minden tantargyat, sot minden jegyet ugyanoda irod? Gyanus, hogy nem ez lenne a cel.Tényleg utólag már nem lehet, már mint lehet de nem célszerű.
ArryaList erre a problémára jó lehet.
Bele se gondoltam hogy tanuló hozzá tantárgy illetve osztályzat és ezt nem egybe kellene kezelni
Ezt, hogy lehetne kivitelezni? -
#74220800
törölt tag
1. En ugy ertenem a feladatot ahogy a tobbiek irtak (nem a java.util-ost definialod felul, hanem azt nem include-olva magad irsz egyet)
2. Ha igy teszel, miert baj az, hogy a beepitett is minheap-et hasznal? ArrayList, megirod a minheap-nek a sullyeszt meg buborekol vagy hogy hivtatok fuggvenyet, vagy hat kozvetlen beleirod az add/pop kodjaba, es ennyi.
Bar a maxelements miatt akar sima tombot is hasznalhatsz, persze akkor kulon kell tarolni es managelni a size aktualis erteket (vagy legalabbis erdemes, ha nem akarod mindig megkeresni az elso null-t). Felesleges ha ott az arraylist bekorlatozni magad, de lehet, hogy iskolapeldakent inkabb azt irnam meg.Ja maradt az arraylist, az a legkézenfekvőbb. De valamiért, a leadó system testje vmiert ezt a hibát írja ki:
Removed two elements but the second one had a lower priority than the first one! Amit nem értek. Amugy itt van a programom(class nevet most atneveztem):
import java.util.ArrayList;
public class MyPriorityQueue<T extends Comparable<T>> {
private ArrayList<T> queue;
private int maxElements;
public MyPriorityQueue(int maxElements){
this.maxElements = maxElements;
queue = new ArrayList<T>();
}
public void add(T e) throws IllegalStateException{
if( size() == maxElements)
throw new IllegalStateException("The queue is already full!");
queue.add(e);
int i = size()-1 ;
T help;
while ( i > 0 && ( queue.get( parent(i) ).compareTo( queue.get(i) ) ) > 0 ){
help = queue.get(i);
queue.set(i,queue.get( parent(i) ));
queue.set(parent(i), help);
i = parent(i);
}
}
public T pop() throws IllegalStateException{
if(queue.isEmpty())
throw new IllegalStateException("The queue is empty!");
T min = queue.get(0);
queue.remove(0);
minheapify(0);
return min;
}
public int size(){
return queue.size();
}
public int parent(int i){
return (i - 1) / 2;
}
public void minheapify(int i){
int l = i*2+1;
int r = l+1;
int min;
T help;
if (l <= size()-1 && ( queue.get(l).compareTo( queue.get(i) ) ) < 0 )
min = l;
else
min = i;
if (r <= size()-1 && ( queue.get(r).compareTo( queue.get(min) ) ) < 0)
min = r;
if (min != i){
help = queue.get(i);
queue.set(i,queue.get(min));
queue.set(min, help);
minheapify(min);
}
}
public void display(){
for(int i = 0; i < queue.size(); i++) {
System.out.print(queue.get(i) + " ");
}
}
} -
disy68
aktív tag
-
csabi0911
csendes tag
Ha eleg a butaszamologep mod (ld. windows, argh), ami NEM ismeri a precedenciat, akkor egyszeruen csinald ciklusban, szam, operator, szam, operator, es engedelyezd az = jelet az operatorok koze (akkor lepsz ki a ciklusbol amikor azt kapod). Minden egyes lepesben egy temp valtozodon alkalmazod az muveletet az uj szammal (elsore ta'rold be, hogy temp 0 es muvelet + volt az indulas elott). En ki is iratnam a reszeredmenyeket (a szam bekerese utan).
Ezt kicsit egyszerűbben le tudnád írni? Esetleg forráskódot, ahogyan te megoldottad?
-
bucsupeti
senior tag
En elsosorban az identalast tennem helyre, mert az egy dolog hogy a zarojeleket elrontja valaki, de igy baromira nem is latszik a kodbol, hogy mit hova szant. A for-on beluli elso teljes if egy tab-bal bentebb kene legyen.
A tobbivel egyetertek, ekezet es a magyar ugy altalaban elhagyasaval kapcsolatban is, csak szerintem mind a kettot meg kene elozze, hogy a programozo szandeka vilagos legyen a kodbol. (Meg szerintem ha ez rendben van, akkor mar mechanikusan a zarojelpar highlight segitsegevel ellenorizheto, hogy ki hol van bezarva, es az ott jo helyen van-e.)egyetértek veled!
Egyébként én magam kiteszem mindig a { } jeleket, még akkor is ha csak egyetlen utasítás van az adott blokkban (mint pl itt az if szerkezet).
Valahogy így:for(int i=0;i<MAX; i++) {
if (i>MIN) {
System.out.println("Alma");
} else {
System.out.println("Körte");
}
} -
#74220800
törölt tag
A tomb valtozojat deklaraltad, de a tombot nem hoztad letre. Igy aztan az elemeire se tudsz hivatkozni (se jobbertekkent, se balertekkent amugy).
double[] xo = new double[(r-l)*10+1];
Muszaj igy, mert ott egesz tipusu kifejezes kell, a 10-zel szorzassal nem lepsz ki belole, ellenben a 0.1-gyel osztassal mar igen...
Ja es ugyel<=rellenorzese utan csak mindez, ha nem akarsz meglepeteseket.Ezt is csak kis trükközéssel engedi nekem:
int u= (int) (r-l)*10+1;
es ez lesz a tömb hossza.
-
Taoharcos
aktív tag
Nezd, ket lehetoseg van.
1. a ceg elszamolta magat - szerinted erre mennyi az esely?
2. amennyibe kerul, annyit kapsz a penzedert
Lehet, hogy tkp. csak a vizsgaert fizetsz, kapsz ne'mi amugy is megtalalhato tavoktatos tananyagot, aztan kuzdj meg vele. Epp nemreg linkelte'k be egy masik topikba a cikket a ket masik magan programozokepzesrol, ahol senior programozo szintu emberek - annak megfelelo fizetesert persze! - foglalkoznak a csoporttal, akiknek tanulasi helyet, valos orakat (bar inkabb gyakorlatiakat), konzultaciot biztositanak -- szoval nem tud olcso lenni az a fajta kepzes, tehat olcso kepzes me'g annyit se ad. (Mert nyilvan nem egyetemi szintu tudast lehet osszeszedni erettsegirol indulo bolcsesz iranyultsagunak.)
+1. esetleg a kesobbi elhelyezesedert a kozvetitotol kapott penz lehet me'g benne, de ez tuti nem ez a nagysagrend, ami a kulonbsegKöszönöm. Igazán nekem is ez volt az érzésem, kellett egy kis megerősítés.
-
fatal`
titán
Pedig ha nem is pont java, de programozas temaba elegge illik, hogy melyik kiosztasnak mi az elonye. En is parhuzamosan kettot nyuzok, ha muszaj ekezet pl. doksi, akkor az y-z csere miatt a 101 magyart hasznalom, de alapbol angolt (eleg oreg vagyok ahhoz, hogy emailbe se volt tanacsos ekezetet irni, es folyekonyan olvasom az ekezet nelkuli magyart, ezt szoktam meg). Az tuti, hogy nem tennek ki minden sorvegi pontosvesszot altgr-rel... foleg 10 ujjas gepeles mellett azok a kombinaciok!
Mondjuk nyelvenkent van elteres, pl. python eseten kevesebb ilyen egyertelmuen csak idegesitoen elerheto karakter hasznalata szukseges.Én tíz ujjal gépelek, elég gyorsan (5-600 cpm körül), és pont emiatt használom fejlesztéskor is a magyart, mert egyszerűen ezt szoktam meg. Biztos hamar megszoknám az angolt is, de nincs rá energiám, úgyhogy őrült vagyok

-
emvy
félisten
Pedig ha nem is pont java, de programozas temaba elegge illik, hogy melyik kiosztasnak mi az elonye. En is parhuzamosan kettot nyuzok, ha muszaj ekezet pl. doksi, akkor az y-z csere miatt a 101 magyart hasznalom, de alapbol angolt (eleg oreg vagyok ahhoz, hogy emailbe se volt tanacsos ekezetet irni, es folyekonyan olvasom az ekezet nelkuli magyart, ezt szoktam meg). Az tuti, hogy nem tennek ki minden sorvegi pontosvesszot altgr-rel... foleg 10 ujjas gepeles mellett azok a kombinaciok!
Mondjuk nyelvenkent van elteres, pl. python eseten kevesebb ilyen egyertelmuen csak idegesitoen elerheto karakter hasznalata szukseges.Most probalok beszerezni egy ilyet:

-
tick
aktív tag
1. Elvi szinten nagyon nem ertek egyet az ilyen modon torteno AES kulcs megadassal (gyakorlatilag 256^16 helyett kb. 80^16 kulcsot "engedsz meg" - klavirol elerheto kis/nagy betuk, szmaok, gyakoribb jelek), ezzel kapasbol mar matematikailag is tobb mint 8 nagysagrenddel csokkented a lehetosegeket... de ha az emberek jelszoadasi szokasait nezzuk, kb. beepited a rendszerbe a betoresi pontot a human tenyezovel).
2. Mi az oka annak, hogy a char array-t string tombbe masolva akarod kiegesziteni? Nem latom a koncepciot.
Sot azt sem igazan, hogy minek jon be a char array... te egy 16 hosszu stringet akarsz, akkor ha nagyobb, akkor subString, ha kisebb, akkor meg mondjuk (ha nagyon egyszeru/fapados kodot szeretnel) ciklusban hozzaadsz amig nem jo a hossz egy "c"-t.
Vagy me'g egyszerubb ha mindkettot egy lepesben intezed el... azaz a bejovo stringhez alapbol hozzaadod azt a fix stringet, amiben 16 db 'c' van, es veszed a subString-gel az elso 16 karaktert. Ez mindharom esetre egyetlen utasitassal visszaadja az altalad va'gyott tipusu kiegeszitest.szerk. kellett nekem ennyit gepelni

Köszönöm szépen a választ pont így oldottam meg végül a 2-es pont problémáját.

Nem házi feladat, de nem is komoly dolog. Szükséges valahogy tárolnom az user-pass kombót. Nem szerettem volna plain textként így jött az AES + bináris amit egy egyéni key/pin véd. Ha valaki elég ügyes hogy kiszedje/feltörje, akkor sincs kockázat. -
tick
aktív tag
AES128 bit kulcsot szeretnék generálni String input alapján. A String hossza bármi lehet. A függvény a következőt csinálná:
-Ha a String 16 karakter akkor nincs teendő
-Ha több mint 16 karakter akkor ArrayUtils.subArray(key.toCharArray(), 0, 16) majd ezt a végén vissza String-gé
-Ha kevesebb mint 16 karakter (N hosszú), akkor key.toCharArray(), egy új CharArray-be N-ig a key értékei, azon felül pedig egy karakter. A példában "c".Így minden esetben 16 karakter hosszú kulcsot kapok. Ez működik is (String.valueOf-fal). Viszont nem 128 bit lesz a végeredmény.
16 vagy több karakterrel működik hibátlanul. A probléma akkor keletkezik ha ki kell egészíteni plusz karakterekkel: Invalid AES key length: 28 bytes
Jelenleg sysout esetén nem is a key-t kapom meg, hanem a referenciáját.String pin = "1234";
...
...
// így fut le ha 16-nál rövidebb a pin
String[] keyArr = new String[16];
pinArr = pin.toCharArray();
for(int i=0;i<pin.length();i++) {
keyArr[i] = String.valueOf(pinArr[i]);
}
for(int i = pin.length();i<16;i++) {
keyArr[i] = "c";
}
key = String.valueOf(keyArr);
System.out.println(key); // String helyett reference
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, aesKey); // java.security.InvalidKeyException: Invalid AES key length: 28 bytes
byte[] encrypted = cipher.doFinal(password.getBytes()); -
M_AND_Ms
veterán
Ezzel mi szivtunk mar... foleg akkor, ha a 32 bites frissebb verzios volt, mint a 64 bites, emlekeim szerint mas volt az eredmeny total commanderbol inditva ugyanazt, mint a telepitett ikonjarol. (TC-bol azert szerette'k a userek inditani, mert ha a TC adminkent futott - eleve ugy tette ki az asztalra az ikont -, akkor az abbol inditott jre is, es tudott akar "sajat maga ala" file-okat masolni; mig a normal userkent inditott, akkor is ha maga a user admin jogu, a jre csak normal user joggal futott, es nem tudott a vedett konyvtarakba file-t letrehozni.) Anno a regebbi kod az uj jre-vel azon hasalt el, hogy bejott a nemzeti beallitasok kezelese (tizedesvesszo a pont helyett), es az egyik kollega egy tortszamokbol allo listat (egyszeru gps koord.) a vesszo mente'n split-elt...
Mint írtam ez csak attól függ hogy melyik java.exe fog elindulni. Az meg nem a jre, hanem az oprendszer dolga. Olvass utána, hogy miképp történik ez: aktuális könyvtár, PATH, stb.
-
Aethelstone
addikt
-
WonderCSabo
félisten
Mérnök informatikusként tanultam ezt. Igen, ez alapvetően fizikához kell, csak nem mérnök infósoknak.
Egyébként sztem rohadtul szétoffoltuk a topikot, szóval ezt máshol kéne folytatni.
-
Sk8erPeter
nagyúr
Azert en csak reszben ertek egyet. Valoban tanitanak sok hulyeseget is, feleslegeset, vagy nem jo modon, de muszaj az elmeleti megalapozas, akar programiras nelkul. A program, a nyelv csak egy eszkoz, megoldani a feladatot kell eloszor.
Egy (valos!) bar regi eset: m.tarsak jonnek (2 honap kulonbseggel ketto kulonbozo projektnel, csak a szomszed szobaban volt a masik), hogy
- van egy csomo, valtozo hosszu stringunk, de a halmaz csak nagyon ritkan valtozik
- nincs prefix-mentesseg
- jonnek rohadt gyorsan az input stringek, es meg kene mondani, hogy a halmaz mely eleme az, amelyik a leghosszabb prefixe az inputnak.
A kerdesuk mindket esetben ez volt: milyen sorbarendezesnek hivjak azt, amiben ezt a leggyorsabban (valamilyen algoval) meg tudna'k talalni, es az milyen muveleti igenyu.
Az intelligens telefonkozpontok szolgaltatas + parameter szetvalasztasa peldaul egy ilyen feladat.
Ha nem tanitananak (pontosabban: akinek nem tanitottak) algo+adatszerk. oran ilyesmit, me'g guglival se biztos hogy ratalal az optimalis megoldasra a fenti kerdessel.Na várj, sztem senki nem mondta, hogy nincs szükség komoly elméleti alapozásra (persze ezt is ésszel kéne, gyakran ez sem elmondható), inkább arról van szó, hogy először meg kéne egyáltalán hozni az egész programozáshoz a kedvedet, nem pedig elvenni azt (akár egy egyetemi/OKJ-s/akármilyen képzésről van szó, akár egy könyvről), értelmes módon kellene vegyíteni a gyakorlati alapismereteket az elméleti háttérrel, de valahogy ez a legtöbbször átcsap abba, hogy kőkeményen nyomatjuk az elméleti bullshitet, hogy legyen mit jól számonkérni, aztán inkább csak úgy mellesleg vannak gépes laborok is, ahol ledarálják, ami kell (elavult eszközök rulez), ha nincs előképzettséged, így jártál, aztán mennek a következő anyagra, csak pörgessük ki a kötelező számonkérhető anyagot. Természetesen ettől még vitathatatlan, hogy saját szorgalom nélkül úgysem fog senki megtanulni programozni, de nem mindegy, hogyan lökdösnek előrébb, vagy csak tömik az agyadat olyannal, amitől csak összevisszaság lesz a fejedben. Ahogy észrevettem, ez nagyon általános probléma.
BME-n azóta szerencsére látok némi javulást az elsősöknek leadott anyagban, ahogy nézegettem a honlapokat. Amikor én jártam prog1-re, elég borzalmas volt a helyzet. Amúgy a kedvencem az volt, amikor az előadó a perifériákról beszélt, hogy hű de jó, hogy van a billentyűzet, meg az egér, 1 perc múlva meg egy C-ben írt kódot mutogatott.
-
WonderCSabo
félisten
Azert en csak reszben ertek egyet. Valoban tanitanak sok hulyeseget is, feleslegeset, vagy nem jo modon, de muszaj az elmeleti megalapozas, akar programiras nelkul. A program, a nyelv csak egy eszkoz, megoldani a feladatot kell eloszor.
Egy (valos!) bar regi eset: m.tarsak jonnek (2 honap kulonbseggel ketto kulonbozo projektnel, csak a szomszed szobaban volt a masik), hogy
- van egy csomo, valtozo hosszu stringunk, de a halmaz csak nagyon ritkan valtozik
- nincs prefix-mentesseg
- jonnek rohadt gyorsan az input stringek, es meg kene mondani, hogy a halmaz mely eleme az, amelyik a leghosszabb prefixe az inputnak.
A kerdesuk mindket esetben ez volt: milyen sorbarendezesnek hivjak azt, amiben ezt a leggyorsabban (valamilyen algoval) meg tudna'k talalni, es az milyen muveleti igenyu.
Az intelligens telefonkozpontok szolgaltatas + parameter szetvalasztasa peldaul egy ilyen feladat.
Ha nem tanitananak (pontosabban: akinek nem tanitottak) algo+adatszerk. oran ilyesmit, me'g guglival se biztos hogy ratalal az optimalis megoldasra a fenti kerdessel.Nekem nincs is bajom az algo adatszerkkel, sőt az egyik kedvenc tantárgyam. (annyira gyak, hogy demonstrátor vagyok belőle azóta
). Ez alaptudás. Nekem pl. a Lebesque integrállal van problémám. 
-
caindwan
aktív tag
Tavaly elobb volt, talan azt nezted, csak a donto maradt 2014-re. Most meg most kezdodik.
Keszules sztem feladatok megoldasa. Ellenorzes: googlejam ellenorzi a gyakorlaskent megoldott feladatokat is, a face-nel meg azt csinaltam, hogy letoltottem egy szimpatikus elfogadott (alt. azonos nyelvben irt, van sokszor java-s elol is) megoldast, es lefuttattam, azzal az eredmennyel vetettem ossze az enyemet siman TC osszehasonlitassal. Amig az nem egyezik, addig csiszolj az elokeszitett outputodon.
A face-nel egyre vigyazz amit konnyu rontani: sok a modulo N szamolas, es ott ugye NEM lehet osztani! Az osztas az csak ugy megy hogy szorzas az inverzzel, ha ilyen a feladat akkor nyilvan N az egy p prim lesz, es akkor a x^(p-1)=1(mod p) miatt szamolnod kell az x^(p-2)-t (akar elo is keszitheto minden x-ra, ha olyan a feladat, ez is jo ha keznel van kesz kodkent). A szamok maximuma altalaban 2^30 korul vannak, hogy a szorzatuk is beleferjen a signed 32 bitbe.
Amugy a megoldasokat amugy is van hogy erdemes megnezni, foleg ha nem jossz ra, mi lett volna az algo (de ez nem a quali alatt lesz).x^(p-2) Ez XOR-t jelent?
-
caindwan
aktív tag
Tavaly elobb volt, talan azt nezted, csak a donto maradt 2014-re. Most meg most kezdodik.
Keszules sztem feladatok megoldasa. Ellenorzes: googlejam ellenorzi a gyakorlaskent megoldott feladatokat is, a face-nel meg azt csinaltam, hogy letoltottem egy szimpatikus elfogadott (alt. azonos nyelvben irt, van sokszor java-s elol is) megoldast, es lefuttattam, azzal az eredmennyel vetettem ossze az enyemet siman TC osszehasonlitassal. Amig az nem egyezik, addig csiszolj az elokeszitett outputodon.
A face-nel egyre vigyazz amit konnyu rontani: sok a modulo N szamolas, es ott ugye NEM lehet osztani! Az osztas az csak ugy megy hogy szorzas az inverzzel, ha ilyen a feladat akkor nyilvan N az egy p prim lesz, es akkor a x^(p-1)=1(mod p) miatt szamolnod kell az x^(p-2)-t (akar elo is keszitheto minden x-ra, ha olyan a feladat, ez is jo ha keznel van kesz kodkent). A szamok maximuma altalaban 2^30 korul vannak, hogy a szorzatuk is beleferjen a signed 32 bitbe.
Amugy a megoldasokat amugy is van hogy erdemes megnezni, foleg ha nem jossz ra, mi lett volna az algo (de ez nem a quali alatt lesz).
Jó sok dolog után kell néznem még a verseny előtt.. fuhhh. Nézegettem előző feladatokat is és megoldásokat is. Érdekes látni mások, hogyan csinálják meg.
-
caindwan
aktív tag
Az idopontot nem ertem, face pont egy het mulva kezdodik, gugli aprilis.
Ha akarsz nevezni, csinalj meg elore olyan kodreszleteket, amiben meg van csinalva a beolvasas, soronkent is tokenizalva, minden adatelem egyetlen elem parseXXX-evel elerheto legyen; a kiiras a kert formatum szerint amennyi fix belole (lehet stdout-ra ha gyorsan tudod bemasolni, cask akkor ne sout-tal debug-olj), csinalj mert tuti sokszor kell arraylist of integer -re valami megoldast, valamint halmaz is kellhet, ilyesmi. (En most pont googlejam-ezek pythonban, de ugyanugy erdemes nemures file-lal indulni.) A quali nem ve'szes, de a kesobbi, 4 ora es rovidebb forduloknal nagyon sokat szamit, hogy mar elore legyen minden feladathoz megcsinalva ez, a konyvtar ahova szorod az inputokat es ahonnan toltod fel az outputot, meg a kodot (en tavaly ezt ket kulon kvt nagyobb melysegebe tettem, cask mindig browse-olgatni kellett oda-vissza, nem praktikus hiaba didaktikus)Akkor elnéztem a dátumot..

Köszönöm! Először fognék ilyen versenybe, sejtelmem sincs, hogyan működik, de megpróbálom, valahol elvégre el kell kezdeni 
-
caindwan
aktív tag
Mire gyakorolni?
A prog. versenyek beugro [qualification] forduloi altalaban csak ne'mi algoritmikus gondolkodast es par egyszerubb adattipus hasznalatat igenylik, kulcsszavak face hackercup, googlejam, ch24 [ez mar kevesbe], de mindbol tobb evnyi archivum elerheto. Ha ennel alapabb [egy-egy technikas] kellene, akkor tankonyvi feladatok.
[Igen, a versenyekre nem a java a legjobb, de tapasztalatbol mondom, hogy kis elokeszitett kornyezet mellett nem is annyira rossz.]Szerk. Kiberfeladatok vagy hasonlo cimu 'csikos' konyv, de meg csak beleneztem, szintet nem tudok.

a facebook-os és a google jam is tetszik
Egy kis gyakorlással lehet nevezek is, szerencsére az előbbi csak szeptemberben van. A feladataik pedig nagyon is megfelelnek.
a ch 24-ben is vannak jó feladatok. A könyvet sajnos nem találtam elektronikus formában, marad csak az alternatíva 3D 
-
axioma
veterán
Mire gyakorolni?
A prog. versenyek beugro [qualification] forduloi altalaban csak ne'mi algoritmikus gondolkodast es par egyszerubb adattipus hasznalatat igenylik, kulcsszavak face hackercup, googlejam, ch24 [ez mar kevesbe], de mindbol tobb evnyi archivum elerheto. Ha ennel alapabb [egy-egy technikas] kellene, akkor tankonyvi feladatok.
[Igen, a versenyekre nem a java a legjobb, de tapasztalatbol mondom, hogy kis elokeszitett kornyezet mellett nem is annyira rossz.]Szerk. Kiberfeladatok vagy hasonlo cimu 'csikos' konyv, de meg csak beleneztem, szintet nem tudok.
A konyv most mar a kezemben, Dennis E. Shasha: Kiberrejtvenyek, Typotex, 2003, nemreg de olcsokonyves helyrol szereztuk, viszont ez nem biztos h. kodolas, kellhet trukk vagy matek.
-
floatr
veterán
OK, amennyiben exception-nel kiegeszited a null helyet, akkor igaz. Mas kerdes, hogy egy egysoros try-catch csak az IllegalArgumentException elkapasara (mondjuk) mennyire felelsleges bonyolitasa (=rosszabb olvashatosaga) a kodnak. Ha visszaterunk az adatsor kiertekelesre, ahol jonnek az ertelmes adatok 1..99, a hiba meg a -1, es az osszes feladat mindossze az atlagolas, akkor inkabb irnek egy if-et (persze nem a -1-re hanem megfelelo beszedes konstansra), hiszen a cel nem az hogy lealljunk es tovabb ne is csinaljuk a lekerdezest, hanem a jelolt adatot ne vegyuk figyelembe, kezeljuk mashogy (akar az meg egy statisztikai szamlalot novel). Ezt hiaba lehet leirni exception-nel is, en erosen agyuval verebre esetnek ereznem.
Sot, az exception eroltetese a hibajelzo visszateresi ertekkel szemben szerintem csokkenti a kod fuggvenyekre bontasi hajlandosagat. Azt elismerem, hogy igy meg a kepernyore is kikerulo nullpointerexc.-k jellemzoek tulsagosan... az arany kozeputat kene megcelozni.Alapvetően üzleti logikára koncentrálok a legtöbbször. Nekem kifejezetten jó, ha nullptr van, mert az exception megszakítja a tranzakciókat. Ha optional-t használnék akkor egy if-ben kéne eldobni a kivételt. A kapcsolódó rétegben try-catch néha szokott lenni, de legtöbbször azt is rábízom a konténer hibakezelésére, amit delegálok egy konkrét komponensnek. Ehhez képest az optional csak gurigázás a pamutgombolyaggal

Nem mondom, néha jobb választás lehet, mivel a kivételek kezelése nem feltétlenül cél. Ilyenkor a mechanizmus teljesítménye jobb tud lenni egy if-else megoldással, de ez inkább szépészeti megoldás. Ha valakinek ez problémát okoz, akkor el tudom képzelni ahogy egy merészebb JS frameworktől kifolyik a szeme.
-
Aethelstone
addikt
A listas peldaddal nem ertek egyet. Mert lehet, hogy ervenytelen, lehet hogy ervenyesen ures, es lehet hoyg nem ures. Ha az ervenytelent az uressel jelzed, akkor nem tudod megkulonboztetni a vegen, hogy ez most egy hasznalhato adatsor vagy sem... (mint amikor rarakjak egy meresi adatsorra a -1 -et ervenytelennek, de amikor az utolso 100 adatbol statisztikat kell csinalni, bamban azt is beleatlagoljak... lattunk ilyet kiszallitott kodban, nem java volt, de nem kis rendszer resze). Termeszetesen a listat is tovabb lehet fejleszteni, hogy tudja magarol hogy ervenyes-e, de azzal csak technikailag szuntetted meg a null-t, az ertekadas le fog futni ervenytelen ertekre is - ott is ahol nem figyelsz ra, mert nem lathatoan jon vele az info, hogy itt me'g hiba is lehet, vagy ez mar lecsupaszitott tuti ertek. Az meg nyilvan abnormalis, hogy minden egyes hasznalat elott megprobalod kicsomagolni.
Jelzem hogy en nem akarom a null-t szamuzni mindenaron, csak megertem azt a fajta logikat is, es nem tartanam problemanak atterni ra, kicsit jobban absztraktalva lenne mar a fuggveny megirasakor, hogy van-e hibaag. Vagyis belatom, hogy meg lehetne azt nagyon jol es megszokas utan kenyelmesebb programozast biztositoan csinalni. (Nagyon absztraktul nezve ez kivalthatja az exception dobasi rendszert is, a visszateresi ertekbe is becsomagolhato, mondhatnank csak az exception vagy a valos ertek lehet benne, a try-catch meg oly mindegy hogy honnan kihamozott adat alapjan mukodik.)Üzleti logika szempontjából az üres lista pont annyit ér, mint a null referenciával rendelkező. Viszont üres lista esetén le tudod spórolni az if (list!=null&&!list.isEmpty()) vizsgálatot egy sima list.isEmpty()-vel, sőt iterátor for ciklusban sem fog szétszállni nullpointerexceptionnal.
Egyébként jelen pillanatban egy kézenfekvő, bár kurvára idegesítő megoldása lenne a problémának, ha a nullpointerexception nem runtime lenne, hanem checked. Persze, az összes, jelenlegi kód összefosná magát tőle

-
Aethelstone
addikt
Szerintem itt elvi uton van elteres; a lenyeg nem a case-en van, hanem hogy case nelkul nem tudsz erteket adni a celvaltozonak kozvetlen -- azaz hogy tevedesbol se tudod leirni, hgoy enOsztalyom=enFuggvenyem() es utana rad van bizva, hogy case-elsz vagy sem null miatt, hanem a visszateresi erteked muszaj vizsgalnod, azzal tudod kiszedni a valodi erteket belole.
Tervezési minta kérdése.
Pl. ha List<?> a visszatérési típus, akkor ugyan fektessük már le, hogy ha üres, akkor nem null, hanem pl. new ArrayList<?>() és így tovább. Vagy pl. default értékek használata a privát propertyk esetén és sorolhatnám.
Sokan nem szeretik az ilyen kvázi felesleges tervezési mintákat, hanem a compilertől várják, hogy a slendrián kódokat tegye helyre...alapvetően sok igazságuk van, de ugyan, az emberi hülyeséget miért kellene már javítani?
Kedvencem egyébként, amikor pl. C-ben vagy Pascalban szól a compiler, hogy hiányzik a ";". Bassza meg, akkor rakja oda, ne dumáljon, az miért nem zavar senkit?

Az a baj, hogy a konkrét problémában valamit mindenképpen vizsgálni kell. A null az valóban rendszeridegen, egy olyan kvázi mittoménmilyen érték, aminek semmi köze az üzleti logikához.
-
Cathfaern
nagyúr
Szerintem itt elvi uton van elteres; a lenyeg nem a case-en van, hanem hogy case nelkul nem tudsz erteket adni a celvaltozonak kozvetlen -- azaz hogy tevedesbol se tudod leirni, hgoy enOsztalyom=enFuggvenyem() es utana rad van bizva, hogy case-elsz vagy sem null miatt, hanem a visszateresi erteked muszaj vizsgalnod, azzal tudod kiszedni a valodi erteket belole.
Jap. Jelenleg is vizsgálható a null probléma, nem ez a kérdés. Hanem hogy a fordító kényszerítse ki, hogy vizsgálva legyen, ne a programozóra legyen bízva.
-
plaschil
aktív tag
-
Aethelstone
addikt
-
0xmilan
addikt
-
WonderCSabo
félisten
Hat lassan jobban jarnal ket egyutt karbantartott arraylist-tel... veletlenszam maximuma es a szo kiragadasa szam alapjan egyszerubb, ha nem torolsz soha akkor oly tok mindegy, hozzafuzni egyutt kell, ennyi. Nem tudom, hogy a hatterben mivel dolgozik a hashmap, de ha van benne valami onszervezo fa, akkor azt is el tudnam kepzelni, hogy a sorszamok veletlenszerusege ellenere a kulonbozo atalakitos trukkokkel igy kapott szavak nem lesznek eleg veletlenszeruek.
A szo eleji nagybetut majd illene ignoralni ellenorzeskor...Nem tudom, hogy a hatterben mivel dolgozik a hashmap, de ha van benne valami onszervezo fa
Ajajajajj... HashMap-ben hashtábla van.
-
bucsupeti
senior tag
-
bucsupeti
senior tag
-
Aethelstone
addikt
Igazabol en mar tegnap a linkelt magyarazat alapjan rajottem, hogy hulyeseget akartam. Raadasul csak elvi szinten erdekelt volna, (nyilvan minimalis modositas eseten me'g beleraktam volna), hogy ilyet miert nem lehet, es ahhoz csak siman azt kellett volna atgondolnom, hogy hogyan fogom azt a fuggvenyt meghivni...
Tokeletesen eleg lesz az, hogy az ososztalyba minden uj generacional boviteni kell azt a fuggvenyt, ami lekeri a generaciohoz tartozo hosszt (ez viszont kell, mert nem csak generaciok vannak, hanem felette tipusok is, csak ezt nem akartam belebonyolitani). Tovabb nincs ertelme kuzdeni vele, plane hogy az sem segiti jobban a karbantartast, ha absztraktabb is esetleg.
Aethelstone: neked is koszi, hogy probaltad ertelmezni, de az derult ki hogy en vagyok a problema
Egyebkent meg volt masik iranyban kerdezesnel olyan valasz is, hogy o az ilyenekert mondja hogy a generalt kod az igazi, mert akkor megtervezed az adatstrukturat amit modellezel, es akkor ezt az esetet beleirod a generalasba... na ez megint olyan, amit tuti hogy itt nemcsak hogy felesleges, de szinte alkalmatlan is, a programozo tok mashogy fogalmazza meg a feladatot mint ahogy eddig szokta (ergo gyakorlott benne, a kodirasban), plusz bizzon meg a generalasban (mikozben mint tudjuk minden rendes programban van legalabb egy elagazas, egy ciklus, es egy bug...)
Egyebkent meg volt masik iranyban kerdezesnel olyan valasz is, hogy o az ilyenekert mondja hogy a generalt kod az igazi, mert akkor megtervezed az adatstrukturat amit modellezel, es akkor ezt az esetet beleirod a generalasba
Annotációk!!!!
-
Aethelstone
addikt
Mert mikor me'g nincs belole peldany (mivel a letrehozashoz szukseges a generaciora jellemzo hossz) kellene mukodjon. Meg elvi szinten is oda tartozik. Most egyebkent az abstract ososztalynak van generaciot varo static gettere a hosszra, az ke'ri le a megfelelo osztaly statikus fuggvenyet. (Bar ott mar mind1, akar a konstansokat kozvetlen is beirhatnam oda.) Azt hianyolom, ami az abstract fuggveny vgy interface lenyege lenne, hogy ha barki kesobb ujat letrehoz, akkor lassa hogy kotelezo ezt is definialnia.
Azt hianyolom, ami az abstract fuggveny vgy interface lenyege lenne, hogy ha barki kesobb ujat letrehoz, akkor lassa hogy kotelezo ezt is definialnia.
Ezt úgy hívják, hogy fejlesztői dokumentáció.
Egyébként ha tényleg marhául el akarod bonyolítani, csinálhatsz saját annotációt pl. és azt még példányosítás előtt Reflectionnal tudod vizsgálni....bár a problémát, amit felvetettél, én sem értem 100%-ban. -
Szmeby
tag
Elolvastam, a logikajat ertem. Vegulis ha nem tudom elkerni a generaciohoz tartozo classt magat (ezt is max. egy map-pel esetleg tombbel lehetne, de akkor mar egyszerubb egy switch-es getter az absztraktban), akkor ugyse tudom a static-jat hivni... szoval marad igy, tulkepp hasznalati szempontbol hulyeseget akartam, mert en csak a karbantartasra koncentraltam.
Nem nagyon értem, hogy mi lesz ebből, de a statikus metódus helyett nincs jobb megoldás?
Azt írod, hogy vannak adatok, amelyeknek már a memóriadarabka (?) példányosítása előtt rendelkezésre kell állnia.
Na de ezeket az adatokat egy egyszerű leíró osztályban is összegyűjtheted, nem? Csinálsz egy immutable POJO-t, benne a méret meg amit akarsz, és teszemazt memóriadarabka konstruktor argumentumaként beküldöd a már adatokkal feltöltött leíró objektumot. Amit aztán a példányok kedvükre használhatnak.
A konstruktor argumentum miatt kötelezővé válik... már ha nincs másik konstruktor, ami viszont nélküle is elvan
.Vagy ha nem akarod "szennyezni" a konstruktort nem oda való argumentummal, esetleg már osztálybetöltéskor szükséged van az infóra, akkor be is injektálhatod ezt a leíró objektumot egy statikus mezőre. Készíthetsz hozzá egy factory-t, ami valami alapján tudja, hogy melyik leírót példányosítsa, hogyan inicializálja, durván el lehet bonyolítani a dolgot.

Bár akkor megint ott vagyunk, hogy hogyan kényszeríthető ki a kötelezőség. Ahh, nem bírom a statikus dolgokat, sok a kötöttség.Persze lehet, hogy hülyeséget beszélek, mint mondtam, nem értem a problémát.
-
axioma
veterán
Igen, bocs, pongyola voltam, a leendo programozonak aki uj generacioju osztalyt lesz kenytelen bevezetni, kapasbol lassa hogy ez mandatory. (Vagy ha en leszek az akkor en is
ha feledekeny lennek 10 ev mulva...)
De vegulis az adott eset inkabb csak azt mutatja, hogy eletszeru az igeny, elvi szinten erdekel. Mindjart nezem a linket.Elolvastam, a logikajat ertem. Vegulis ha nem tudom elkerni a generaciohoz tartozo classt magat (ezt is max. egy map-pel esetleg tombbel lehetne, de akkor mar egyszerubb egy switch-es getter az absztraktban), akkor ugyse tudom a static-jat hivni... szoval marad igy, tulkepp hasznalati szempontbol hulyeseget akartam, mert en csak a karbantartasra koncentraltam.
-
Szmeby
tag
Mert mikor me'g nincs belole peldany (mivel a letrehozashoz szukseges a generaciora jellemzo hossz) kellene mukodjon. Meg elvi szinten is oda tartozik. Most egyebkent az abstract ososztalynak van generaciot varo static gettere a hosszra, az ke'ri le a megfelelo osztaly statikus fuggvenyet. (Bar ott mar mind1, akar a konstansokat kozvetlen is beirhatnam oda.) Azt hianyolom, ami az abstract fuggveny vgy interface lenyege lenne, hogy ha barki kesobb ujat letrehoz, akkor lassa hogy kotelezo ezt is definialnia.
"Azt hianyolom, ami az abstract fuggveny vgy interface lenyege lenne, hogy ha barki kesobb ujat letrehoz, akkor lassa hogy kotelezo ezt is definialnia."
Itt most arról beszélsz, hogy egy leszármazott osztálynak kötelező implementálnia az ősben absztraktként jelölt metódust? Vagy valami mást értesz "létrehozás" alatt?És ezt akarod static metódusokkal kivitelezni?
Ez esetben az overriding és hiding közti eltérés a magyarázat a kérdésedre.
-
WonderCSabo
félisten
Mert mikor me'g nincs belole peldany (mivel a letrehozashoz szukseges a generaciora jellemzo hossz) kellene mukodjon. Meg elvi szinten is oda tartozik. Most egyebkent az abstract ososztalynak van generaciot varo static gettere a hosszra, az ke'ri le a megfelelo osztaly statikus fuggvenyet. (Bar ott mar mind1, akar a konstansokat kozvetlen is beirhatnam oda.) Azt hianyolom, ami az abstract fuggveny vgy interface lenyege lenne, hogy ha barki kesobb ujat letrehoz, akkor lassa hogy kotelezo ezt is definialnia.
Esetleg miért nem szervezed ki ezt egy külön osztály hierarchiába akkor.
-
WonderCSabo
félisten
Elvi kerdesem van.
Olyan szituacioba botlottam, hogy logikus lenne egy statikus de absztrakt fuggvenyt definialni, amit ugye nem lehet, es interface se lehet statikus fuggveny. A konkret eset ugy szol, hogy memoriadarabkakat leiro osztalyaim vannak (a darabok kiosztasa tulkepp egy interface koztem es az embedded program kozott, egy flash-be kerul bele). Namarmost a tarolasnak vannak generacioi, es igy egyes kozos tulajdonsagok, pl. a darab hossza fugg(het) a generaciotol, de azon belul peldanytol mar nem. (Egyelore nem tobzodunk bennuk, mert nincs me'g kint a termek azaz csak egyet hasznalunk, de nyilvan altalnosan kene felepiteni, mert kesobb - hosszu eletciklusu termek - tuti lesz ra pelda.)
A statikussag meg azert kell, mert bizonyos infokat - mint pl. a hossz - vagy a kezelotol, vagy a memoriabol mas helyrol (az fix) megkapott generaciobol kell tudnom me'g mielott peldanyt hozok letre, pl. hogy mekkora reszt kell kiolvasnom mashonnan, vagy letrehoznom ujkent, es ezen adatokkal johet csak letre peldany mar eleve kitoltve.
Nyilvan az megvan, hogy definialom nem absztraktkent, es vagy a jelenlegi generacio adataval ter vissza, vagy dob egy exceptiont, utobbival legalabb kesobbi karbantartaskor is ha nem is fejlesztesi, de legalabb elso rafutasi esetnel kibukik, hogy muszaj override-olnia [velhetoen mas fogja mar csinalni]. Illetve azt is lehet, hogy az absztrakt osztalynak csinalok egy olyan gettert, ami a generaciotol fuggoen meghivja az adott statikus fuggvenyt, ez me'g labilisabb bovitesi hibara nezve. Vagy persze lehetne me'g ugy inditani, hogy dummy peldanyokat teszek le csak azert, hogy tudjam oket kerdezni, de ez mar se nem szep, se nem karbantartasbiztos. Nyilvan az egy dolog, hgy dokumentacioban meg lehet emlekezni mindezen feltetelekrol (kodba irt komment es kulso fejlesztesi doksi egyarant), ha igy nezem nem egy kardinalis problema, de mint elvi kerdes izgat. Sot, igazabol jo lenne megertenem, hogy mi oka van a static abstract tiltasnak (mert ami egyetlen eszembe jut, hogy ne letezzen olyan static ami nem hivhato meg, arra ott az ellenpelda az abstract osztaly letez(het)o constructora, me'g ha nincs is odairva ele a static elotet, de ott tudja kapasbol hogy nem hivhato ra a peldanyositas).De miért ne hagyhatnád el az static-ot?
-
-v-
addikt
Igazabol eleg nehez megmondani, hogy mit kene tanitani ahhoz, hogy jo programozo legyen aki kijon. Szerintem peldaul annak idejen hianyzott, hogy nem meseltek egy szot sem a verziokezelo meg hibakatalogus rendszerekrol; vagy hogy mi az a kovetelmenykezeles, meg coding standard.
Masreszt meg en 98-ban jottem ki az egyetemrol, java-t csak egy speckoll-on, egy lelkes phd-stol hallgattunk egy fel evet (a C++ meg mint bevez. az oop-be a C-s felev fele volt). Az valtozik, hogy mi a nyelv, de az nem, hogy mi az hogy melysegi kereses vagy verem (nalunk azert ezt egesz jol tanitottak; aztan kesobb voltam demonstrator a gyakorlatan, de az akkori eloado mar kicsit mast rakott a tananyagba). Illetve nalunk nemigen volt csapatmunkas feladat, es pl. nem kellett dokumentaciot kesziteni (ma mar tudom, hogy javult legalabb a szakdolgozatnal az eloiras, pl. kotelezo lett a tesztstrategia es par eredmeny leirasa).Oppenheimer: mernokinfo szerintem az en idomben me'g nem is volt... de szo szerinti mernok nem is akartam volna lenni (nem az elektronok erdekelnek, hanem a magas szintu programnyelvekben alkotas), pont a masik iranybol kozelitettem, a matek absztrakt szintjerol. Amugy akkor me'g jate ttk.
bme-n '87 óta van az info
-
Karma
félisten
De, az fake, szol mar a fejl.korny, hogy ket type mismatch van (merthogy parseInt van a toString helyett, irja is lent vmelyik comment).
Az viszont teny, hogy lehet idonkent talalni erdekes dolgokat. Az egyik m.tarsam kapta feladatul egy korabbi program atvetelet, javitasat. Annak a programozoja minden egyes feluleten megjeleno figyelmezteto ablakhoz kulon szalat nyitott... szegeny mire rendberakta, me'g evekkel kesobb is emlegette.Jó, ez jogos. Az enyém String.valueOffal volt, úgy már fordul

Ma ilyet mutatott az egyik munkatársam, miután feljött a búvárkodásból:
boolean toReturn = isFooOk && isBarOk && isBazOk && ... && isQuuxOk ? true : false;
return toReturn; -
plaschil
aktív tag
Vagy marad a keyset es x.get(e)-vel elkered a map-tol a kulcshoz tartozo part. Nem mondom, hogy ez itt most jobb, de azert ez az alap hasznalati mod. Termeszetesen ha kozben modositgatnad, itt is igaz a concurrent mod.ex. megjegyzes.
amugy ertem hogy ez csak egy pelda, de ha nem egybetus valtozoneveid lennenek, akkor jobban latni lehetne szerintem, hogy ki mivel mit csinal - most en is 2x kellett visszagorgessek ra, sot ha egy het mulva nezed, neked magadnak is vissza kene keresned...Normális változóneveket használok, csak leegyszerűsítettem, hogy ne arra terelődjön a figyelem.
-
WonderCSabo
félisten
Valoszinuleg a konkret alkalmazasban nem relevans, de en itt erosnek talalom ezt a tulaltalanositast. Nem csak azert, mert ugyis a kodot kell valtoztatni, ha valtozik hogy milyen adatbazisokhoz kapcsolodik, az egy release-ben fix lista - legalabbis gondolom. Igy en siman karbantartasi feladatnak tartanam, hogy ha valahogy beesik egy uj, akkor annak letrehozd a neki megfelelo hozzarendelest is a map-ben. Ezzel a megvalositassal nem a kozvetlen leszarmazasi szintre szoritkozik a kod, tehat ha valamiert ugyanazt a db-t kesobb ketfele alosztallyal kezeled akarmiert, akkor ha jol ertem ezzel a koddal vagy elszall - ugyanahhoz ket kulon kulcs! -, vagy sokkal nagyobb karbantartasi igeny lesz az, hogy azoknal mindig visszakasztolva hivd a getHelper-t, plane ha nem csak egy helyen kell.
Masik: ket map ugyanazzal a kulccsal, ez tuti kell? Ha jol ertem, akkor egy alosztalyhoz max. egy ADBM-ed van, tehat neki - nem statikus - member valtozojakent boven eleg lenne a szamlalot tarolni.
Harmadreszt ha ez csak egy kezelo (szinte semmi mem.igeny, es a kapcsolatot ugyis a letezesetol fgtl. zarod - elorebocsatom, az adatbazisos reszhez nem ertek), akkor mi ertelme van a peldanyt kidobni majd kesobb ujra letrehozni?De lehet, hogy valamit nem latok benne ami plusz kell az adatbazisos parhuzamos kezeles vagy ilyenek miatt.
Ez egy proof of concept kód volt.

Egyelőre egy db - egy kezelőosztály, de ez valóban problémát okozna itt.
A két mapet csak belehánytam, a singleton miatt valóban lehetne a counter a példányban.
A példányt ki kell dobni, ennél a cuccnál legalábbis ha már bezártál egy példányt, újból nem nyithatod meg. -
WonderCSabo
félisten
En ugy ertem a feladatot, hogy az ososztaly tudja, milyen alosztalyai vannak, es a kod tobbszoros leirasa az egyetlen problemad. Akkor miert nem csinalod, hogy az ososztalyban egy map-be bedobod a class-hoz a neki rendelt felugyelot, es 1x irod meg a fuggvenyt ami a class-hoz visszakapott cuccost modositja?
(Bocs a pongyolasagert, meg en nem feltetlen tartanam ezt kovetendobbnek, mint a kulon letrehozast, meg lehetne persze tombbel es indexekkel, en csak a te felteteleidhez dobtam be egy szerintem megvalosithato es meg mindig nem tul ronda otletet.)Már világos mire gondoltatok a mapes megoldással. Nost átírtam olyanra, plusz egy kicsi reflection: [link]. Még gondolkozom, hogy melyik a "szebb", a kódismétlés, vagy ez.

-
#39560925
törölt tag
Me'g nem, bar terveztem, de ido nincs most ra igazan (na meg en netbeansben application-t fejlesztek, eclipse-et nem toltenek le emiatt pluszban, meg ra kene kicsit mennem az applet specialitasaira).
Viszont ha te mar bent vagy: a CV - ez is vicces, angol kell amikor itthonra keresnek? -, meg a reklamba beleegyezes az feltetel? Csak hogy mennyire kamu adatokat adjak meg
bar a valos cv egyszerubb lenne, az van. Viszont jelenleg hazai allasbol absz. nem erdekel masik.Én beleegyeztem a reklámokba, de amint jön egy, teszem is rá a spam szűrőt. De talán nem is kötelező azokat bepipálni, csak elég megcsinálni a swipe mozdulatot annál a csúszkánál. Nekem nem esett le időben, hogy miért nem tudok a Regisztráció befejezésére kattintani, ezért pipáltam ki mindent, és csak utána láttam meg a csúszkát. Aztán már lusta voltam kivenni a pipát.

CV-t nem töltöttem fel. Nem hinném, hogy akkora guru lennék másodéves egyetemistaként hogy állásajánlatot kapjak tőlük.
Egyébként már Rájöttem hogy kell a master-slave viszonyt kezelni.
-
Jim-Y
veterán
Na most latszik, hogy el se olvastam a feladatot rendesen. Szoval mea culpa, en azt hittem, hogy ez a tipikus elnevezek 5 member- es fuggvenyvaltozot ugyanolyannak, modositokkal teleszorom, es talald ki, hogy harmadik melysegben eppen melyik lesz az adott esetben ervenyes ertek (ez volt a Mor-St felvetelin, megspekelve azzal, hogy szintaktika helyes-e vagy ha nem hol hibas; ha szintaktika jo akkor forditas hiba nelkul lefut vagy hol hibas, ha lefordul akkor futtatasnal hibat ad es mit, vagy ha nem, mi a vegeredmeny).
Most csak megneztem me'g egyszer, bevallom a transient nekem nem volt meg se'ro'bo'l (mondjuk pont nem foglalkoztam sose objektumok neten atkuldesevel, es nem objektumokat, hanem - nem is feltetlen azonos - xml strukturakat mentunk), de egyetemistakent friss anyagkent azert nem tulzo talan. Az mas kerdes, hogy nem feltetlen tippeltem volna kapasbol jot...
Elnezest a feluletessegert!Jim-Y: azon kivul csak a static erdekes, de az meg nalam surun elofordul, ugyhogy annak csak nagyon figyelmetlenul ugrottam volna be.
Szerintem ebben a példában még a transient a legyegyszerűbben megtippelhető
Főleg ha valaki JPA-zott már valaha. -
Superhun
addikt
En java-ban fejlesztek immar tobb mint 10 eve, elotte volt me'g C is, de nem fogom megoldani, nem erdekel. Ha esetleg egyszer valamire ebbol szuksegem lesz, van egy gugli baratom.
Es barmily meglepo, ettol fuggetlenul nem mondom azt, hogy nem ertek egyet ezzel a feladattal, HA iskolai kornyezetben kerul elo! Egyreszt egyetemen me'g friss az agyad annyira, hogy a magolast meg tudod (es kell) csinalni, masreszt ez emlekezetes lesz, ezekre a modositokra (nem a nevere, hanem a letezesere), sot, hogy miert es melyik reszevel szivtal sokat, na ARRA emlekezni fogsz. Es legkozelebb kerulod...
Igazabol az oktatason egy csomo mindenrol nincs szo, amirol kene, ha a kesobbi hasznalatot nezem (jo, hat en "kicsit" regebben vegeztem igy valtozhatott, de hogy pl. verziokezelo rendszert nem ismertetnek, sot, nem tesznek kotelezove mar az otthon megirando programokhoz... me'g a mas megirta helyette es/vagy lemasolta a netrol is jobban szurheto lenne). De osszessegeben me'giscsak felkeszit ahhoz, hogy kezdokent nekivaghass egy programozoi allasnak. Szerintem!Superhun: Hun?
Marmint rakjak ele. Csak hogy oda ne akarjak menni... (bar sztem itthon en mar ugyse fogok allast keresni, hacsak valami csoda nem tortenik).Akkor legyen senior java coder.
De semmiképp sem várható el ez a szint egy féléves java kurzus után.
Ú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 Tabletek, E-bookok Nyomtatók, szkennerek 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?:))
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Óra topik
- Ubiquiti hálózati eszközök
- Diablo IV
- Okos otthon - Home Assistant, openHAB és más nyílt rendszerek
- Forza sorozat (Horizon/Motorsport)
- Projektor topic
- sziku69: Fűzzük össze a szavakat :)
- Digitális Állampolgárság Program DÁP
- Proxmox VE
- További aktív témák...
- Fujitsu LIFEBOOK E459 I3-8130U 8 GB 256 GB NVMe 15,6" FullHD laptop
- HP ProBook 450 G8 I3-1115g4 8 GB 256 GB NVMe 15,6" FullHD IPS laptop
- Lenovo Thinkpad T14 G2 Ryzen 3 5450u/16GB/256 GB SSD/14"FHD gyári gar
- HP Elite x2 G4 I5-8265U/8 GB RAM/256 SSD/3k IPS TOUCH 2in1 laptop és tablet
- Új MSI 16 Sword WUXGA 144Hz i7-14650HX 5.2Ghz 16mag 16GB 1TB SSD Nvidia RTX 4070 8GB Win11 Garancia
- Xiaomi Redmi Note 14 5G 256GB, Kártyafüggetlen, 1 Év Garanciával
- (TÖBB DARAB, KÉSZLETEN) BIOSTAR / ASROCK DDR4 LGA1151 / ALAPLAPOK
- Apple AirPods Pro 3 USB-C Bontatlan / 27% áfás ár
- Dell Latitude 5420 14" Touchscreen i5-1135G7 16GB 256GB 1 év garancia, 4G LTE OPCIÓ
- Telefon felvásárlás!! iPhone 16/iPhone 16 Plus/iPhone 16 Pro/iPhone 16 Pro Max
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



Azt el is kezdtem átnézni kell e még, de jött a postás, és huss elfelejtettem


![;]](http://cdn.rios.hu/dl/s/v1.gif)


a ch 24-ben is vannak jó feladatok. A könyvet sajnos nem találtam elektronikus formában, marad csak az alternatíva 3D 


