[Java] Klassen, Objekte, etc.. erstellen und ausgeben

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von GaYlORd, 5. Mai 2010 .

  1. 5. Mai 2010
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Klassen, Objekte, etc.. erstellen und ausgeben

    Hi,

    ich muss für die Uni eine Aufgabe machen in Java -.-
    Wir haben so ein UML-Diagramm bekommen:
    Bild

    Die Aufgabenbeschreibung:
    Spoiler
    In dieser Aufgabe geht es darum, ein Portfolio zu simulieren: Der Kurs einer Aktie und den Kurs einer Anleihe
    werden zufällig geändert und der resultierende Gesamtwert des Portfolios betrachtet. Setzen Sie
    hierzu zunächst folgendes, nicht ganz vollständiges, Klassendiagramm in Java um.
    Beim Erstellen einer Aktie soll neben der WKN auch der letzte Kurs (letzter_kurs) festgelegt werden. Die
    Methode getSKurs() (SKurs steht für simulierter Kurs) der Aktie soll die Variable letzter_kurs mit einer
    zufälligen Zahl (Hinweis: Math.random()) aus dem Intervall [0.001, 1.999] multiplizieren, diesen Wert
    zurückgeben und damit den letzten Kurs aktualisieren.
    Bei einer Anleihe wird beim Erstellen der Einkaufskurs (ek_kurs) gesetzt. Die Methode getSKurs() verändert
    hier jedoch nicht den Einkaufskurs ek_kurs, sondern gibt lediglich das Produkt aus ek_kurs und einer
    zufälligen Zahl zwischen 0.8 und 1.3 zurück.
    Die Methode getSKurs() der Superklasse Wertpapier soll einen konstanten Wert 0 zurückgeben.
    Ein Portfolio muss mehrere Wertpapiere kennen. Mit aktieHinzu(..) und anleiheHinzu(..) können neue
    Wertpapiere in das Portfolio aufgenommen werden. (Hinweis: Sie können vereinfachend davon ausgehen,
    dass ein Portfolio nicht mehr als 10 Wertpapiere enthält).
    Die Methode print() aus dem Portfolio gibt auf der Kommandozeile den Namen des Portfolios, eine Auflistung
    aller Wertpapiere samt aktuellem Wert und WKN und den Gesamtwert des Portfolios aus.
    Um die Simulation zu testen, müssen Sie jetzt noch eine Klasse mit einer main()-Methode erstellen. Testweise
    legen Sie darin ein Portfolio an, dem mindestens eine Aktie und eine Anleihe hinzugefügt werden.
    Anschließend zeigen Sie die Funktionsweise durch (mindestens) zweimaligen Aufruf der print()-Methode
    des Portfolios.

    Mein bisheriger Quellcode:
    Portfolio:
    Code:
    class Portfolio{
     private String namen;
     public static Aktie aktien;
     
     public Portfolio(String name){
     this.namen = name;
     }
     public void print(){
     
     }
     public static void aktieHinzu(Aktie aktie1){
     aktien = aktie1;
     }
    }
    
    
    Wertpapier:
    Code:
    class Wertpapier {
     private String wkn;
     
     public void setWkn(String WKN) {
     this.wkn = WKN;
     }
    
     public String getWKN() {
     return wkn;
     }
     
     public double getSKurs(){
     return 0;
     }
    }
    
    Aktie:
    Code:
    class Aktie extends Wertpapier {
     
     private double letzter_kurs;
     
     public Aktie(String WKN){
     super.setWkn(WKN);
     this.letzter_kurs = getSKurs();
     }
     
     public double getSKurs(){
     double zufall = Math.round((Math.random()*( 1.999 - 0.001) + 0.001)*1000);
     zufall = zufall / 1000;
     letzter_kurs = letzter_kurs*zufall;
     return letzter_kurs;
     }
    }
    
    Anleihe:
    Code:
    class Anleihe extends Wertpapier {
     
     private double ek_kurs;
     private double produkt;
     
     public Anleihe(String WKN, double EK_KURS){
     super.setWkn(WKN);
     this.ek_kurs = EK_KURS;
     this.produkt = getSKurs();
     }
     
     public double getSKurs(){
     double zufall = Math.round((Math.random()*( 1.3 - 0.8) + 0.8)*10);
     zufall = zufall/10;
     produkt = ek_kurs*zufall;
     return produkt;
     }
    }
    
    und die master:
    Code:
    public class Master {
     public static void main(String[] args) {
     Portfolio name = new Portfolio("Neues Portfolio");
     Aktie aktie1 = new Aktie("A0JKYP");
     Portfolio.aktieHinzu(aktie1);
     }
    
    
    }
    
    Was mir fehlt:
    Was soll in aktieHinz()u bzw. anleiheHinzu() stehn? Weil das was ich hab, kanns ja nicht so ganz sein...
    Was muss in print() steht, damit das entsprechende ausgegeben wird? Und wie und wo (in master?) muss ich die aufrufen?
    Wie kann ich einem Namen mehrere Wertpapiere zuordnen?

    Passt der Code sonst? Oder hab ich den total verhaun? ^^

    gruß und schonmal besten dank,
    gl
     
  2. 5. Mai 2010
    AW: Klassen, Objekte, etc.. erstellen und ausgeben

    du musst die statische variable "aktien" als array deklarieren. so wie es aussieht mit dynamischer länge.

    kommt drauf an was du ausgeben willst. google mal nach "java-object-dump" oder so
    aufrufen musst du die methode im "master"

    mit ner hashmap
     
  3. 6. Mai 2010
    AW: Klassen, Objekte, etc.. erstellen und ausgeben

    jo, aktie muss eine liste sein, also so deklariert werden: List<Aktie> aktien;

    in aktieHinzu kannst du dann einfach folgendes aufrufen:
    aktien.add(aktie);

    die methode print soll meiner meinung nach das gesamte portfolio ausgeben. überlade dazu am besten toString() in aktie und anleihe, wo einfach alle member der klassen ausgegeben werden.
    print() durchläuft dann einfach die beiden listen von aktien und anleihen und ruft auf jedes objekt tostring() auf.
     
  4. 7. Mai 2010
    AW: Klassen, Objekte, etc.. erstellen und ausgeben

    Huhu,

    erstmal danke euch beiden.

    Wegen der HashMap...
    In dem Diagramm steht:
    Code:
    -namen : string 
    Wir haben gelernt, dass man das so deklarieren muss:
    PHP:
    private  String namen ;
    Gibt es das Diagramm her, daraus eine HashMap zu machen? Oder weiß sozusagen mein Programm automatisch, dass alle Wertpapiere dem selben Namen zugeordnet werden?

    Die Portfolio sieht bei mir jetzt so aus:
    PHP:
    import java . util . ArrayList ;
    import java . util .List;

    class 
    Portfolio {
        private 
    String namen ;
        static List<
    Aktie aktien  = new  ArrayList < Aktie >();
        static List<
    Anleihe anleihen  = new  ArrayList < Anleihe >();
        
        public 
    Portfolio ( String name ){
            
    this . namen  name ;
        }
        public 
    void  print(){
        
        }
        public 
    String getNamen () {
            return 
    this . namen ;
        }
        public static 
    void aktieHinzu ( Aktie aktie ){
            
    aktien . add ( aktie );
        }
        
        public static 
    void anleiheHinzu ( Anleihe anleihe ){
            
    anleihen . add ( anleihe );
        }
    }
    und die master:
    PHP:
    public class  Master  {
        public static 
    void main ( String []  args ) {
            
    Portfolio name  = new  Portfolio ( "Neues Portfolio" );
            
    Aktie aktie1  = new  Aktie ( "A0JKYP" );
            
    Anleihe anleihe1  = new  Anleihe ( "A0JKYP" 40.34 );
            
            
    Portfolio . aktieHinzu ( aktie1 );
            
            
    Portfolio . anleiheHinzu ( anleihe1 );
        }
    }
    Das klappt soweit. Aber beim Ausgeben haperts noch:
    Wenn ich z.b. in anleiheHinzu den übergeben Wert ausgebe, kommt:
    Code:
    [Anleihe@a90653]
    naca7 hat gemeint ich soll toString() verwenden, aber das versteh ich nicht so ganz -.-
    Dass er mir etwas bei print() ausgibt, hab ich bisher eher schlecht als recht geschafft.
    Sobal ich in der master print aufrufe, kommt, daß ich static vor print schreiben soll. Schreib ich es davor, kann ich zwar z.b. anleihe ausgeben. Aber wenn ich namen mit "this.namen" namen ausgeben lassen will, geht das nicht. mit nem getter auf namen klappt es auch nicht, weil er bei beiden will, dass ich auch namen auf static setzen soll...

    Nochmal zusammengfasst:
    1. Reicht es namen als normale Variable zu definieren oder muss es eine HashMap sein?
    2. Wie schaffe ich es alles auf print(); auszugeben? (in der Angabe steht: "Die Methode print() aus dem Portfolio gibt auf der Kommandozeile den Namen des Portfolios, eine Auflistung aller Wertpapiere samt aktuellem wert und WKN und den Gesamtwert des Portfolios aus.")

    Besten Dank!

    gl
     
  5. 7. Mai 2010
    AW: Klassen, Objekte, etc.. erstellen und ausgeben

    Du musst in der print()-Methode über die enthaltenen Aktien und Anleihen iterieren und dabei dann immer den Wert der Aktie addieren.

    PHP:
    double gesamtwert  0 ;
    for(
    Aktie a  aktien )
    {
         
    System . out . println ( a . getWKN () +  "\t"  a . getSKurs ());
         
    gesamtwert  +=  a . getSKurs ();
    }
    for(
    Anleihe a  anleihen )
    {
         
    System . out . println ( a . getWKN () +  "\t"  a . getSKurs ());
         
    gesamtwert  +=  a . getSKurs ();
    }
    System . out . println ( "Gesamtwert: "  gesamtwert );
    Aber: Wieso benutzt du eigentlich zwei verschiedene Listen für Aktien und Anleihen, da doch beide Wertpapier erweitern. Es ist folgendermaßen viel einfacher:

    PHP:
    import java . util . ArrayList ;
    import java . util .List;

    class 
    Portfolio {
        private 
    String name ;
        List<
    Wertpapier papiere  = new  ArrayList < Wertpapier >();
        
        public 
    Portfolio ( String name ){
            
    this . name  name ;
        }

        public 
    void  print(){
            
    System . out . println ( "Portfolio: "  this . getName ());
            
    double gesamtwert  0 ;
            for(
    Wertpapier a  papiere )
            {
                 
    System . out . println ( a . getWKN () +  "\t"  a . getSKurs ());
                 
    gesamtwert  +=  a . getSKurs ();
            }
            
    System . out . println ( "Gesamtwert: "  gesamtwert );
        }

        public 
    String getName () {
            return 
    this . name ;
        }

        public static 
    void papierHinzu ( Wertpapier papier ){
            
    papiere . add ( papier );
        }

    Weiterhin habe ich mal das static vor der Liste entfernt, da es doch keinen Sinn macht, dass alle Portfolios (--> neues Objekt) die selben Wertpapiere beinhalten.

    Ich hoffe mal, dass ich die Aufgabe jetzt richtig verstanden habe, aber so in etwa sollte man das lösen können.

    Chillikid
     
  6. 8. Mai 2010
    AW: Klassen, Objekte, etc.. erstellen und ausgeben

    dankeschön euch 3en
    Habs jetzt komplett hinbekommen.

    Naja, steht so in diesem Diagramm, dass wir Anleihe und Aktie getrennt behandeln sollen.

    Aber jetzt läuft es und ich hab ne Menge dazugelernt =)

    gruß
    gl
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.