/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Funktioner som parametre
Fra : (Per Røn


Dato : 04-02-04 09:40

Hvordan vil man egentlig parameteroverføre funktioner i Java, således at
eksempelvis en funktion integrer vil tage en vilkårlig funktion f, der
returnerer et reelt tal, og returnere integralet af det inden for
angivne grænser?

I pascal vil man jo bare gøre:

function integrer (function f: real; start, slut: real): real;

- mens man i C ville skrive noget i retning af:

float integrer (f, start, slut);
float (*f)(), start, slut;

--
Per Erik Rønne

 
 
Soren Kuula (04-02-2004)
Kommentar
Fra : Soren Kuula


Dato : 04-02-04 10:35

Per Rønne wrote:
> Hvordan vil man egentlig parameteroverføre funktioner i Java, således at
> eksempelvis en funktion integrer vil tage en vilkårlig funktion f, der
> returnerer et reelt tal, og returnere integralet af det inden for
> angivne grænser?

interface Function {
double f (double x);
}

class sin implements function {
double f (double x) {return Math.sin(x);}
}

class exp implements Function {
double base;
exp (double base) {this.base = base;}
double f (double x) {return Math.pow(base,x);}
}

osv. . . .

Brug et interface .. .

MVH
Søren
--
Fjern de 4 bogstaver i min mailadresse som er indsat for at hindre s...
Remove the 4 letter word meaning "junk mail" in my mail address.


kgc (04-02-2004)
Kommentar
Fra : kgc


Dato : 04-02-04 10:40

> Hvordan vil man egentlig parameteroverføre funktioner i Java, således at
> eksempelvis en funktion integrer vil tage en vilkårlig funktion f, der
> returnerer et reelt tal, og returnere integralet af det inden for
> angivne grænser?
Jeg kunne forestille mig at indkapsle funktionen der skal være parameter
i et objekt. Lav f.eks. et interface:

interface Function {
public double virkPaa(double x);
}

og hav så metoden integrer:

public static double integrer(Function f, double a, double b) {
//når jeg på et tidspunkt skal kende en funktionsværdi i x:
f.virkPaa(x);
}

Så kan du definere funktioner:

public class Square implements Function {
public double virkPaa(double x) {
return x*x;
}
}

og kalde:

double areal = integrer(new Square(),a,b);

Kan den idé bruges? (Jeg har ikke prøvet at kompilere, så der kan meget
vel være fejl. Afhængig af situation, kan du muligvis have virkPaa
static (hvis du ikke skal oprette funktioner dynamisk fra en parser el.
lign.), men ikke-static er nok mest fleksibelt.

Mvh. Kasper

Mike (04-02-2004)
Kommentar
Fra : Mike


Dato : 04-02-04 14:53

In article
<1g8mk8w.bgfr1u1q702k0N%per.ronne@doesnt.work.spam.filter.invalid>, Per
Rønne <per.ronne@doesnt.work.spam.filter.invalid> wrote:

> Hvordan vil man egentlig parameteroverføre funktioner i Java, således at
> eksempelvis en funktion integrer vil tage en vilkårlig funktion f, der
> returnerer et reelt tal, og returnere integralet af det inden for
> angivne grænser?
>
> I pascal vil man jo bare gøre:
>
> function integrer (function f: real; start, slut: real): real;
>
> - mens man i C ville skrive noget i retning af:
>
> float integrer (f, start, slut);
> float (*f)(), start, slut;

Du smider da bare et object med, der implementerer den givne funktion.

/Mikael

(Per Røn (14-02-2004)
Kommentar
Fra : (Per Røn


Dato : 14-02-04 16:24

Mike <mcvfdkFJERN_DETTE@yahoo.dk> wrote:

> In article
> <1g8mk8w.bgfr1u1q702k0N%per.ronne@doesnt.work.spam.filter.invalid>, Per
> Rønne <per.ronne@doesnt.work.spam.filter.invalid> wrote:
>
> > Hvordan vil man egentlig parameteroverføre funktioner i Java, således at
> > eksempelvis en funktion integrer vil tage en vilkårlig funktion f, der
> > returnerer et reelt tal, og returnere integralet af det inden for
> > angivne grænser?
> >
> > I pascal vil man jo bare gøre:
> >
> > function integrer (function f: real; start, slut: real): real;
> >
> > - mens man i C ville skrive noget i retning af:
> >
> > float integrer (f, start, slut);
> > float (*f)(), start, slut;
>
> Du smider da bare et object med, der implementerer den givne funktion.

Ja, jeg tror det er løsningen.

En superklasse, som definerer en dummy funktion. Nedarvning til flere
forskellige klasser, der overskriver denne metode.

Brugt i forbindelse med en java-opgave i numerisk integration. Som skal
kunne klare flere forskellige funktioner, der returnerer en double, og
som skal klare integralet af disse funktioner, fra a til b, med flere
forskellige metodikker. Hver metodik vil implementeres i hver sin
klasse, der nedarver fra samme superklasse, og hver eksempelvis
trigonometrisk funktion vil også skulle implementeres i hver sin klasse,
som også nedarver fra samme superklasse.

Det hele burde kunne klares fra samme superklasse, selv om det muligvis
vil være pædagogisk lettere for dem at regne med to forskellige
superklasser.

Ja, en opgave i numerisk integration til et programmeringshold.
--
Per Erik Rønne

Ulrik Magnusson (14-02-2004)
Kommentar
Fra : Ulrik Magnusson


Dato : 14-02-04 18:40



Per Røn ne wrote:

> Mike <mcvfdkFJERN_DETTE@yahoo.dk> wrote:
> En superklasse, som definerer en dummy funktion. Nedarvning til flere
> forskellige klasser, der overskriver denne metode.
>
> Brugt i forbindelse med en java-opgave i numerisk integration. Som skal
> kunne klare flere forskellige funktioner, der returnerer en double, og
> som skal klare integralet af disse funktioner, fra a til b, med flere
> forskellige metodikker. Hver metodik vil implementeres i hver sin
> klasse, der nedarver fra samme superklasse, og hver eksempelvis
> trigonometrisk funktion vil også skulle implementeres i hver sin klasse,
> som også nedarver fra samme superklasse.

Spørg evt. google om Strategy pattern.

Ulrik Magnusson


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408918
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste