Avatar billede r9 Nybegynder
03. maj 2002 - 14:05 Der er 6 kommentarer og
1 løsning

undesøge objekt?

Jeg har et objekt som har 10 atributter.
Hvordan undersøger jeg objektet for hvor mange af atributterne der indeholder en værdi?
Avatar billede disky Nybegynder
03. maj 2002 - 14:27 #1
Du checker dem en efter en.
Avatar billede soreno Praktikant
03. maj 2002 - 14:31 #2
eller tilføjer en ekstra attribut til objektet som indeholder antallet af "attributter med værdi".
Avatar billede r9 Nybegynder
03. maj 2002 - 14:44 #3
disky:

kan man ikke gennemløbe objektet, eller skal jeg tjekke på hver enkelt ?
Avatar billede jkrag Nybegynder
03. maj 2002 - 15:09 #4
Eller du laver en hjælpemetode inde i objektet der kan give dig svaret:
public int getNumberOfFilledFields()

Eller hvis det skal være generelt (og du ikke kan ændre på det pågældende object, så skal du til at se på Reflection API'et (det system hvorved java dynamisk kan kigge ind i klasser).

Brug noget i retning af:
DitObject.class.getMethods()    (returnerer array af java.lang.reflect.Method)
og løb disse igennem. (læs selv videre :-)

P.S. Du skal også lige huske at definere hvad du mener med at felter indeholder en værdi...

Object typer kan indeholde null, og nogle vil da mene at dette også er en værdi.
Primitive typer indeholder altid en værdi.
Avatar billede disky Nybegynder
03. maj 2002 - 15:25 #5
r9:
Nej du skal altid kigge på dem.

jeg vil klart fraråde det jkrag foreslår, brug af reflection er meget krævende for JVM'en, og resulterer derfor i dårlig performance.

Lav en metode som undersøger det fordi, du kan f.eks. have en counter der er 0 til at starte med, hvis du så bruger setX() metoder til at sætte dine attributer med, tæller du samtidigt denne counter op, og metoden returnerer så værdien af denne counter.

Det er umiddelbart den nemmeste og ikke mindst hurtigste måde at gøre det på.

Eller du kan lave en metode der checker dine 10 attributer en efter en og ser om de er forskellige fra default værdien.

Tidscomplexiteten er O(n) hvilket er hurtigt, hvorimod den første løsning er O(1)
Avatar billede axe2 Nybegynder
03. maj 2002 - 16:29 #6
prøv programmet blueJ på http://www.bluej.org, der kan du køre dine objekter direkte og visuelt se objektets tilstand, ellers skriver du en masse getter funktioner og laver en pæn toString() metode.;()
Avatar billede x-masman Nybegynder
07. maj 2002 - 08:54 #7
disky> Siger du at den første løsning har tiden O(1)?

Det er jo konstant tid og må derfor være hurtigere end din løsning.;-)
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