Haastetta kerrakseen?

Jos luokassa saa olla vain yksi metodi, voiko metodin kutsun laittaa metodiin? Muita luokkia ja metodeita ei sais olla. Kutsun yhteydessä pitäisi antaa metodin parametrin arvo.. Voitteko laittaa jonkun simppelin esimerkin?
10671
Äänestä

Muut lukivat myös

Vastaukset 10

Vanhimmat

Teet vain rekursiivisen funktion. Esim. jotain tällaista

int rekursio(int param)
{
if(param-1>0)
{tulos=param*rekursio(param-1);}
else
{tulos=1;}

return tulos;
}

Tämän pitäisi laskea luvun param kertoma.
esim luvulla 3!

tulos=3*((tulos=)2*((tulos=)1*1))-> tulos=3*(2*1)
ja funktio palauttaa kuutosen.

Äänestä

public class Bar{
String [] args;

public static void main(String [] args){
Bar b = new Bar();
b.args=args;
System.out.prinln("ihme");
try{
//Runtime.exec("javac Bar");//ihme
Runtime.getRuntime()
.excec("java Bar arg1 arg2");
//java.lang.reflect:llä ja arg:lla vois
// kikkailla vielä enemmän
}catch(Exception ex){}
}
}


// ao vaatii main-metodin toiseen luokkaan
//jos voi olla vain yksi metodi, se on main.
//se ei voi kutsua itseään
//Ok, no esim. apletitta main on jossain muualla
//mutta main on aina.
public class Foo{
Foo node = null;
String data = null;

//Sekoilu
public void barfoo(Foo node ,String data){
this.data = data;
this.node = node;
Foo bar = new Foo();//konstruktori != metodi
Foo fobar = new Foo();
if(node == null)
this.node = this;
this.create(bar,"bar");
bar.create(fobar,"fobar");
fobar.create(this,"this");
}

}

Äänestä
  • > //Ok, no esim. apletitta main on jossain muualla
    > //mutta main on aina.

    Tarkoitit vissiin konstruktoria? Mainia ei nimittäin ole ellei sitä kirjoiteta.

    Juu ja tuo koodi ei toimi. En testannut, mutta kirjoitusvirheitä on kiitettävästi. Lisäksi täytyy varmaan mainita, että mitään Bar-luokan kaltaista ei koskaan saisi tehdä. Tuossa luodaan uusia JVM:iä järjetöntä vauhtia ja aikaisempia suljetaan. Varmasti kyykkää mikä tahansa kone.

    Ja mitä alkuperäiseen kysymykseen tulee, niin itseltäni ainakin napsahtaa varmistin heti pois päältä, kun kuulen sanan "rekursio". 99,9% tapauksista se tarkoittaa sitä, että jotain on menossa pahasti persiilleen.

    Äänestä

  • ~~~ kirjoitti:

    > //Ok, no esim. apletitta main on jossain muualla
    > //mutta main on aina.

    Tarkoitit vissiin konstruktoria? Mainia ei nimittäin ole ellei sitä kirjoiteta.

    Juu ja tuo koodi ei toimi. En testannut, mutta kirjoitusvirheitä on kiitettävästi. Lisäksi täytyy varmaan mainita, että mitään Bar-luokan kaltaista ei koskaan saisi tehdä. Tuossa luodaan uusia JVM:iä järjetöntä vauhtia ja aikaisempia suljetaan. Varmasti kyykkää mikä tahansa kone.

    Ja mitä alkuperäiseen kysymykseen tulee, niin itseltäni ainakin napsahtaa varmistin heti pois päältä, kun kuulen sanan "rekursio". 99,9% tapauksista se tarkoittaa sitä, että jotain on menossa pahasti persiilleen.

    Pitää nyt vaan puuttua tohon loppukommenttiisi...

    Joidenkin ongelmien ratkaisemiseen rekursio on erittäin tehokas työkalu. Rekursiivisesti tehdyt ohjelmat saadaan myös pieniksi ja yksinkertaisiksi. Aivot tosin voi nyrjähtää, kun yrittää seurata prosessin kulkua.

    Esimerkiksi automaattien (deterministinen/epädeterministinen) analysoinnissa rekursiivisesti toimivat ratkaisut on nopeita ja yksinkertaisia.

    Äänestä

  • fani kirjoitti:

    Pitää nyt vaan puuttua tohon loppukommenttiisi...

    Joidenkin ongelmien ratkaisemiseen rekursio on erittäin tehokas työkalu. Rekursiivisesti tehdyt ohjelmat saadaan myös pieniksi ja yksinkertaisiksi. Aivot tosin voi nyrjähtää, kun yrittää seurata prosessin kulkua.

    Esimerkiksi automaattien (deterministinen/epädeterministinen) analysoinnissa rekursiivisesti toimivat ratkaisut on nopeita ja yksinkertaisia.

    Hieno? No jaa. Ei ollut kyllä ensimmäinen adjektiivi, mikä itselleni tuli mieleen. Alkoi tosin samoilla kirjaimilla.

    On totta, että rekursiivisesti tehdyt koodinpätkät saadaan pieniksi ja yksinkertaisiksi, mutta aina kun olen rekursioon törmännyt, on se tapahtunut suorituskykyongelmia ratkottaessa. Ratkaisut ovat toki nopeita, mutta suoritettava koodi erittäin harvoin.

    Äänestä

  • fani kirjoitti:

    Pitää nyt vaan puuttua tohon loppukommenttiisi...

    Joidenkin ongelmien ratkaisemiseen rekursio on erittäin tehokas työkalu. Rekursiivisesti tehdyt ohjelmat saadaan myös pieniksi ja yksinkertaisiksi. Aivot tosin voi nyrjähtää, kun yrittää seurata prosessin kulkua.

    Esimerkiksi automaattien (deterministinen/epädeterministinen) analysoinnissa rekursiivisesti toimivat ratkaisut on nopeita ja yksinkertaisia.

    ...rekursio on saatanasta!

    Äänestä

  • ~~~ kirjoitti:

    > //Ok, no esim. apletitta main on jossain muualla
    > //mutta main on aina.

    Tarkoitit vissiin konstruktoria? Mainia ei nimittäin ole ellei sitä kirjoiteta.

    Juu ja tuo koodi ei toimi. En testannut, mutta kirjoitusvirheitä on kiitettävästi. Lisäksi täytyy varmaan mainita, että mitään Bar-luokan kaltaista ei koskaan saisi tehdä. Tuossa luodaan uusia JVM:iä järjetöntä vauhtia ja aikaisempia suljetaan. Varmasti kyykkää mikä tahansa kone.

    Ja mitä alkuperäiseen kysymykseen tulee, niin itseltäni ainakin napsahtaa varmistin heti pois päältä, kun kuulen sanan "rekursio". 99,9% tapauksista se tarkoittaa sitä, että jotain on menossa pahasti persiilleen.

    Ihanko totta eikö toimi.
    Sorry ku en jaksa kirjottaa ihan oikeaa koodia,
    tarkoitus oli hieman älyllisesti (tai älyttömästi) huvitella olio-ohjelmoinnin aiheilla & selventää ylipäätään miten vapaakäyttöisiä oliot ovat jopa suhteessa itseensä, ei kirjoittaa käännöskelpoista ohjelmaa vaan herättää lukijassa ajatuksia.
    Mutta ei tainnut viesti mennä perille jos kirjoitusvirheet oli ainoa mitä lukija koodista ymmärsi.

    Enkä tarkoittanut konstruktoria, main on aina (jossain), tosin siitä mikä main on ja mitä kukin sillä ymmärtää on monilla enemmänkin aatepohjaisia ja tunnesyistä johtuvia mielipiteitä.

    Äänestä

  • bobar kirjoitti:

    Ihanko totta eikö toimi.
    Sorry ku en jaksa kirjottaa ihan oikeaa koodia,
    tarkoitus oli hieman älyllisesti (tai älyttömästi) huvitella olio-ohjelmoinnin aiheilla & selventää ylipäätään miten vapaakäyttöisiä oliot ovat jopa suhteessa itseensä, ei kirjoittaa käännöskelpoista ohjelmaa vaan herättää lukijassa ajatuksia.
    Mutta ei tainnut viesti mennä perille jos kirjoitusvirheet oli ainoa mitä lukija koodista ymmärsi.

    Enkä tarkoittanut konstruktoria, main on aina (jossain), tosin siitä mikä main on ja mitä kukin sillä ymmärtää on monilla enemmänkin aatepohjaisia ja tunnesyistä johtuvia mielipiteitä.

    Tätä kun tekee töikseen, niin koodiin alkaa suhtautua ehkä vähän liiankin vakavasti ;)

    > Mutta ei tainnut viesti mennä perille jos
    > kirjoitusvirheet oli ainoa mitä lukija koodista
    > ymmärsi.

    Niin no, ymmärsin kyllä koodin, mutta en sen tarkoitusta. Luokat olivat täysin käyttökelvottomia - kahdesta syystä, jotka jo mainitsinkin (ne eivät toimi ja ne ovat ajatuksenakin Javan pahimman luokan raiskaamista). Tästä ollaan kai samaa mieltä? Luulin alkuun, että kyse oli jonkin sortin vitsistä.

    Ja pahoittelen jos kuulostan jyrkältä. Tarkoitukseni ei ole tylyttää ketään, eivätkä kommenttini ole henkilöön suunnattuja. Mutta mitä koodeihin tulee, niin näen asiat binäärinä: Ratkaisu on joko hyvä tai sitten siihen pitää puuttua. Ruma koodi tulee kitkeä mahdollisimman varhaisessa vaiheessa tai se tulee jossain vaiheessa takaisin kummittelemaan :)

    Have a nice code! :)

    Äänestä

  • ~~~ kirjoitti:

    Tätä kun tekee töikseen, niin koodiin alkaa suhtautua ehkä vähän liiankin vakavasti ;)

    > Mutta ei tainnut viesti mennä perille jos
    > kirjoitusvirheet oli ainoa mitä lukija koodista
    > ymmärsi.

    Niin no, ymmärsin kyllä koodin, mutta en sen tarkoitusta. Luokat olivat täysin käyttökelvottomia - kahdesta syystä, jotka jo mainitsinkin (ne eivät toimi ja ne ovat ajatuksenakin Javan pahimman luokan raiskaamista). Tästä ollaan kai samaa mieltä? Luulin alkuun, että kyse oli jonkin sortin vitsistä.

    Ja pahoittelen jos kuulostan jyrkältä. Tarkoitukseni ei ole tylyttää ketään, eivätkä kommenttini ole henkilöön suunnattuja. Mutta mitä koodeihin tulee, niin näen asiat binäärinä: Ratkaisu on joko hyvä tai sitten siihen pitää puuttua. Ruma koodi tulee kitkeä mahdollisimman varhaisessa vaiheessa tai se tulee jossain vaiheessa takaisin kummittelemaan :)

    Have a nice code! :)

    Jees, otin itteeni,sorry.

    Mutta laitetaan tähän vähän järkeä lisää...

    Puuta ei voi käydä läpi kun rekursiivisesti.
    Joissakin kielissä saattaa vaikuttaa siltä että puu tosiaan käydään lävitse lineaarisesti, mutta näin ei oikeassa elämässä ole, rekursio on näissäkin piilotettu alempiin (luokka) kerroksiin.

    Korjatkaa jos eri mieltä, en ole ainakaan yhtään ratkaisua nähnyt.

    Äänestä

  • ~~~ kirjoitti:

    Hieno? No jaa. Ei ollut kyllä ensimmäinen adjektiivi, mikä itselleni tuli mieleen. Alkoi tosin samoilla kirjaimilla.

    On totta, että rekursiivisesti tehdyt koodinpätkät saadaan pieniksi ja yksinkertaisiksi, mutta aina kun olen rekursioon törmännyt, on se tapahtunut suorituskykyongelmia ratkottaessa. Ratkaisut ovat toki nopeita, mutta suoritettava koodi erittäin harvoin.

    "Ratkaisut ovat toki nopeita, mutta suoritettava koodi erittäin harvoin."

    Joo, riippuu paljon ratkottavasta ongelmasta. Jos on mahdollista ottaa talteen väliratkaisuja, voidaan niitä käyttää tulevien kutsujen arvojen muodostamiseen. Eli välitulokset taulukkoon/hashiin ja nopeus kasvaa jne.

    Rekursiivinen quicksort on suoritettunakin ihan jees. Tosin Javalla counting sort -on nopeampi... ;D

    Äänestä

Kommentoi aloitusta


Revin perseeni! kirjoitti:

Jos luokassa saa olla vain yksi metodi, voiko metodin kutsun laittaa metodiin? Muita luokkia ja metodeita ei sais olla. Kutsun yhteydessä pitäisi antaa metodin parametrin arvo.. Voitteko laittaa jonkun simppelin esimerkin?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu