Avatar billede jespersahner Nybegynder
06. januar 2005 - 16:22 Der er 7 kommentarer og
1 løsning

Metodekald med "dynamisk" argument

Antag at jeg har et objekt, som indeholder en række simple variabler a, b, c, ... og at jeg har en metode beregn(), som returnerer et sandt/falsk-udsagn ud fra en forespørgsel på disse, f.eks.

if (a==1 | b==1) return true;
- eller:
if ((a==0 | b==0) && c==7) return false;
- eller noget helt tredie.

Kan jeg skrive min metode beregn() således, at den kan tage et vilkårligt argument indeholdende a, b, c, ... og foretage evalueringen - altså en slags "string-argument" til beregn(), som evalueres?
Avatar billede arne_v Ekspert
06. januar 2005 - 16:24 #1
Ja du kan godt parse en String til de 3 værdier.

Men jeg ville til enhver tid foretrække f.eks. at putte dem ind i en HashMap.
Avatar billede jespersahner Nybegynder
06. januar 2005 - 23:20 #2
-arne_v: Hvordan parser jeg en String til værdierne?
Avatar billede arne_v Ekspert
07. januar 2005 - 08:18 #3
regex er nemt. Eksempel:

import java.util.regex.*;

public class ValParse {
    private static final Pattern p = Pattern.compile("(?:.*?)(?:a[ ]*=[ ]*)([0-9]+)(?:.*?)(?:b[ ]*=[ ]*)([0-9]+)(?:.*?)(?:c[ ]*=[ ]*)([0-9]+)");
    public static void parse(String s) {
        Matcher m = p.matcher(s);
        while (m.find()) {
            String a = m.group(1);
            String b = m.group(2);
            String c = m.group(3);
            System.out.println(a + " " + b + " " + c);
        }
    }
    public static void main(String[] args) {
        parse("a=1 b=2 c=3");
        parse("bla a = 4 bla b = 5 bla c = 6 bla");
    }
}
Avatar billede arne_v Ekspert
07. januar 2005 - 08:18 #4
Det er dog næppe hurtigt.
Avatar billede jespersahner Nybegynder
18. januar 2005 - 13:59 #5
->arne_v: Pyha, det ser lidt kringlet ud, selv om du skriver, at det er nemt :-)

Egentlig er jeg ligeglad med indholdet af a, b og c - jeg interesserer mig her blot for resultatet af et logisk udtryk, der involverer a, b og c. Kan man på den baggrund gøre noget simplere?

Sådan lidt pseudo-kode-agtigt tænker jeg på noget med:
String s = "(a==0 | b==0) && c==7";
if Math.eval(s)==true ...

Kan man noget sådant?
Avatar billede arne_v Ekspert
18. januar 2005 - 14:06 #6
Det er ikke ligetil at udregne den slags udtryk.

Det eneste sprog som har det indbygget er JavaScript.

Men der er lavet biblioteker til den slags i Java også.

Men det er absolut ikke simpelt.
Avatar billede jespersahner Nybegynder
24. januar 2005 - 10:10 #7
->arne_v: Smid lige et svar
Avatar billede arne_v Ekspert
24. januar 2005 - 10:13 #8
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester