Hirdetés

Keresés

Ú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 h ImageView[] 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. :B

  • lanszelot
    addikt

    View[] viewNr= new View[]{imageView1, ...};
    A tipust javitsd ki.

    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. :B

  • lanszelot
    addikt

    imageView1 =... ahol most van neked, oda tennem a tomb deklaraciot es kozvetlen kitolteset, az onclick meg csak hasznalja
    [nem is nez ki jol, h minden onclick csinal egy pont ugyanolyan tombot - bar nyilvan konkretan itt nem rontja el a performanciat...]

    Hello,
    Azóta azt próbálom megtalálni, hogyan kell ezt
    viewNr[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, hogy viewNr[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;
    ehelyett
    viewNr[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 :R Azt el is kezdtem átnézni kell e még, de jött a postás, és huss elfelejtettem :B

    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

    Reszletkerdes, azert gondoltam hogy automatikusan tortent, mert csodalkoztal rajta, hogy az egy int...

    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

    En nem vagyok androidos fejleszto, igy altalanossagban (es szerkezeteben) probaltam segiteni. Most rakerestem, ez a fuggveny ennyi:
    public void setImageResource (int resId)
    Ez azt jelenti, hogy nalad is int lett a myFunc() visszateresi tipusa?

    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 erteket ja egybol return jobb
    fg-ben az int randszam-tol csak
    case 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

    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

    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 erteket ja egybol return jobb
    fg-ben az int randszam-tol csak
    case 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 rola

    Nagyon 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

    ez ketfelekeppen is meguszhato
    1. a kivalasztast megirod fuggvenyben, nem kodmasolas
    2. androidot sose csinaltam, de az imageView-k nem lehetne szamozott valyozok helyett eleve tomb? ha nem, tedd tombbe... es ahhoz adj hozza

    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

    nem jo az elkepzeles [szam->nev->obj]
    miert nem a switch csinal obj-ot? az ne szamBetuvel lehyen, hanem az R.drawable.one tipusaval legyen egy valtozod, es annak adj a switch-ben a szamtol fuggo erteket
    [advanced megoldas: tomb beloluk es csak indexeled]

    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

    adj mar teljes kodot, igy csak talalgatni lehet
    plusz azt h mit akarsz elerni... igy nehez tslalgatni

    ja azt nem ertettem miert akarsz betusiteni - az nem megy hogy igy symbol-kent akarod hasznalni... es nem igy kene megoldani

    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. :B

  • 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. :B 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

    Huhh, ez nekem se tunt fel... de akkor is minimum gyanus az, hogy nem igy kellett volna megtervezni a fg-t.

    Lehetséges, de ebből a két kódsorból túl sok minden nem derül ki.

  • floatr
    veterán

    Intellij-ben sout+tab - ha nem tartasz szunetet a t utan - ugyanezt csinalja, sztem lenyelmesebb. Lehet h ctrl-space az altalanosabban megy, azt nem tudom es most epp nincs keznel.

    Ne adjátok alá a lovat az stdout-al :)
    Írjon tesztet, és használjon logot

  • 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 tipusa Stream<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 hogy
    Stream<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

    Nyilvan, de ha latnad mit csinaltak belole... annyit szeritnem nem er meg az egesz. Foleg karbantartas, rafejlesztes lesz igy sokkal attekinthetetlenebb. Es most volt standup, kiderult hogy "try to" szinten van hogy kiszedjek a bedrotozast... eh.

    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 :D

  • 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

    Kosz. Kodot max. geprol morickazok, ceges kod sehogy nem hozhato ki, barmilyen artatlan... [volt h munkatars a ceg altal fizetett kezdo, szamara uj prog.nyelv kulsos kurzusara nem tudta a 'vizsgakodot' elkuldeni...]

    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 :D 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

    Jaaaa, akkor ezt ugy ertettek, hogy a programozando feladat matek-logika jellegu, nem pedig a feladott feladat matek-logikai. En az utobbira gondoltam.

    Én is azt hittem. Csak ezek szerint a HR-es csaj nem tudta elmondani, mert nem ért hozzá.

  • 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

    Varj, nem tanart, hanem egy olyan embert kerestel, aki meg tudja oldani. Innentol ez akarmit mondasz, a csalas kategoriaja...
    Ha tanart keresel, azt kell beleirni az elso hsz-be is. Ami most ott van, az felreerthetetlen.

    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

    En a matekban mint topikgazda az ilyeneket mar megbeszeltem a modikkal, hogy torlom. Nem is az irrealitas miatt, hanem mert nem ez a celja az oktatasnak, elvbol ellenzem me'g a megjelenest is. Ott me'g nemmel, korral megadott menj helyettem vizsgazni is elofordult...

    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

    En a matekban mint topikgazda az ilyeneket mar megbeszeltem a modikkal, hogy torlom. Nem is az irrealitas miatt, hanem mert nem ez a celja az oktatasnak, elvbol ellenzem me'g a megjelenest is. Ott me'g nemmel, korral megadott menj helyettem vizsgazni is elofordult...

    Nincs azzal gond, ha pörög a piac :P

  • 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

    Waaaa, nyomj ra alul hogy mennyi ido alatt terul meg... legrosszabb esethez beirva a legrovidebb ido:) Epic fail.

    Ez nem az ügyfél, hanem számukra vonatkozó infó biztos :D Nekik nyilván az a legrosszabb, ha gyorsan végez a delikvens és kevesebb pénzmag marad az ő zsebükben ;]

  • 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 ugye l<=r ellenorzese 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 kulonbseg

    Kö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 :D

  • 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. :R
    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

    Ezt keresed? new String(charArray)

    Vagy String.valueOf(charArray)

    Masik kerdes: ez most 16 felbyte (hexa karakter), vagy 16 teljes byte? AES128? Fura, hogy chartomb lett belole... honnan jon az input?

    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

    Vagy ezt is meguszod, ha string-re switch-elsz. Orvendetes, hogy bekerult, attekinthetobb a kod vele.

    Azt nem írta a kolléga, hogy melyik JDK-val csinálja. Ha iskolai feladat, akkor jó eséllyel még 1.6....

  • WonderCSabo
    félisten

    OK, abban egyetertek, hogy ott neha elszalad a lo, bar nem lehet hogy ez a fizikahoz kellett nem az infohoz egy mernoki szakon? Mert azt meg en nem tudom, en a masik iranybol jovok (JATE).

    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. :DDD

  • 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).

    :R

    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.. :(((
    :R 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 :D

  • 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.

    :R :R

    a facebook-os és a google jam is tetszik :B Egy kis gyakorlással lehet nevezek is, szerencsére az előbbi csak szeptemberben van. A feladataik pedig nagyon is megfelelnek. :K a ch 24-ben is vannak jó feladatok. A könyvet sajnos nem találtam elektronikus formában, marad csak az alternatíva 3D :DDD

  • 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 :D :D

  • 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

    Atyaeg, nekem meg ferjem es programozok, akkor engem hova sorolsz? :) Vagy hat velem a szakmat. Ja es nem ma, tizeneve mindketto :U

    Hát attól függ fiú vagy-e vagy lány. ;]

  • Aethelstone
    addikt

    Atyaeg, nekem meg ferjem es programozok, akkor engem hova sorolsz? :) Vagy hat velem a szakmat. Ja es nem ma, tizeneve mindketto :U

    Ha mindkért fél kocka, az bocsánatos bűn :D

  • 0xmilan
    addikt

    szerk. Kicsit lassu voltam.

    A koztes string vagy az egyben kiiratas a lenyeg?
    System.out.print(i);
    System.out.println(j);

    A köztes string, tehát maga az összefűzés.
    Köszi mindenkinek!

  • 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

    Mert amikor az s1-nel kisebb elemet kap, akkor ELOBB beteszi az s1-be, majd ezt az uj s1-et masolja az s2-be. A ket sor felcserelesevel mar azt csinalna', amit a neve mond.

    váááááááááááááááááááááááááááááááá!
    köszi!

    mára ennyi, megyek strandolni.....

  • bucsupeti
    senior tag

    -4
    Nem is annyira eldugott hiba...

    és miért nem -3?

    lehet hogy túlságosan meleg van és inkább strandolni kéne...

  • 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. :D
    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 :P

    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. :D

    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. :D 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

Hirdetés