Subato

Resource Files

Aktienportfolio

In dieser Aufgabe sollen Sie eine Klasse zur Modellierung eines Aktienportfolios implementieren. Als Portfolio bezeichnet man eine Zusammenstellung von verschiedenen erworbenen Aktienanteilen. Das Portfolio ist demnach eine Zuordnung von Aktien zu der Anzahl der gehaltenen Anteile. Aktien werden dabei häufig mit einem kurzen Symbol gekennzeichnet, z.B. TSLA für die Tesla-Aktie. Neben den Aktienanteilen enhält das Portfolio auch einen Betrag an Barvermögen in US-Dollar.

Die gegebene Portfolio-Klasse soll so erweitert werden, dass damit gehaltene Aktien gespeichert, hinzugefügt (gekauft) oder entfernt (verkauft) werden können. Darüber hinaus soll der Gesamtwert des Portfolios für gegebene Aktienkurse berechnet werden können.

Implementieren Sie folgende Methoden:

  1. Implementieren Sie den Konstruktor für die Portfolio-Klasse. Dieser soll ein Array von Symbolen für Wertpapiere entgegennehmen und die interne Map-Instanz intitialisieren. Für jedes übergebene Symbol soll ein Eintrag von 0 für das entsprechende Symbol übergeben werden.

  2. Schreiben Sie eine methode getSymbols, die die Symbole der im Portfolio enthaltenen Wertpapiere zurückgibt (auch wenn die Anzahl 0 beträgt). Verwenden Sie zur Lösung der Aufgabe die Methode keySet von Map.

  3. Schreiben Sie eine Methode getAmountOf, die die Anzahl ermittelt, die für das über das Symbol spezifizierte Wertpapier im Portfolio vorhanden sind. Wenn das Symbol nicht in der Hashmap gespeichert ist, soll 0 zurückgegeben werden.

  4. Überschreiben Sie die toString-Methode der Portfolio-Klasse. Die Methode soll einen mehrzeiligen String zurückgeben, wobei jeder Zeile ein im Portfolio enthaltenes Wertpapier (Symbol) sowie die zugehörige Anzahl an gehaltenen Anteilen enhalten soll.
    Aktiensymbol und Anzahl sollen jeweils durch einen Doppelpunkt und ein Leerzeichen getrennt werden. Das Barvermögen soll als letzte Zeile mit dem Symbol "USD" erscheinen.

  5. Schreiben Sie eine methode hasSharesOf, die true zurückgeben soll, wenn das Portfolio für das Symbol des Werpapiers mindestens ein Wertpapier enthält. Andernfalls soll false zurückgegeben werden.

  6. Schreiben Sie eine Methode getValueFor, die für ein Wertpapier und einen gegebenen Preis ermittelt, wie viel die gehaltenen Wertpapiere in US-Dollar wert sind.

  7. Implementieren Sie die Methode sellShares, die Aktien zu einem bestimmten Preis aus dem Portfolio verkauft und den Verkaufsbetrag zum Barvermögen hinzufügt. Der Verkaufsbetrag berechnet sich aus der gewünscheten Menge und dem übergebenen Preis.

    Wenn die über amount angegebene Menge kleiner als eins ist, soll eine Exception mit einer aussagekräftigen Fehlermeldung geworfen werden. Eine Exception soll außerdem auch dann geworfen werden, wenn das Portfolio nicht über genug Anteile zum Verkauf verfügt.

  8. Implementieren Sie die Methode buyShares, die Aktien zu einem bestimmten Preis des cash-Guthabens kauft und zum Portfolio hinzufügt. Der Kaufbetrag berechnet sich aus der gewünscheten Menge zum aktuellen Preis und dem übergebenen Preis.

    Wenn die über amount angegebene Menge kleiner gleich Null ist, soll eine Exception mit einer aussagekräftigen Fehlermeldung geworfen werden. Eine Exception soll außerdem auch dann geworfen werden, wenn der gesamte Kaufbetrag das aktuelle Barvermögen übersteigt.

  9. Implementieren Sie die Methode totalValue, die den Gesamtwert des Portfolios berechnet. Als Parameter wird ein Map-Objekt übergeben, das eine Zuordnung von Aktiensymbolen und den aktuellen Preisen enthält. Berücksichtigen Sie dabei auch das Barvermögen.

    Falls ein im Portfolio enthaltenes Wertpapier nicht in der als Parameter übergebenen Map enthalten ist, soll eine Exception mit einer aussagekräftigen Fehlermeldung geworfen werden. Eine Exception soll ebenfalls geworfen werden, falls null als Parameter übergeben wird.

  10. Schreiben Sie eine main-Methode, in der ein neues Portfolio-Objekt initialisiert wird. Die initialen Symbole sollen über die Kommandozeilenparameter (String[] args) an den Portfolio-Konstruktor übergeben werden.

    Fügen Sie anschließend ein Barvermögen von 100000 Dollar zum Portfolio hinzu. Rufen Sie Die buyShares-Methode auf, um 10 Aktien von Tesla (TSLA) zum Preis von 800.0 Dollar und 5 Aktien von GameStop (GME) zum Preis von 300 Dollar zu kaufen. Verkaufen Sie nun 5 Tesla-Aktien aus dem Portfolio für 850 Dollar pro Aktie.

    Geben Sie die Bestandteile des Portfolios (Tabelle) und den Gesamtwert das Portfolios auf der Kommandozeile aus. Verwenden Sie als Werte für die Berechnung die Werte 400.0 für GME und 800.0 für TSLA.


import java.util.Map; import java.util.List; import java.util.HashMap; import java.util.ArrayList; public class Portfolio{ protected Map<String, Integer> holdings = new HashMap<>(); protected Double cash = 0.0; public Portfolio(){ this.holdings.clear(); } public Map<String, Integer> getHoldings(){ return this.holdings; } public double getCash(){ return this.cash; } public boolean hasCash(double amount){ return this.cash > amount; } public void depositCash(double amount){ this.cash += Math.abs(amount); } public void withdrawCash(double amount){ this.cash -= Math.abs(amount); } public Portfolio(String[] symbols){ } public List<String> getSymbols(){ return null; } public int getAmountOf(String symbol){ return 0; } @Override public String toString(){ return ""; } public boolean hasSharesOf(String symbol){ return false; } public double getValueFor(String symbol, double price){ return 0; } public void sellShares(String symbol, int amount, double price) throws RuntimeException{ } public void buyShares(String symbol, int amount, double price) throws RuntimeException{ } public double totalValue(Map<String, Double> prices) throws RuntimeException{ return 0; } public static void main(String[] args){ } }
java
You are not logged in and therefore you cannot submit a solution.