Avatar billede klumb Nybegynder
11. december 2002 - 10:38 Der er 6 kommentarer og
3 løsninger

Optælling af elementer i en vektor

Vi har lavet en funktion som skal kunne gennemløbe en vektor for at optælle de elementer den består af.

Problemet er at vektoren (skydningVector) er en attribut i en klasse (PersonligeOplysninger) som udgør et element i en anden vektor (MedlemsListe).

Vi har lavet to while-løkker som skulle kunne genemløbe de to vektorer og svare på hvor mange elementer der findes i den, men vi kan simpelt hen ikke få det til at virke, og vi har ikke de store erfaringer med at bruge while-løkker.

Koden ser sådan ud:
    public int beregnSaldo() {
        //alle personer gennemløbes, og inden i den gennemløbes alle deres skydninger
        //vha. While-lykken i PersonligeOplysninger
        Iterator i = ml.iterator();
        while (i.hasNext()) {
            po = (PersonligeOplysninger) i.next();
            Iterator it = po.skydningVector.iterator();
            while (it.hasNext())    {
                po.skydning=(Skydning)it.next();
                //po.getSkydningVector();
            }
        }
        int antalSkydninger = po.skydningVector.capacity();
        saldo = antalSkydninger * 3;
        System.out.println("saldo er" + saldo);
        return saldo;
    }

og resten af vores klasser ligger på http://imv.au.dk/~ttut/eksperten

på forhånd tak
Avatar billede carstenknudsen Nybegynder
11. december 2002 - 10:40 #1
Kan I ikke bare bruge length() metoden.
Avatar billede carstenknudsen Nybegynder
11. december 2002 - 10:41 #2
Og det skulle have været size().
Avatar billede di8leva Nybegynder
11. december 2002 - 10:47 #3
nå, hvad den kod gør er att den går igenom alle element i vectorn, og sedan regner den kun på det sista elementet po.
-------------
  int antalSkydninger = po.skydningVector.capacity();
        saldo = antalSkydninger * 3;
        System.out.println("saldo er" + saldo);
        return saldo;
-------------

er udanfør while-løkken.

og det skall væl vara i while-løkken?
Avatar billede carstenknudsen Nybegynder
11. december 2002 - 10:50 #4
capacity() metoden returnerer ikke hvor mange
elementer der er, men hvor man der kan være
før der skal allokeres mere plads.
Avatar billede arne_v Ekspert
11. december 2002 - 10:50 #5
Hvis I kun skal have antallet i en enkelt Vector, så
bruger I bare size() som Carsten foreslår.

Hvis I skal have den oplysning for hver, så laver I noget
I retning af:

        Iterator i = ml.iterator();
        while (i.hasNext()) {
            po = (PersonligeOplysninger) i.next();
            System.out.println("ham her har " + po.skydningVector.size());
        }
       
Hvis I skal have summeret for alle, så laver I:

        int sum = 0;
        Iterator i = ml.iterator();
        while (i.hasNext()) {
            po = (PersonligeOplysninger) i.next();
            sum += po.skydningVector.size());
        }
        System.out.println("alle har tilsammen " + sum);
Avatar billede klumb Nybegynder
11. december 2002 - 11:10 #6
Hmmmm, tak for de mange gode forslag, det ser ud til næsten at virke, men vi får hele tiden en Nullpointer exception i "Iterator = ml.iterator" linien

java.lang.NullPointerException
    at Praemiepulje.beregnSaldo(Praemiepulje.java:48)
    at PraemiepuljeView.<init>(PraemiepuljeView.java:26)
    at Main.actionPerformed(Main.java:678)
...

vi har sat Arnes kode ind i stedet for vores oprindelige kode:

public int beregnSaldo() {

        //alle personer gennemløbes, og inden i den gennemløbes alle deres skydninger
        //vha. While-lykken i PersonligeOplysninger
        int sum = 0;
        Iterator i = ml.iterator();
        while (i.hasNext()) {
            po = (PersonligeOplysninger) i.next();
            sum += po.skydningVector.size();
        }
        System.out.println("alle har tilsammen " + sum);
        int antalSkydninger = po.skydningVector.size();
        saldo = antalSkydninger * 3;
        System.out.println("saldo er" + saldo);
        return saldo;
    }
Avatar billede arne_v Ekspert
11. december 2002 - 11:19 #7
En null pointer exception i din linie tyder på.
at ml er null.

Så måske har ml ikke fået assignet jeres medlems-liste
Vector.
Avatar billede Slettet bruger
11. december 2002 - 11:21 #8
objektet ml er ikke oprettet nogen steder, og er derfor null

private Medlemsliste ml;
erklærer objektet men opretter det ikke
Avatar billede klumb Nybegynder
11. december 2002 - 11:25 #9
Fantastisk, det virker nu, mange tak for hjælpen
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