Avatar billede oprah Nybegynder
05. oktober 2004 - 22:27 Der er 14 kommentarer og
1 løsning

Hjælp til en opgave?

Hej
Jeg sidder med følgende klasser:
import java.util.*;

/**
* Klassen Abonnement modellerer et mobilabonnement hos Talkmore.
*
*
* @version 23. september 2003
*/
public class Abonnement {

    private String telefonnummer;
    private List transaktioner, indbetalingsBeløb;
    private int saldo;
    private int beløb;
    /**private int beløb;
    private int transaktion;
    private int indbetaling;
    */
    /**
    * Tilføjer en transaktion til listen over transaktioner
    *
    * @param t Transaktionen, der skal tilføjes
    */
    public void tilføjTransaktion(Transaktion t) {
        transaktioner.add(t);
    }
 
    /**
    * Returnerer saldoen på kontoen
    *
    * @return Saldoen på kontoen
    */
    public void Saldo(){   
      return saldo;       
    }
   
   
}
og

/**
* Klassen Indbetaling modellerer en indbetaling
* på en konto for et mobilabonnement.
*
*
* @version 23. september 2003
*/
public class Indbetaling extends Transaktion  {

    // beløbet kunden indbetaler
    private int indbetalingsBeløb;
   
    /**
    * Konstruktør, der opretter en indbetaling
    *
    * @param beløb Det beløb, som indbetales.
    */
    public Indbetaling(int beløb) {
        indbetalingsBeløb = beløb;
    }

    /**
    * Returnerer det beløb, som skal konteres kundens konto
    *
    * @return Beløbet, som skal konteres kundens konto
    */
    public int beløb() {
        return indbetalingsBeløb;
    }
}


og en abstract klasse:
/**
* Klassen Transaktion er en abstrakt klasse,
* der modellerer transaktioner i forbindelse
* med et telefonabonnement.
* Det kan være samtaler, sms'er eller indbetalinger.
*
*
* @version 23. september 2003
*/
public abstract class Transaktion  {
    /**
    * beløb er en abstrakt metode, der skal returnere det beløb,
    * som skal konteres kundens konto når transaktionen bliver udført.
    *
    * Indtast det beløb, som svarer til prisen for pågældende transakt
    */
    public abstract int beløb();
}
Hvordan får jeg Saldo metoden i Abonnement klassen til at returnere en saldo.Den skal hænge sammen med Indbetaling klassen på en eller anden måde. Hvordan ved jeg ikke?
Mange tak på forhånden
Avatar billede simonvalter Praktikant
05. oktober 2004 - 22:52 #1
du løber vel din liste med transaktioner igennem og henter beløb for hver der er en indbetaling og lægger dem sammen
Avatar billede simonvalter Praktikant
05. oktober 2004 - 23:06 #2
det vel noget i retning af dette du leder efter

public int Saldo(){
      Iterator i = transaktioner.iterator();
        while(i.hasNext()){
            Transaktion t = (Transaktion) i.next();
            if(t instanceof Indbetaling){
                saldo += t.beløb();
            }
            if(t instanceof Udbetaling){
                saldo -= t.beløb();
            }
        }
        return saldo;
    }

og husk at lave en instans af din liste ellers får du en nullpointer exception
Avatar billede oprah Nybegynder
05. oktober 2004 - 23:11 #3
Hvordan laver jeg en instans af min liste
Avatar billede oprah Nybegynder
05. oktober 2004 - 23:17 #4
Når jeg skriver koden ind får jeg følgende fejl meddelelse:
cannor resolve symbol_class UdbetalingHvd skal jeg gøre?
Avatar billede simonvalter Praktikant
05. oktober 2004 - 23:19 #5
udbetaling var bare noget jeg lidt fandt på .. går ud fra at et abonnement både skal debiteres og krediteres med tiden.

og du laver en instans af f.eks en ArrayList f.eks ved at oprette den i en default constructor.

public Abonnement(){
transaktioner = new ArrayList();
}
Avatar billede simonvalter Praktikant
05. oktober 2004 - 23:19 #6
du fjerner bare 
if(t instanceof Udbetaling){
saldo -= t.beløb();
}
hvis du ikke skal bruge det
Avatar billede simonvalter Praktikant
05. oktober 2004 - 23:24 #7
import java.util.*;

public class Abonnement {

    private String telefonnummer;
    private List transaktioner;
    private int saldo;


    public Abonnement(){
        transaktioner = new ArrayList();
        }

    public void tilføjTransaktion(Transaktion t) {
        transaktioner.add(t);
    }
 

    public int Saldo(){
      Iterator i = transaktioner.iterator();
        Transaktion t = null;
        while(i.hasNext()){
            t = (Transaktion) i.next();
            if(t instanceof Indbetaling){
                saldo += t.beløb();
            } 
        }
        return saldo;
    }
}
Avatar billede oprah Nybegynder
06. oktober 2004 - 09:24 #8
Det virker. Mange tak for hjælpen. send et svar og få tildelt 30 point.
Avatar billede simonvalter Praktikant
06. oktober 2004 - 10:35 #9
ok det var så lidt
Avatar billede oprah Nybegynder
06. oktober 2004 - 17:59 #10
Det virker altså ikke. Når jeg opretter et objekt af klassen Indbetaling og indtaster et beløb, så skal jeg kunne se beløbet når jeg kalder Saldo metoden i Abonnement kalssen. Men jeg får bare et nul.Hvad skal jeg gøre?
Avatar billede simonvalter Praktikant
07. oktober 2004 - 06:45 #11
med den kode jeg har lave burde du bare kunne gøre dettte:

Abonnement a = new Abonnement();
Indbetaling i = new Indbetaling(200);
a.tilføjTransaktion(i);
System.out.println(a.Saldo());

hvis det stadig ikke virker må du vise mig den kode du er kommet frem til nu.
Avatar billede oprah Nybegynder
07. oktober 2004 - 13:21 #12
Hvor skal jeg tilføje det hen? Det du har skrevet til sidst.
Avatar billede simonvalter Praktikant
07. oktober 2004 - 13:25 #13
det er bare hvordan du bruger klasserne .. brug evt en test klasse med en main metode i
Avatar billede oprah Nybegynder
07. oktober 2004 - 16:54 #14
Tak du. Jeg har fået den til at virke.
Avatar billede simonvalter Praktikant
07. oktober 2004 - 17:01 #15
det var så lidt
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