Avatar billede md_craig Nybegynder
23. november 2003 - 21:43 Der er 31 kommentarer og
1 løsning

Artribut skal være et Array af objekter ?

Hvordan laver/definere man en artribut som et array af objekter fra en anden klasse ???

Hvis man har en klasse: Forbruger
Artributter:

private String navn;
private int målerNr;
private int aflæsning;

og en anden klasse: Distrikt
Artributter:

private String navn;
private double prisPrM3;

Og så skal jeg have en 3. artribut der består af et Array af Objekter fra klassen: Forbruger
Avatar billede erikjacobsen Ekspert
23. november 2003 - 21:45 #1
Måske

  private java.util.ArrayList forbrugere;
Avatar billede md_craig Nybegynder
23. november 2003 - 21:47 #2
og hvis der kun skal være plads til 200 ??
Avatar billede arne_v Ekspert
23. november 2003 - 21:48 #3
private Object[] attrs;

public Distrikt(Object[] attrs) {
  this.attrs = attrs;
}

måske...
Avatar billede arne_v Ekspert
23. november 2003 - 21:49 #4
ArrayList er løsningen hvis du skal tilføje og ikke ved hvormange du vil
tilføje.

Et array kan bruges hvis du allerede har dem alle.
Avatar billede erikjacobsen Ekspert
23. november 2003 - 21:50 #5
Hvis du altid har præcise 200 - eller et andet tal - så brug et array.
Jeg gætter nu på at du er bedre tjent med en ArrayList.
Avatar billede md_craig Nybegynder
23. november 2003 - 21:55 #6
erikjacobsen >>>

Meget muligt... men der skal kun være plads til præsis 200 forbrugere i et distrikt...
Avatar billede erikjacobsen Ekspert
23. november 2003 - 22:00 #7
Det må være en meget specielt problemstilling du har. Er det 200 som maksimum,
med et variabelt antal derunder, vil en ArrayList sikkert også være bedste valg.
Avatar billede arne_v Ekspert
23. november 2003 - 22:04 #8
Hvorvidt 200 er fast eller ej er da ret lige gyldigt for
array versus ArrayList.

Det afgørende er om der skal fjernes/tilføjes efter at de er sendt
over i Distrikt.

nej => både array og ArrayList kan bruges - ingen grund til at bruge ArrayList

ja => ArrayList er meget bedre end array
Avatar billede md_craig Nybegynder
23. november 2003 - 22:05 #9
Det er en stillet opgave, hvor vi alle sider fast lige præsis der...

Jeg kan sagtens:

private ArrayList forbrugere;
Men så snart jeg vil give den en parameter for at definere størelsen kræver den en retur værdi...

inde på Sun er den ellers defineret sådan at man skulle kunne:

ArrayList(int initialCapacity)
Avatar billede erikjacobsen Ekspert
23. november 2003 - 22:07 #10
;) Arne - hvis det er fast 200 skal der jo ikke slettes eller fjernes. Så er det fast...

private ArrayList forbrugere = new ArrayList(200);

eller bare

private ArrayList forbrugere = new ArrayList();

den skal nok selv greje det.
Avatar billede md_craig Nybegynder
23. november 2003 - 22:07 #11
arne_v >>>

Det der skal gøres er at der skal oprettes et Array med 200 tomme plaser....
Disse skal så kunne fyldes...

Når alle 200 plaser er fyldt skal der oprettes et nyt Array... samme tur igen...

Det der så skal ligge i arrayet er objekter af klassen forbruger
Avatar billede arne_v Ekspert
23. november 2003 - 22:08 #12
forbruger[] alle = new forbruger[200];
Avatar billede arne_v Ekspert
23. november 2003 - 22:09 #13
Så er der 200 forbrugere.
Avatar billede erikjacobsen Ekspert
23. november 2003 - 22:11 #14
Jeg tror jeg blander mig udenom - en skoleopgave af den karat du har
fået er sikkert fornuftig nok, men jeg kommer bare til at bruge ting og
metoder du ikke har lært, eller "må" bruge.
Avatar billede md_craig Nybegynder
23. november 2003 - 22:18 #15
erikjacobsen >>>

Muligvis... men vi har lært at lære selv... vi lære også at støtte os meget op af JavaDocs... Desuden så er han MEGA elændig til at formulere opgaver...

Han siger selv vi skal være Skarpe og præsise.. men det kan kun være fordi han ikke er det selv da...


arne_v >>>

Øhhhh....
Avatar billede arne_v Ekspert
23. november 2003 - 22:22 #16
Du sagde at du skulle have oprettet 200 tomme pladser - det er det som:
forbruger[] alle = new forbruger[200];
gør.
Avatar billede erikjacobsen Ekspert
23. november 2003 - 22:23 #17
Jo md ... men det jeg fx ikke kan se er om du *skal* bruge et array, eller
om du *må* bruge en ArrayList.
Avatar billede md_craig Nybegynder
23. november 2003 - 22:23 #18
Desuden så står der foresten ikke DIREKTE det skal være et array...
Det skal være en "tabel"

Så ArrayList er nok noget i den stil han havde forestillet sig...
Det virker som det mest indlysende at bruge...
Avatar billede erikjacobsen Ekspert
23. november 2003 - 22:27 #19
Ok, md, men hvad er så det med "først 200, og hvis de er fyldt op så 200 mere" ?
Siger det ikke at det skal være array (for det er groft sagt hvad ArrayList
gør automatisk for dig)
Avatar billede md_craig Nybegynder
23. november 2003 - 22:31 #20
erikjacobsen >>> Lige den del af opgaven er formuleret således...:

forbrugere:

Her er forbrugerne placeret i distrikt-objektet ved hjælp af en tabel med plads til 200 objekter af klassen Forbruger.
Avatar billede md_craig Nybegynder
23. november 2003 - 22:32 #21
og der ingår fra 0 - 200 forbrugere i et distrikt... derfor må arrayet ikke vokse til mere end 200... og så skal der laves et nyt...

Men nu er jeg så kommet til næste prob...
Det er så et forståelses prob...
Avatar billede erikjacobsen Ekspert
23. november 2003 - 22:36 #22
Det vil være dumt at gøre det med 2 arrays, hvis der er mere end 200. Hvad med
lige at spørge læreren hvad meningen egentlig er.

Du kan selfølgelig selv lave et nyt på 400, kopiere de 200 over og så bruge
det (dvs: genopfinde ArrayList)
Avatar billede md_craig Nybegynder
23. november 2003 - 22:38 #23
erikjacobsen >>>

Sorry... Det er ikke det jeg mener naturligvis... hvis der kommer over 200 så er det naturligvis et nyt objekt der skal oprettes... et nyt distrikt objekt...

Tror jeg bør sove lidt mere om natten...
Avatar billede erikjacobsen Ekspert
23. november 2003 - 22:42 #24
"et nyt distrikt objekt" - lyder lige så tosset ;)
Avatar billede md_craig Nybegynder
23. november 2003 - 22:47 #25
erikjacobsen >>

Okay et objekt af klassen distrikt...
Men det er ikke desideret tosset.... for der bor 200 forbruger i distrikt nord, 200 i distrikt syd, 200 i vest og lige ledes i øst... og så videre....
Avatar billede erikjacobsen Ekspert
23. november 2003 - 22:57 #26
Det må man kalde byplanlægning!

Jeg forstod på dig at hvis der så kom forbruger nummer 201 i distrikt nord,
skulle man lave et nyt distrikt, til ham, alene.

Det er svært at vide hvad det er jeres opgave skal træne jer i - det med de
200 er måske inderligt ligegyldigt - måske et det klassen "forbruger", der
er opgaven, og så er det lidt sjovere hvis der er flere, og de 200 er bare
valgt for at gøre den del nem (i betydningen: ikke svær!).

Jeg savner kort sagt præmisserne for opgaven.
Avatar billede md_craig Nybegynder
23. november 2003 - 23:05 #27
du må godt få hele formuleringen...

Det vi i prinsipet skal beskæftige os med er at sætte objekter i spil fra en klasse til en anden, samt benytte java docs en smulle...

Opgave:
_______________________________________________________________________________

På det lokale fjernvarmeværk ønsker man at få lavet et lille edb-system, som kan anvendes til at afregne fjernvarmeforbruget for de enkelte forbrugere i et distrikt. Afregningen sker én gang om året, idet forbrugeren aflæser måleren og indsender den aflæste værdi til fjernvarmeværket.
I objektmodellen indgår to klasser: Distrikt og Forbruger, således at 0 til 200 forbrugere indgår i et distrikt.

1.
Første del af opgaven går ud på at programmere klassen Forbruger. Klassen har følgende attributter og metoder:

Attributter
navn        Navnet på en forbruger. Tekst.
målerNr        Målernummer for en fjernvarmemåler. Heltal. Målernummer identifi-
cerer et forbruger-objekt.
nyAflæsning        Målerværdien (i kubikmeter varme) ved seneste aflæsning. Heltal.
forrigeAflæsning    Målerværdien (i kubikmeter varme) ved forrige aflæsning. Heltal.
målerMax        Maksimal mulig værdi på måler. Når måleren når denne værdi, begynder
den forfra fra nul (overløb). Heltal.

Metoder
Forbruger        Default constructor.
Forbruger        Constructor, som medtager forbrugerens navn, et målernummer og må-
lerens maksimalværdi som parametre.
getMålerNr        Access metode til datamember målerNr.
setNavn        Mutator metode til datamember navn.
getNavn        Access metode til datamember navn.
aflæsMåler        Som input-parameter har metoden forbrugerens aflæsning af målervær-
dien. Metoden skal opdatere datamembers nyAflæsning og
forrigeAflæsning.
beregnForbrug    Metoden skal returnere differencen mellem nyAflæsning og
forrigeAflæsning, idet der tages højde for eventuelt overløb af måleren.

Skriv klassedefinitionen for klassen Forbruger, som indeholder ovenfor angivne attributter og metoder. 

2.
Anden del af opgaven går ud på at programmere klassen Distrikt. Klassen har følgende attributter og metoder:

Attributter
navn        Distriktets navn. Tekst.
prisPrM3        Prisen pr kubikmeter (m3) varme. Decimaltal.
forbrugere        Her er forbrugerne placeret i distrikt-objektet ved hjælp af en tabel
med plads til 200 objekter af klassen Forbruger.
antalForbrugere    Angiver hvor mange forbrugere, der er oprettet i distriktet. Heltal.

Metoder
Distrikt        Default constructor.
Distrikt         Constructor. Navn og pris pr. kubikmeter varme som parametre.
setForbruger        Opretter en forbruger i distriketet. Har forbrugeren med som parameter.
afregnForbruger    Metoden skal beregne prisen for et årsforbrug for én forbruger. Metoden
har forbrugerens målernummer med som inputparameter og skal returnere prisen. Hvis målernummeret ikke kan findes returneres et negativt tal.

Skriv klassedefinitionen for klassen Distrikt, som indeholder ovenfor angivne attributter og metoder. 

3.
Tredie del af opgaven går ud på at skrive en testklasse, som aftester klasserne Forbruger og Distrikt.
Avatar billede arne_v Ekspert
23. november 2003 - 23:42 #28
Opgave formuleringen i #2 antyder ret kraftigt array:

forbrugere        Her er forbrugerne placeret i distrikt-objektet ved hjælp af en tabel
med plads til 200 objekter af klassen Forbruger.
antalForbrugere    Angiver hvor mange forbrugere, der er oprettet i distriktet. Heltal.

og måske skal du holde dig til opgave formuleringen !

(i praksis ville jeg sige at der skulle laves en HashMap med
forbrugerne, men det er en anden historie)
Avatar billede md_craig Nybegynder
23. november 2003 - 23:43 #29
det er jo en definitionsag... for Tabel er jo ikke per definition et Array...
Men det er jo hip som hap...
Avatar billede arne_v Ekspert
24. november 2003 - 00:28 #30
antalForbrugere member giver kun mening med et fixed sized array
som ikke nødvendigvis er fyldt op.
Avatar billede arne_v Ekspert
11. december 2003 - 21:14 #31
Lukke tid ?
Avatar billede md_craig Nybegynder
23. januar 2004 - 15:37 #32
close
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