# Ausgabe Briefmarke



## Huelser (23. Mrz 2010)

Hallo zusammen!
Hier die Aufgabe:
Ein Briefmarkenhändler möchte seine Angebote mit einem objektorientierten Programm verwalten.
Erweitern Sie ihr Projekt um ein neue Klasse TestBriefmarken mit einer main Methode. Erweitern Sie die main Methode um folgende Anteile:


a)	Erstellen Sie ein Array album. Das Array album soll zunächst nur 10 Briefmarken aufnehmen.
war kein problem

c)	Geben Sie alle Briefmarken des Arrays aus.
war auch kein problem

d)	Was ist die  die teuerste Briefmarke ?


```
public class Briefmarkentest
{
    public static void main(String[] args)
    {
        String[]name = new String[10];
        int[]jahr = new int [10];
        double[]preis = new double [10];
        String[]typ = new String[10];
        Briefmarke[]album = new Briefmarke [10];
        album [0] = new Briefmarke ("10 Jahre Bundesrepublik", 1959, 40);
        album [1] = new Sondermarke ("Hannover Messe", 1960, 46, "Einschreibmarke");
        album [2] = new Briefmarke ("20 Jahre Bundesrepublik", 1969, 30);
        album [3] = new Briefmarke ("30 Jahre Bundesrepublik", 1979, 20);
        album [4] = new Briefmarke ("40 Jahre Bundesrepublik", 1989, 10);
        album [5] = new Sondermarke ("Olympiade München", 1972, 40, "Einschreibmarke");
        album [6] = new Sondermarke ("Apollo 10", 1969, 20, "Einschreibmarke");
        album [7] = new Briefmarke ("Jahrhundertwechsel", 1899, 400);
        album [8] = new Briefmarke ("Millennium", 2000, 150);
        album [9] = new Briefmarke ("Cebit", 2005, 30);
        
        printAll(album, name, jahr, preis, typ);
              
        //Berechnen des max. Preis
        double max;
        max=maxpreis(preis);
        System.out.println("Die teuerste Briefmarke kostet "+max+"€.");

        }
       
          
    
    
     public static void printAll(Briefmarke[]album, String[]name, int[]jahr, double[]preis, String[]typ)
     {
       double i;
       System.out.println ("Album:" + "\n");

       for (i=0; i<album.length; i++)   
       album[i].print();
       System.out.println("\n");
        {
        
        }
     }
     
    public static double maxpreis(double preis[])
    {
        double i;
        double zahl = preis[0];

        for (i=1; i<preis.length; i++)

        [COLOR="red"]if (preis[i]>zahl)[/COLOR]
        {
            zahl=preis[i];
        }
        return zahl;
    }
}
```

Ich bekomme immer die Fehlermeldung: possible loss of precision  bei dem rot markierten aber ich finde keinen Fehler!
Kann mir jemand helfen?


----------



## SlaterB (23. Mrz 2010)

Schleifen schreibt man doch üblicherweise so:
for (int i=0; i..

dann kann man auch gar nicht auf die Idee kommen, double statt int zu verwenden


----------



## Murray (23. Mrz 2010)

i sollte ein int und  kein double sein.

//EDIT: da war Slater mal wieder schneller....


----------



## Huelser (23. Mrz 2010)

gut die meldung ist weg und ich kann kompilieren nur ist meine Ausgbabe 0! Da sollte ja eigentlich der Wert der teuersten stehen!
ich probier hier schon seit stunden rum aber auf die passende lösung bin ich nicht gekommen ist aber wahrscheinlich wieder nur eine kleinigkeit! wenn man die lösung hat packt man sich an den kopf und sagt sich "omg da hätte ich selber drauf kommen können!"^^


----------



## Murray (23. Mrz 2010)

Dein preis-Array ist ja auch leer; initialisiert wird ja nur das album-Array. Insgesamt sieht der Code sehr nach Baustelle aus - ist das album-Arry bzw. der ganze Typ Briefmarke nachträglich eingeführt worden?


----------



## Huelser (23. Mrz 2010)

Nein es wurde nicht später eingebaut!
Wir hatten damit in der Schulstunde angefangen und unser Lehrer meinte das das so richtig sei wie wir angefangen haben! Die Preise der Briefmarken stehen bei den einzelnen Marken an letzter Stelle nach dem Jahr!
Kann man darauf zugreifen?

Habe noch eine andere Lösung aber die will mein Lehrer nicht haben! -.-


----------



## Murray (23. Mrz 2010)

Huelser hat gesagt.:


> Die Preise der Briefmarken stehen bei den einzelnen Marken an letzter Stelle nach dem Jahr!
> Kann man darauf zugreifen?


Vermutlich schon - das hängt von der Klasse Briefmarke ab: gibt es dort entsprechende Methoden?

Dass die Daten in den Briefmarken-Objekten stecken, ist mir klar. Im Code gint es aber neben Briefmarke[] album auch anderen Arrays für Namen, Preis etc. Diese werden nicht gefüllt (das müssen sie auch nicht, denn die Daten stehen ja im Briefmarken-Array) und könnten vermutlich entfernt werden. 
Die maxpreis-Methode müsste anstelle des preis-Arrays das Briefmarken-Array album als Parameter bekommen.


----------



## 0din (25. Mrz 2010)

mir falln da so einige dinge auf die ich als lehrer anmerken würde... ^^ aber erstmal die lösung;

briefmarke - kennt den eigenen preis
daraus folgt das dein "preis" array unnötig is un dir nur arbeit machn würde.

```
public double maxpreis()
    { 
        double max = 0.00;

        for(Briefmarke marke : album)
        {
                if(marke.getPreis() > max)
                {
                        this.max = marke.getPreis()
                }
        }

        return max;
    }
```

wobei ich nu an den punkt komme wo ich etwas weitgreifendere anmerkungen machn muss ^^ 
1. Briefmarke sollte eine get methode für den Preis haben / preis array geht flöten
2. static fliegt raus  deine main is mehr der constructor als ne main
3. Briefmarkentest würd von mir au no n setter bzw ne add methode bekommen damit du in der main briefmarken zufügen kannst
4. ein jahr array is au unnötig  das kannste au wieder wie bei 1. machen

eben zur erklärung, falls die verbesserungen auf taube ohren stoßen darfst des gern ignoriern ^^
preis/jahr array würd dir wahsinnige arbeit machen wenn da ne größere sache draus wird wo man marken zufügen un löschen kann, außerdem kannste nu in einer foreach alle infos auf einmal rausholn
getter/setter (/add) kennste wohl? (Link)

un ebn zur main, so fürs testen isset... ok... aber ich würd au dazu übergehn un mir von anfang an angewöhnen in der main nur objekt erzeugen, dem objekt daten zufügen un von dem objekt die methoden aufrufn


----------

