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?
Haastetta kerrakseen?
Revin perseeni!
10671
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
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.
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");
}
}
> //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.
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.
...rekursio on saatanasta!
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! :)
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.
"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