27. december 2001 - 17:08Der er
7 kommentarer og 1 løsning
Metoder med Array
Hej derude. Det er nu første gang jeg forsøgen denne vej, men har læst mange indlæg. Jeg er nybegynder på området men sidder med et spm.
Er der nogen der kan hjælpe mig med hvordan jeg koder en add- og en delete-metode til et Array. Jeg har indledningen som hedder hhv. public void addAbonnement(Abonnement a){ samt public void deleteAb(intabId){
I den første skal a være indsat bag i abList, som er Array\'et.
I den anden skal abId være fjernet og efterfølgende elementer skal være rykket een plads ned.
Jeg håber på et svar med en god detaljeret forklaring.
Jeg har en klasse Kunde, som skal indeholde et array af Abonnementer (da en kunde kan have flere abonnementer) samt en attribut, som angiver antal abonnementer, som kunden har. I klassen Kunde findes: private Abonnement[] abList=new Abonnement[maxAb]; int maxAb = 10;
Her er en løsning, men det vil være mest fordelagtigt at bruge en liste idet den er mere fleksibel mht størrelsen. private List list = new ArrayList(); public add( A a ) { list.add( a ); } public del(int i ) { list.remove( i ); } Det var det, for arrays er det lidt mere omstændigt, men her er en løsning der antager at max er tilstrækkelig stor. private int max = 10; private A[] ab = new A[max]; private int next = 0; // er antallet af A\'er public void add( A a ) { ab[next++]=a; } // add public void del( int n ) { for (int i=n; i<next-1; i++) // ryk alle ned ab[i]=ab[i+1]; // der ligger over n next--; // reducer antallet at A\'er } // del Hvis du bruger listemodellen kan du altid returnere en A[] ved at skrive A[] ab = (A[])list.toArray(); Hvis antallet af elementer ændres er det så godt som altid bedst at bruge en List, f.eks. ArrayList eller Vector hvis du arbejder med tråde.
Svaret vedr. add-metoden ligner den vejledende løsning, som jeg er kommet i besiddelse af: public void addAbonnement(Abonnement a){ //PRE antalAb<maxAb //POST a er indsat bag i abList abList[antalAb++]=a; }
delete-metoden kan jeg ikke få til at stemme med den vejledende løsning: public void deleteAb(int abId){ //PRE abId findes i listen //POST abId er fjernet. Efterfølgende elementer er rykket een plads ned. boolean found=false; int i=0; while(!found) if(abList[i].getId()==abId) found=true; else i++; for(int j=i; j<antalAb; j++) abList[j]=abList[j+1]; antalAb--; }
Jeg vil gerne spørge om metoderne i svaret kunne blive kommenteret uddybende, så jeg forstod dem lidt bedre samt om de ovenfor nævnte vejledende løsninger kunne blive kommenteret uddybende, så jeg også forstod dem. I begge tilfælde gælder det både for add- og delete-metoden.
Add metoden går jeg udfra er på plads. public void addAbonnement(Abonnement a){ //PRE antalAb<maxAb //POST a er indsat bag i abList abList[antalAb++]=a; } Delete metoden er lidt anderledes end den jeg har foreslået men det skyldes blot at du ikke forklarede hvad dit indeks betyder; jeg kan nu se at det er en slags identification af abonnenten og ikke indeks i dit array. Der er lidt yderligere kommentarer herunder i din kildetekst. public void deleteAb(int abId){ //PRE abId findes i listen //POST abId er fjernet. Efterfølgende elementer er rykket een plads ned. // found skal sættes true når vi har fundet det element i array\'et der har den korrekte id givet som argument: abId boolean found=false; // i er indeks på det næste element i array\'et vi skal undersøge for at se om det er det vi leder efter int i=0; // sålænge vi ikke har fundet abonnenten while(!found) // hvis det i\'te elemenent i array\'et har den rigtige id har vi fundet det vi søger if(abList[i].getId()==abId) found=true; // ellers rykker vi indeks en frem til næste abonnent else i++; // når vi er nået hertil er found=true og i er indeks på det element vi skal slette // det gør vi ved at rykke alle elementer over i (i indeks) en ned for(int j=i; j<antalAb; j++) abList[j]=abList[j+1]; // endelig må vi reducere antallet af elementer da vi jo har slettet det gamle i\'te element
Hvis du vil have yderligere forklaring så præciser hvad du ønsker uddybet. antalAb--; }
Linien abList[antalAb++]=a indsætter abonnenten a på plads nummer antalAb der er den første plads i array\'et uden en abonnent (tomt). antalAb++ betyder at antalAb tælles op med en EFTER at den er benyttet. Nu er der jo en abonnent ekstra i array\'et.
Linien abList[j]=abList[j+1] sørger for at det der før lå i j+1\'ste element i array\'et nu rykker en en til den j\'te plads. For j=4 rykkes det femte element ned og bliver det fjerde.
Hej carstenknudsen. Tak for din udholdenhed - nu dæmrede det for mig i disse opgaver.
Synes godt om
Ny brugerNybegynder
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.